| 
 | 
 
 
            本文实例讲述了PHP微信公众号开发之微信红包实现方法。分享给大家供大家参考,具体如下: 
这几天遇到了一个客户 要给他们的微信公众平台上添加微信现金红包功能,是个二次开发的功能,顺手百度一下,原来不复杂。就着手开发功能了。现将开发的过程和需求贴出来分享一下: 
一.需求: 
粉丝通过在客户的公众平台点击他们公司的订单,然后给这个订单返现五元,发到订单的这个微信号上。 
二.开发想法: 
1:先拿到关注这个粉丝的openid,openid是关注某个公众号的微信标识,这样就可以定位到这个人是订单的操作者了。 
2:发送xml数据请求微信服务器。 
代码有两个php文件 
1.oauth2.php 
error('授权失败'); 
$token_url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code'; 
$token=json_decode(file_get_contents($token_url)); 
if (isset($token->errcode)) { 
echo '错误1'.$token->errcode; 
echo ' 
错误信息1:'.$token->errmsg; 
exit; 
} 
session_start(); 
$_SESSION['openid']= $token->openid; 
header('location:http://www.XXXXXXX.com/XXXXX/XXXXXX/XXXXXX/hongbao.php');//要跳转的文件路径 
?> 
2.hongbao.php 
get_unique_value(); 
  //商户号,输入你的商户号 
  $data['mch_id']="XXXXXXX"; 
  //商户订单号,可以按要求自己组合28位的商户订单号 
  $data['mch_billno']=$data['mch_id'].date("ymd")."XXXXXX".rand(1000,9999); 
  //公众帐号appid,输入自己的公众号appid 
  $data['wxappid']="XXXXXXX"; 
  //商户名称 
  $data['send_name']="XXXXX"; 
  //用户openid,输入待发红包的用户openid 
  session_start(); 
  $data['re_openid']=$_SESSION["openid"]; 
  //付款金额 
  $data['total_amount']="XXXX"; 
  //红包发放总人数 
  $data['total_num']="XXXX"; 
  //红包祝福语 
  $data['wishing']="XXXX"; 
  //IP地址 
  $data['client_ip']=$_SERVER['LOCAL_ADDR']; 
  //活动名称 
  $data['act_name']="XXXXX"; 
  //备注 
  $data['remark']="XXXXX"; 
  // 生成签名 
  //对数据数组进行处理 
  //API密钥,输入自己的K 微信商户号里面的K 
  $appsecret="XXXXXXXXXXXXXX"; // 
  $data=array_filter($data); 
  ksort($data); 
  $str=""; 
  foreach($data as $k=>$v){ 
    $str.=$k."=".$v."&"; 
  } 
  $str.="key=".$appsecret; 
  $data['sign']=strtoupper(MD5($str)); 
  /* 
    发红包操作过程: 
      1.将请求数据转换成xml 
      2.发送请求 
      3.将请求结果转换为数组 
      4.将请求信息和请求结果录入到数据库中 
      4.判断是否通信成功 
      5.判断是否转账成功 
   */ 
  //发红包接口地址 
  $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; 
  //将请求数据由数组转换成xml 
  $xml=$this->arraytoxml($data); 
  //进行请求操作 
  $res=$this->curl($xml,$url); 
  //将请求结果由xml转换成数组 
  $arr=$this->xmltoarray($res); 
} 
// 生成32位唯一随机字符串 
private function get_unique_value(){ 
  $str=uniqid(mt_rand(),1); 
  $str=sha1($str); 
  return md5($str); 
} 
// 将数组转换成xml 
private function arraytoxml($arr){ 
  $xml=""; 
  foreach($arr as $k=>$v){ 
    $xml.="".$v.""; 
  } 
  $xml.=""; 
  return $xml; 
} 
// 将xml转换成数组 
private function xmltoarray($xml){ 
  //禁止引用外部xml实体 
  libxml_disable_entity_loader(true); 
  $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA); 
  $arr=json_decode(json_encode($xmlstring),true); 
  return $arr; 
} 
//进行curl操作 
private function curl($param="",$url) { 
  $postUrl = $url; 
  $curlPost = $param; 
  //初始化curl 
  $ch = curl_init(); 
  //抓取指定网页 
  curl_setopt($ch, CURLOPT_URL,$postUrl); 
  //设置header 
  curl_setopt($ch, CURLOPT_HEADER, 0); 
  //要求结果为字符串且输出到屏幕上 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  //post提交方式 
  curl_setopt($ch, CURLOPT_POST, 1); 
  // 增加 HTTP Header(头)里的字段 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 
  // 终止从服务端进行验证 
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  //证书放到网站根目录的cert文件夹底下 
  curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR. 
        'cert'.DIRECTORY_SEPARATOR.'apiclient_cert.pem'); 
    curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR. 
        'cert'.DIRECTORY_SEPARATOR.'apiient_key.pem'); 
    curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. 
        'cert'.DIRECTORY_SEPARATOR.'rootca.pem'); 
  //运行curl 
  $data = curl_exec($ch); 
  //关闭curl 
  curl_close($ch); 
  return $data; 
} 
?> 
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 
希望本文所述对大家PHP程序设计有所帮助。 
             
             
您可能感兴趣的文章:PHP版微信公众平台红包APIphp实现微信公众号无限群发微信支付PHP SDK之微信公众号支付代码详解php实现微信公众号主动推送消息使用PHP实现微信摇一摇周边红包PHP微信公众号自动发送红包API微信公众号判断用户是否已关注php代码解析php判断用户是否关注微信公众号Thinkphp微信公众号支付接口微信公众号开发之语音消息识别php代码微信公众号开发之文本消息自动回复php代码php版微信公众号接口实现发红包的方法 
         |   
 
 
 
 |