微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁面支付
因?yàn)轫?xiàng)目需要,要在H5頁面中加入微信支付,所以便去嘗試,只想說真的很坑,尤其調(diào)試起來不方便
這是微信的官方API文檔 微信API
微信支付的準(zhǔn)備工作
申請(qǐng)公眾號(hào),申請(qǐng)開通支付,這個(gè)很簡單,自行百度
申請(qǐng)好之后 在微信公眾平臺(tái)頁面的“微信支付”頁面中的“開發(fā)配置”Tab上配置“支付授權(quán)目錄”,“測試授權(quán)目錄”,“測試白名單”
在微信公眾平臺(tái)頁面的“開發(fā)者中心”中找到“AppID(應(yīng)用ID)”和“AppSecret(應(yīng)用密鑰)”
在商戶平臺(tái)中找到微信支付分配的商戶號(hào),以及自己配置一個(gè)商戶支付密鑰
具體步驟
首先通過微信支付的api 獲得支付用的prepay_id,這里需要用到上面提到的“AppID(應(yīng)用ID)”,“AppSecret(應(yīng)用密鑰)”,“微信支付分配的商戶號(hào)”,“商戶支付密鑰”以及其他的一些參數(shù)(具體參照微信開發(fā)文檔)用MD5加密成簽名(第一次簽名)獲得prepay_id后,用prepay_id和一些其他參數(shù)(具體參照微信開發(fā)文檔)用MD5加密成簽名(第二次簽名)然后在前端通過微信內(nèi)置瀏覽器提供的js API,WeixinJSBridge.invoke來調(diào)用微信支付的彈出頁面,這里需要用到上面的第二次的簽名
具體代碼如下
$.get('/xxx',function(data){
if(data && data !== ""){
var _data = $.parseJSON(data)[0];
if(parseInt(_data.userAgent) < 5){
alert('您的微信版本低于5.0,無法使用微信支付!');
return false;
}
WeixinJSBridge.invoke('getBrandWCPayRequest',{
'appId': _data.appId,
'timeStamp': _data.timeStamp,
'nonceStr': _data.nonceStr,
'package': 'prepay_id=' + _data.packageOne,
'signType': _data.signType,
'paySign': _data.paySign
},function(res){
if(res.err_msg === 'get_brand_wcpay_request:ok'){
alert('支付成功,返回訂單列表!');
}else if(res.err_msg === 'get_brand_wcpay_request:cancel'){
alert('取消支付!');
}
});
}
});
幾個(gè)容易失敗點(diǎn)需要注意
支付鏈接和在開發(fā)平臺(tái)配置的鏈接不匹配
總共需要2次簽名,并且所需的參數(shù)是不同的,在JS中用到的簽名是第二次簽名,不要混淆參數(shù)傳遞的不能有錯(cuò)
如果body中有中文需要轉(zhuǎn)義其中還有一些問題沒有完全解決,就是位置支付沒有一個(gè)判斷失效的時(shí)間,如果在微信支付的彈出層停留時(shí)間太久了,可能這個(gè)訂單在我們網(wǎng)站上已經(jīng)失效了,可在微信支付中仍然能支付成功,如果有高人知道這個(gè)問題怎么解決的,希望能告訴解決辦法
相關(guān)文章
uni-app和原生小程序混合開發(fā)的具體實(shí)現(xiàn)過程
最近項(xiàng)目中遇到了一些功能需要與原生進(jìn)行混合開發(fā),所以下面這篇文章主要給大家介紹了關(guān)于uni-app和原生小程序混合開發(fā)的具體實(shí)現(xiàn)過程,需要的朋友可以參考下2022-07-07
layer.open回調(diào)獲取彈出層參數(shù)的實(shí)現(xiàn)方法
今天小編就為大家分享一篇layer.open回調(diào)獲取彈出層參數(shù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
js onmousewheel事件多次觸發(fā)問題解決方法
做一個(gè)首屏和第二屏之間滾動(dòng)鼠標(biāo)滾輪就可以整平切換的效果,遇到了很多問題,下面是問題解決方法2014-10-10
適用于javascript開發(fā)者的Processing.js入門教程
這篇文章主要介紹了適用于javascript開發(fā)者的Processing.js入門教程,感興趣的小伙伴們可以參考一下2016-02-02
詳細(xì)談?wù)凧S中的內(nèi)存與變量存儲(chǔ)
js中的變量在內(nèi)存中的具體存儲(chǔ)形式是我們學(xué)習(xí)使用JS必會(huì)的,下面這篇文章主要給大家介紹了關(guān)于JS中內(nèi)存與變量存儲(chǔ)的相關(guān)資料,需要的朋友可以參考下2021-08-08
文字溢出實(shí)現(xiàn)溢出的部分再放入一個(gè)新生成的div中具體代碼
說文字溢出,如何實(shí)現(xiàn)溢出的文字放入一個(gè)新生成的div中,原理就是判斷是否能在div里放下,如果不能,則在應(yīng)該斷開的地方,差入到新的div中2013-05-05
window.parent調(diào)用父框架時(shí) ie跟火狐不兼容問題
window.parent調(diào)用父框架時(shí),ie跟火狐不兼容問題!2009-07-07
CKEditor擴(kuò)展插件:自動(dòng)排版功能autoformat插件實(shí)現(xiàn)方法詳解
這篇文章主要介紹了CKEditor擴(kuò)展插件:自動(dòng)排版功能autoformat插件實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了CKEditor擴(kuò)展插件實(shí)現(xiàn)自動(dòng)排版功能的autoformat插件具體定義、配置與使用技巧,需要的朋友可以參考下2020-02-02

