当前位置:首页 > PHP教程 > php高级应用 > 列表

php实现微信发红包功能

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-16 18:32:34 浏览: 评论:0 

本文实例为大家分享了php实现微信发红包功能的具体代码,供大家参考,具体内容如下,微信商家后台-现金红包开发:

  1. <?php 
  2. class wxPay { 
  3.   //配置参数信息 
  4.   const SHANGHUHAO = "1430998xxx";//商户号 
  5.   const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx";  //api,商户后台 
  6.   //核心支付函数,参数:请求地址和参数 
  7.   function pay($url,$obj) { 
  8.     $obj['nonce_str'] = $this->create_noncestr();  //创建随机字符串 
  9.     $stringA = $this->create_qianming($obj,false);  //创建签名 
  10.     $stringSignTemp = $stringA."&key=leFyTOXWzUEXxfp47WOu5xxxxxx";  //签名后加api 
  11.     $sign = strtoupper(md5($stringSignTemp));  //签名加密并大写 
  12.     $obj['sign'] = $sign;  //将签名传入数组 
  13.     $postXml = $this->arrayToXml($obj);  //将参数转为xml格式 
  14.     var_dump($postXml);   
  15.     $responseXml = $this->curl_post_ssl($url,$postXml);  //提交请求 
  16.     var_dump($responseXml); 
  17.     return $responseXml
  18.   } 
  19.     
  20.   //生成签名,参数:生成签名的参数和是否编码 
  21.   function create_qianming($arr,$urlencode) { 
  22.     $buff = ""
  23.     ksort($arr); //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序) 
  24.     foreach ($arr as $k=>$v) { 
  25.       if(null!=$v && "null" != $v && "sign" != $k) {  //签名不要转码 
  26.         if ($urlencode) { 
  27.           $v = urlencode($v); 
  28.         } 
  29.         $buff.=$k."=".$v."&"
  30.       } 
  31.     } 
  32.     if (strlen($buff)>0) {   
  33.       $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符号“&” 
  34.     } 
  35.     return $reqPar
  36.   } 
  37.     
  38.   //生成随机字符串,默认32位 
  39.   function create_noncestr($length=32) { 
  40.     //创建随机字符 
  41.     $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  42.     $str = ""
  43.     for($i=0;$i<$length;$i++) { 
  44.       $str.=substr($chars, mt_rand(0,strlen($chars)-1),1); 
  45.     } 
  46.     return $str;   
  47.   } 
  48.   //数组转xml 
  49.   function arrayToXml($arr) { 
  50.     $xml = "<xml>"
  51.     foreach ($arr as $key=>$val) { 
  52.       if (is_numeric($val)) { 
  53.         $xml.="<".$key.">".$val."</".$key.">"
  54.       } else { 
  55.         $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"
  56.       } 
  57.     } 
  58.     $xml.="</xml>"
  59.     return $xml
  60.   } 
  61.     
  62.   //post请求网站,需要证书 
  63.   function curl_post_ssl($url$vars$second=30,$aHeader=array()) 
  64.   { 
  65.     $ch = curl_init(); 
  66.     //超时时间 
  67.     curl_setopt($ch,CURLOPT_TIMEOUT,$second); 
  68.     curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); 
  69.     //这里设置代理,如果有的话 
  70.     curl_setopt($ch,CURLOPT_URL,$url); 
  71.     curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
  72.     curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); 
  73.     //cert 与 key 分别属于两个.pem文件 
  74.     //请确保您的libcurl版本是否支持双向认证,版本高于7.20.1 
  75.     curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR. 
  76.         'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem'); 
  77.     curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR. 
  78.         'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem'); 
  79.     curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. 
  80.         'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem'); 
  81.     ifcount($aHeader) >= 1 ){ 
  82.       curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); 
  83.     } 
  84.     curl_setopt($ch,CURLOPT_POST, 1); 
  85.     curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); 
  86.     $data = curl_exec($ch); 
  87.     if($data){ 
  88.       curl_close($ch); 
  89.       return $data
  90.     } 
  91.     else { 
  92.       $error = curl_errno($ch); 
  93.       echo "call faild, errorCode:$error\n"
  94.       curl_close($ch); 
  95.       return false; 
  96.     } 
  97.   } 
  98.     

证书文件:

请在微信商户后台-API安全下载,PHP请使用php的证书文件

微信红包调用测试文件:

  1. <?php 
  2. require 'wxpay.class.php';<br><br>//数组参数 
  3. $money = 100; //最低1元,单位分 
  4. $sender = "晨缘房产"
  5. $obj2 = array(); 
  6. $obj2['wxappid'] = ""//appid 
  7. $obj2['mch_id'] = "";  //商户id 
  8. $obj2['mch_billno'] = "商户id".date('YmdHis').rand(1000,9999);  //组合成28位,根据官方开发文档,可以自行设置 
  9. $obj2['client_ip'] = $_SERVER['REMOTE_ADDR']; 
  10. $obj2['re_openid'] = "oUxO6v26wdyMHThD9kfDW6NB_xbE";  //接收红包openid 
  11. $obj2['total_amount'] = $money
  12. $obj2['min_value'] = $money
  13. $obj2['max_value'] = $money
  14. $obj2['total_num'] = 1; 
  15. $obj2['nick_name'] = $sender
  16. $obj2['send_name'] = $sender
  17. $obj2['wishing'] = "恭喜发财"
  18. $obj2['act_name'] = $sender."红包"
  19. $obj2['remark'] = $sender."红包"
  20.    
  21. $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"
  22. $wxpay = new wxPay(); 
  23. $res = $wxpay->pay($url$obj2); 
  24. var_dump($res);

Tags: php微信发红包

分享到: