日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP获取微信支付v2预支付参数prepay_id后在小程序端完成支付

發布時間:2023/12/14 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP获取微信支付v2预支付参数prepay_id后在小程序端完成支付 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 = thiswx.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要相同,參與簽名的時間戳參數也要與返回小程序端的時間戳保持相同


本文原創為CSDN用戶:繾綣淡藍海

總結

以上是生活随笔為你收集整理的PHP获取微信支付v2预支付参数prepay_id后在小程序端完成支付的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。