PHP开发的微信现金红包功能示例

2018-09-07 12:33

阅读:326

  本文实例讲述了PHP开发的微信现金红包功能。分享给大家供大家参考,具体如下:

  微信商家后台-现金红包开发

  sdk

   <?php class wxPay { //配置参数信息 const SHANGHUHAO = 1430998xxx;//商户号 const PARTNERKEY = leFyTOXWzUEXxfp47WOu5d9xxxxxx; //api,商户后台 //核心支付函数,参数:请求地址和参数 function pay($url,$obj) { $obj[nonce_str] = $this->create_noncestr(); //创建随机字符串 $stringA = $this->create_qianming($obj,false); //创建签名 $stringSignTemp = $stringA.&key=leFyTOXWzUEXxfp47WOu5xxxxxx; //签名后加api $sign = strtoupper(md5($stringSignTemp)); //签名加密并大写 $obj[sign] = $sign; //将签名传入数组 $postXml = $this->arrayToXml($obj); //将参数转为xml格式 var_dump($postXml); $responseXml = $this->curl_post_ssl($url,$postXml); //提交请求 var_dump($responseXml); return $responseXml; } //生成签名,参数:生成签名的参数和是否编码 function create_qianming($arr,$urlencode) { $buff = ; ksort($arr); //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序) foreach ($arr as $k=>$v) { if(null!=$v && null != $v && sign != $k) { //签名不要转码 if ($urlencode) { $v = urlencode($v); } $buff.=$k.=.$v.&; } } if (strlen($buff)>0) { $reqPar = substr($buff,0,strlen($buff)-1); //去掉末尾符号“&” } return $reqPar; } //生成随机字符串,默认32位 function create_noncestr($length=32) { //创建随机字符 $chars = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789; $str = ; for($i=0;$i<$length;$i++) { $str.=substr($chars, mt_rand(0,strlen($chars)-1),1); } return $str; } //数组转xml function arrayToXml($arr) { $xml = <xml>; foreach ($arr as $key=>$val) { if (is_numeric($val)) { $xml.=<.$key.>.$val.</.$key.>; } else { $xml.=<.$key.><![CDATA[.$val.]]></.$key.>; } } $xml.=</xml>; return $xml; } //post请求网站,需要证书 function curl_post_ssl($url, $vars, $second=30,$aHeader=array()) { $ch = curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //这里设置代理,如果有的话 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //cert 与 key 分别属于两个.pem文件 //请确保您的libcurl版本是否支持双向认证,版本高于7.20.1 curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR. zhengshu.DIRECTORY_SEPARATOR.apiclient_cert.pem); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR. zhengshu.DIRECTORY_SEPARATOR.apiclient_key.pem); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR. zhengshu.DIRECTORY_SEPARATOR.rootca.pem); if( count($aHeader) >= 1 ){ curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); } curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); $data = curl_exec($ch); if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); echo call faild, errorCode:$error\n; curl_close($ch); return false; } } }

  证书文件:

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

  微信红包调用测试文件:

   <?php require wxpay.class.php;<br><br>//数组参数 $money = 100; //最低1元,单位分 $sender = 晨缘房产; $obj2 = array(); $obj2[wxappid] = ; //appid $obj2[mch_id] = ;//商户id $obj2[mch_billno] = 商户id.date(YmdHis).rand(1000,9999);//组合成28位,根据官方开发文档,可以自行设置 $obj2[client_ip] = $_SERVER[REMOTE_ADDR]; $obj2[re_openid] = oUxO6v26wdyMHThD9kfDW6NB_xbE;//接收红包openid $obj2[total_amount] = $money; $obj2[min_value] = $money; $obj2[max_value] = $money; $obj2[total_num] = 1; $obj2[nick_name] = $sender; $obj2[send_name] = $sender; $obj2[wishing] = 恭喜发财; $obj2[act_name] = $sender.红包; $obj2[remark] = $sender.红包; $url =

  更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

  希望本文所述对大家PHP程序设计有所帮助。


评论


亲,登录后才可以留言!