PS:在上一篇文章中,通过对主体上传xml数据进行签名获取到了微信返回的数据,将返回的xml数据中的prepay_id提取出来后就可以进行下一步: 对prepay_id以及其他所需参数进行在此签名并将数据返回小程序端
PHP代码:
$timeStamp = time();
$postData = array( //再次签名的主体内容
'appId' => 'appId=此处写你的appid',
'nonceStr' => 'nonceStr=' . $nonce_str,
'package' => 'package=prepay_id=' . $prepay_id,
'signType' => 'signType=MD5',
'timeStamp' => 'timeStamp=' . $timeStamp,
'key' => 'key=此处写你的APIv2key',
);
$disposeData = implode('&', $postData); //将签名主体内容由数组转化为字符串
$getPaySign = MD5($disposeData); //使用MD5进行签名
$paySign = strtoupper($getPaySign);
$payBody = array( //返回给小程序的内容
'timeStamp' => (string)$timeStamp,
'nonceStr' => $nonce_str,
'package' => 'prepay_id='.$prepay_id,
'signType' => 'MD5',
'paySign' => $paySign,
);
$getpreData = json_encode($payBody);
echo $getpreData;
PS:上方PHP代码中需要注意的是:进行再签名的数据中,appId中的I是大写,在上一篇文章中的appid是小写,在此签名中的nonce_str与上一篇中获取prepay_id所需要的nonce_str是同一个变量,不需要再次生成第二个32位随机字符串,参与签名的时间戳与返回给微信的时间戳做好保持相同
小程序端JS代码:
getxml(){
var test = this
wx.getStorage({ //此处openid是从缓存中获取,我在app.js中获取openid,并将其存入本地缓存之中
key:'openid',
success(res){
console.log(res)
test.setData({
'openid':res.data
})
console.log(test.data.openid)
}
})
wx.request({
url: 'http://192.168.0.103:2908/wxPayV2/getPrepay_id.php', //此处改为你的PHP文件地址
method:'POST',
header:{
'content-type':'application/x-www-form-urlencoded'
},
data:{
'openid':test.data.openid,
'description':'0.38mm.pen', //商品描述,这里我写死了,方便后期测试用的,注意修改
'total':1 //总费用,单位为分,实际使用请乘100使其变为元
},
success(res){
console.log(res)
// test.setData({ //这一段内容看情况可以舍弃
// 'nonceStr':res.data.nonceStr,
// 'package':res.data.package,
// 'paySign': res.data.paySign,
// 'timeStamp': res.data.timeStamp
// })
wx.requestPayment({
nonceStr: res.data.nonceStr,
package: res.data.package,
paySign: res.data.paySign,
timeStamp: res.data.timeStamp,
signType: res.data.signType,
success(res){
console.log(res)
}
})
}
})
},
以上就是如何在小程序端拉起微信支付收银台,总体来看,完成微信支付v2 JSAPI支付,总计需要两次签名,可以选择使用MD5与HMAC-SHA256进行签名,注意appid参数的大小写,注意两次签名中生成的nonce_str要相同,参与签名的时间戳参数也要与返回小程序端的时间戳保持相同
本文原创为优快云用户:缱绻淡蓝海
本文介绍了如何在PHP中获取微信支付的prepay_id,并在小程序端完成支付。关键步骤包括从微信返回数据中提取prepay_id,使用MD5或HMAC-SHA256进行二次签名,确保appid的大小写正确,nonce_str一致,以及时间戳参数匹配。在小程序端,通过JS代码拉起微信支付收银台。
787

被折叠的 条评论
为什么被折叠?



