小程序 php 解析 prepay_id,微信小程序支付 (一、生成prepay_id) 2018-08-06
先羅列一下各種可能要用的鏈接
微信公眾平臺:微信公眾平臺
https://mp.weixin.qq.com/
商戶平臺:商戶平臺
https://pay.weixin.qq.com/index.php/core/home/login
開發手冊 api 是:
https://pay.weixin.qq.com/wiki/doc/api/index.html
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
生成XML的測試接口:測試接口
https://pay.weixin.qq.com/wiki/tools/signverify/
下面開始步驟
1 配置參數, 一個都不能少(這些都是必填的,還有其他選填的參數,也可以隨心情填寫)
appid? ? ? ? 此小程序的唯一標識 例如:wxed9dxxx6d6cxxx9e
body? ? ? ? 可以寫商品描述 例如:我是商品描述,用戶買了兩個饅頭
mch_id? ? 商戶id 需在 商戶平臺?查看(申請商戶平臺成功就會得到) 如: 149411***2
nonce_str? ? 隨機字符串(別帶小數點(沒考證 感覺)) 例如:76521019851170500000
notify_url? ? 成功后的通知地址 例如:https://baidu.top/callbackofpay
openid? ? ? ? 用戶的唯一標識 在用戶使用小程序的時候通過其 code 換取 openid
例如:?obxgc5CgBbgKDrvcxxxxxJ-xxxxx
out_trade_no????????商戶訂單號 例如:20180805740161 需要無重復
spbill_create_ip? ? 終端ip(服務器的ip)貌似 127.0.0.1 就行
total_fee? ? ? ? ? ? ? ? 此單的交易額度(錢 money) 例如:888 單位是 分錢。及8.88元錢 (注意是數值型,非字符型,除此之外其他的都是字符型)
trade_type? ? 小程序用 'JSAPI' 其他看api
2 將以上參數(必要參數一個不能少)按照 key 字典排序,進行拼接。
例如: appid=wxedxxx2xxx6c03e9e&body=我是商品描述,用戶買了兩個饅頭.&mch_id=149411***2&nonce_str=76521019851170500000 ......
3 在結尾加上 商戶的秘鑰?mch_key (需在商戶平臺配置 在:賬戶中心-->賬戶設置-->API安全-->API秘鑰 ,可以用 32位隨機碼生成器?生成)
+ "&key=" + mch_key
5 對拼接成的字符串,進行md5加密-->轉大寫 -->生成 簽名 sign
例如:?425F6561A654B366B5519F000CF2AE61
6 將以上參數拼成? xml
let _xmlUnifiedorder = `
${myObj.appid}
${myObj.body}
${myObj.mch_id}
${myObj.nonce_str}
${myObj.notify_url}
${myObj.openid}
${myObj.out_trade_no}
${myObj.spbill_create_ip}
${myObj.total_fee}
${myObj.trade_type}
${sign}
`;
7 攜帶參數 post 訪問??https://api.mch.weixin.qq.com/pay/unifiedorder 接口
如果正確 會成功得到 xml格式的??prepay_id ,如果簽名錯誤進行下面的錯誤查找。
~~:進行錯誤查找? 可以拿出參數在?測試接口?進行測試 ,無異常可以正常生成 xml之后,如果還報錯。
試著 更改 商戶平臺的秘鑰 (詳細請看第 3 步)。貌似很多人都踩這個雷了? ...
// 字典排序 key1=xxx&key2=zzz 拼接成字符串
function joinToStr(_obj) {
let keyArr = [];
for (let key in _obj) {
keyArr.push(key);
}
keyArr = keyArr.sort();
console.log("keyArrSort--->", keyArr);
//? ? paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6
// _str 是 paySign 中MD5 包裹的字符串部分
let _str = "";
let len = keyArr.length;
for (let i = 0; i < len; i++) {
if (i == len - 1) {
_str += (keyArr[i] + "=" + _obj[keyArr[i]]);
} else {
_str += (keyArr[i] + "=" + _obj[keyArr[i]] + "&");
}
}
return _str;
}
總結
以上是生活随笔為你收集整理的小程序 php 解析 prepay_id,微信小程序支付 (一、生成prepay_id) 2018-08-06的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash定时器
- 下一篇: 架构之美:教你如何分析一个接口?