微信支付 小程序 (v3)- 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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
header('Content-type:text/html; Charset=utf-8');
ini_set('小白轻松搭建系统点我wcqh.cndate.timezone','Asia/Shanghai');
$data_s = file_get_contents('php://input');
$data小白轻松搭建系统点我wcqh.cn_s = json_decode($data_s,true);
//统一下单
function wechartAddOrder($name,$ordernumber,$money,$openid,$tim小白轻松搭建系统点我wcqh.cneStamp,$noncestr){
$url = “https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi”;
$urlarr = parse_u小白轻松搭建系统点我wcqh.cnrl($url);
$appid = '小程序APPID';//appID
$mchid = '微信支付商户ID';//商户ID
$xlid = '微信支付公钥序列号小白轻松搭建系统点我wcqh.cn';//秘钥序列号 可在这个网址中查询 https://myssl.com/cert_decode.html
$data = array();
$time = $timeStamp;
$data[&小白轻松搭建系统点我wcqh.cn#39;appid'] = $appid;
$data['mchid'] = $mchid;
$data['description'] = $name;//商品描述小白轻松搭建系统点我wcqh.cn
$data['out_trade_no'] = $ordernumber;//订单编号
$data['notify_url'] = “你的域名/你的支付目录路径/noti小白轻松搭建系统点我wcqh.cnfy.php”;//回调接口 需根据自己的情况修改
$data['amount']['total'] = intval($money * 1);//金额 单位 分
$dat小白轻松搭建系统点我wcqh.cna['payer']['openid'] = $openid;//用户openID
$data = json_encode($data);
$key = getSign($小白轻松搭建系统点我wcqh.cndata,$urlarr['path'],$noncestr,$time);//签名
$token = sprintf('mchid=”%s”,serial_no=”%s”,no小白轻松搭建系统点我wcqh.cnnce_str=”%s”,timestamp=”%d”,signature=”%s”',$mchid,$xlid,$noncestr,$time,$key);//头部信息
$header = 小白轻松搭建系统点我wcqh.cnarray(
'Content-Type:'.'application/json; charset=UTF-8',
'Accept:application/json小白轻松搭建系统点我wcqh.cn',
'User-Agent:*/*',
'Authorization: WECHATPAY2-SHA256-RSA2048 '.$token
);
$ret = cu小白轻松搭建系统点我wcqh.cnrl_post_https($url,$data,$header);
$ret = ltrim($ret,'{“prepay_id”:”');
$ret = rtrim($ret,'小白轻松搭建系统点我wcqh.cn;}”');
//微信支付(小程序)签名
$str = getWechartSign($appid,$timeStamp,$noncestr,'prepay_id='.$ret);小白轻松搭建系统点我wcqh.cn
$arr = array('appid'=>$appid,'timestamp'=>$timeStamp,'package'=>'prepay_小白轻松搭建系统点我wcqh.cnid='.$ret,'paySign'=>$str);
exit(json_encode($arr));
}
$set_body = '支付测试';//支付显示内容
$小白轻松搭建系统点我wcqh.cnprice = '1';//支付金额
$out_trade_no = $data_s['out_trade_no'];//订单号
$timeStamp = $data_s[小白轻松搭建系统点我wcqh.cn'timeStamp'];//时间戳
$openid = $data_s['openid'];
$noncestr = $data_s['nonceStr'小白轻松搭建系统点我wcqh.cn];
wechartAddOrder($set_body,$out_trade_no,$price,$openid,$timeStamp,$noncestr);
//微信支付签名
function getS小白轻松搭建系统点我wcqh.cnign($data=array(),$url,$randstr,$time){
$str = “POST”.”\n”.$url.”\n”.$time.”\n”.$randstr.”\n”.$data.”小白轻松搭建系统点我wcqh.cn\n”;
$key = file_get_contents('apiclient_key.pem');//在商户平台下载的秘钥
$str = getSha256WithRSA($str,$小白轻松搭建系统点我wcqh.cnkey);
return $str;
}
//调起支付的签名
function getWechartSign($appid,$timeStamp,$noncestr,$prepay_id){
$str = $a小白轻松搭建系统点我wcqh.cnppid.”\n”.$timeStamp.”\n”.$noncestr.”\n”.$prepay_id.”\n”;
$key = file_get_contents('apiclient_key小白轻松搭建系统点我wcqh.cn.pem');
$str = getSha256WithRSA($str,$key);
return $str;
}
function getSha256WithRSA($content, $priv小白轻松搭建系统点我wcqh.cnateKey){
$binary_signature = “”;
$algo = “SHA256”;
openssl_sign($content, $binary_signature, $privateKe小白轻松搭建系统点我wcqh.cny, $algo);
$sign = base64_encode($binary_signature);
return $sign;
}
/* PHP CURL HTTPS POST */
function c小白轻松搭建系统点我wcqh.cnurl_post_https($url,$data,$header){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, 小白轻松搭建系统点我wcqh.cnCURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt小白轻松搭建系统点我wcqh.cn($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERV小白轻松搭建系统点我wcqh.cnER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳小白轻松搭建系统点我wcqh.cn转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发小白轻松搭建系统点我wcqh.cn送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_T小白轻松搭建系统点我wcqh.cnIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($cur小白轻松搭建系统点我wcqh.cnl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$tmp小白轻松搭建系统点我wcqh.cnInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异小白轻松搭建系统点我wcqh.cn常
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据,json格式
}
查询订单是否支付完成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
66
67
68
69
70
71
header('Content-type:text/html; Charset=utf-8');
ini_set('date.timezone',小白轻松搭建系统点我wcqh.cn'Asia/Shanghai');
$data_s = file_get_contents('php://input');
$data_s = json_decode($d小白轻松搭建系统点我wcqh.cnata_s,true);
if(empty($data_s['out_trade_no'])){
exit;
}
$out_trade_no = $data_s['out_trade_小白轻松搭建系统点我wcqh.cnno'];//订单号
$merchant_id = '商户ID';//商户ID
$mch_private_key = file_get_contents('apiclien小白轻松搭建系统点我wcqh.cnt_key.pem');//在商户平台下载的秘钥
$xlid = '微信支付公钥序列号';//秘钥序列号 可在这个网址中查询 https://myssl.com/cert_dec小白轻松搭建系统点我wcqh.cnode.html
$url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/'.$out_trade_小白轻松搭建系统点我wcqh.cnno.'?mchid='.$merchant_id;
$url_parts = parse_url($url);
$http_method = 'GET';
$timesta小白轻松搭建系统点我wcqh.cnmp = time();
$nonce = md5(time().$out_trade_no);
$body = '';
$canonical_url = ($url_parts['小白轻松搭建系统点我wcqh.cnpath'] . (!empty($url_parts['query']) ? “?${url_parts['query']}” : “”));
$message小白轻松搭建系统点我wcqh.cn = $http_method.”\n”.
$canonical_url.”\n”.
$timestamp.”\n”.
$nonce.”\n”.
$body.”\n”;
openssl_sign($messa小白轻松搭建系统点我wcqh.cnge, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');
$sign = base64_encode($raw_sign)小白轻松搭建系统点我wcqh.cn;
$schema = 'WECHATPAY2-SHA256-RSA2048';
$token = sprintf('mchid=”%s”,nonce_str=”%s”,times小白轻松搭建系统点我wcqh.cntamp=”%d”,serial_no=”%s”,signature=”%s”',$merchant_id, $nonce, $timestamp, $xlid, $sign);
$header小白轻松搭建系统点我wcqh.cn = array(
'Content-Type:'.'application/json; charset=UTF-8',
'Accept:application/小白轻松搭建系统点我wcqh.cnjson',
'User-Agent:*/*',
'Authorization: WECHATPAY2-SHA256-RSA2048 '.$token
);
$ret 小白轻松搭建系统点我wcqh.cn= curl_get_https($url,$data,$header);
$return_out_trade_no = get_between($ret,'”out_trade_no”:”&#小白轻松搭建系统点我wcqh.cn39;,'”,”payer”');
$return_trade_state = get_between($ret,'trade_state”:”','”,”tra小白轻松搭建系统点我wcqh.cnde_state_desc”');
$arr = array('type'=>'success','trade_state'=>$return_t小白轻松搭建系统点我wcqh.cnrade_state,'out_trade_no'=>$return_out_trade_no);
exit(json_encode($arr));
/*
* php截取指定两个字符之间字符小白轻松搭建系统点我wcqh.cn串
* */
function get_between($input, $start, $end) {
$substr = substr($input, strlen($start)+strpos($inp小白轻松搭建系统点我wcqh.cnut, $start),(strlen($input) – strpos($input, $end))*(-1));
return $substr;
}
/* PHP CURL HTTPS GET */
fu小白轻松搭建系统点我wcqh.cnnction curl_get_https($url,$data,$header){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt(小白轻松搭建系统点我wcqh.cn$curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AG小白轻松搭建系统点我wcqh.cnENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, 小白轻松搭建系统点我wcqh.cnCURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_s小白轻松搭建系统点我wcqh.cnetopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //小白轻松搭建系统点我wcqh.cn 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);// 头部信息
$tmpInfo = curl_exec($curl); /小白轻松搭建系统点我wcqh.cn/ 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭小白轻松搭建系统点我wcqh.cnCURL会话
return $tmpInfo; // 返回数据,json格式
}
以上就是关于微信支付小程序v3【附PHP完整后端代码】的详细内容,更多请关注php中文网其它相关文章!
暂无评论内容