php实现微信企业付款到个人零钱功能
发布时间:2018-11-28 10:51:51
来源:脚本之家
本文实例为大家分享了php微信企业付款到个人零钱的具体代码,供大家参考,具体内容如下
1.基本配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//公众账号appid $data [ "mch_appid" ] = 'appid' ; //商户号 $data [ "mchid" ] = '' ; //随机字符串 $data [ "nonce_str" ] = 'suiji' .mt_rand(100,999); //商户订单号 $data [ "partner_trade_no" ]= date ( 'YmdHis' ).mt_rand(1000,9999); //金额 用户输入的提现金额需要乘以100 $data [ "amount" ] = $money ; //企业付款描述 $data [ "desc" ] = '企业付款到个人零钱' ; //用户openid $data [ "openid" ] = $openid ; //不检验用户姓名 $data [ "check_name" ] = 'NO_CHECK' ; //获取IP $data [ 'spbill_create_ip' ]= $_SERVER [ 'SERVER_ADDR' ]; //商户密钥 $data [ 'key' ]= '' ; //商户证书 商户平台的API安全证书下载 $data [ 'apiclient_cert.pem' ] $data [ 'apiclient_key.pem' ] |
2.PHP代码
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
|
/** **开始支付 / public function userpay(){ $money = ‘用户输入提现金额'; $info [ 'money' ] = ‘用户余额'; if ( $this ->openid && $money ){ if ( $money > $info [ 'money' ] ){ echo json_encode([ 'status' => 1, 'message' => '余额不足,不能提现!' , 'code' => '余额不足,不能提现!' ]); } elseif ( $money <1){ echo json_encode([ 'status' => 2, 'message' => '提现金额不能小于1元' , 'code' => '提现金额太低' ]); } else { $openid = $this ->openid; $trade_no = date ( 'YmdHis' ).mt_rand(1000,9999); $res = $this ->pay( $openid , $trade_no , $money *100, '微信提现' ); //结果打印 if ( $res [ 'result_code' ]== "SUCCESS" ){ echo json_encode([ 'status' => 3, 'message' => '提现成功!' , ]); } elseif ( $res [ 'err_code' ]== "SENDNUM_LIMIT" ){ echo json_encode([ 'status' => 4, 'message' => '提现失败!' , 'code' => '每日仅能提现一次' , ]); } else { echo json_encode([ 'status' => 5, 'message' => '提现失败!' , 'code' => $res [ 'err_code' ], ]); } } } else { echo json_encode([ 'status' => 5, 'message' => '未检测到您当前微信账号~' , ]); } } |
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
|
/** *支付方法 / public function pay( $openid , $trade_no , $money , $desc ){ $params [ "mch_appid" ]= '' ; $params [ "mchid" ] = '' ; $params [ "nonce_str" ]= 'suiji' .mt_rand(100,999); $params [ "partner_trade_no" ] = $trade_no ; $params [ "amount" ]= $money ; $params [ "desc" ]= $desc ; $params [ "openid" ]= $openid ; $params [ "check_name" ]= 'NO_CHECK' ; $params [ 'spbill_create_ip' ] = $_SERVER [ 'SERVER_ADDR' ]; //生成签名 $str = 'amount=' . $params [ "amount" ]. '&check_name=' . $params [ "check_name" ]. '&desc=' . $params [ "desc" ]. '&mch_appid=' . $params [ "mch_appid" ]. '&mchid=' . $params [ "mchid" ]. '&nonce_str=' . $params [ "nonce_str" ]. '&openid=' . $params [ "openid" ]. '&partner_trade_no=' . $params [ "partner_trade_no" ]. '&spbill_create_ip=' . $params [ 'spbill_create_ip' ]. '&key=商户密钥' ; //md5加密 转换成大写 $sign = strtoupper (md5( $str )); //生成签名 $params [ 'sign' ] = $sign ; //构造XML数据 $xmldata = $this ->array_to_xml( $params ); //数组转XML //发送post请求 $res = $this ->curl_post_ssl( $url , $xmldata ); //curl请求 if (! $res ){ return array ( 'status' =>1, 'msg' => "服务器连接失败" ); } //付款结果分析 $content = $this ->xml_to_array( $res ); //xml转数组 return $content ; } |
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
|
/** * curl请求 / public function curl_post_ssl( $url , $xmldata , $second =30, $aHeader = array ()){ $ch = curl_init(); //超时时间 curl_setopt( $ch ,CURLOPT_TIMEOUT, $second ); curl_setopt( $ch ,CURLOPT_RETURNTRANSFER, 1); //这里设置代理,如果有的话 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt( $ch ,CURLOPT_URL, $url ); curl_setopt( $ch ,CURLOPT_SSL_VERIFYPEER,false); curl_setopt( $ch ,CURLOPT_SSL_VERIFYHOST,false); //默认格式为PEM,可以注释 curl_setopt( $ch ,CURLOPT_SSLCERTTYPE, 'PEM' ); //绝对地址可使用 dirname(__DIR__)打印,如果不是绝对地址会报 58 错误 curl_setopt( $ch ,CURLOPT_SSLCERT, ' 绝对地址/apiclient_cert.pem' ); curl_setopt( $ch ,CURLOPT_SSLKEYTYPE, 'PEM' ); curl_setopt( $ch ,CURLOPT_SSLKEY, '绝对地址/apiclient_key.pem' ); if ( count ( $aHeader ) >= 1 ){ curl_setopt( $ch , CURLOPT_HTTPHEADER, $aHeader ); } curl_setopt( $ch ,CURLOPT_POST, 1); curl_setopt( $ch ,CURLOPT_POSTFIELDS, $xmldata ); $data = curl_exec( $ch ); if ( $data ){ curl_close( $ch ); return $data ; } else { $error = curl_errno( $ch ); echo "call faild, errorCode:$error\n" ; die (); curl_close( $ch ); return false; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/** * array 转 xml * 用于生成签名 */ public function array_to_xml( $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 ; } |
1
2
3
4
5
6
7
8
9
|
/** * xml 转化为array */ public function xml_to_array( $xml ){ //禁止引用外部xml实体 libxml_disable_entity_loader(true); $values = json_decode(json_encode(simplexml_load_string( $xml , 'SimpleXMLElement' , LIBXML_NOCDATA)), true); return $values ; } |
以上就是本文的全部内容,希望对大家的学习有所帮助