本文实例讲述了PHP开发的微信现金红包功能。分享给大家供大家参考,具体如下:
微信商家后台-现金红包开发
sdk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
<?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的证书文件
微信红包调用测试文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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 = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack" ; $wxpay = new wxPay(); $res = $wxpay ->pay( $url , $obj2 ); var_dump( $res ); |
希望本文所述对大家PHP程序设计有所帮助。