微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付
因?yàn)轫?xiàng)目需要,要在H5頁(yè)面中加入微信支付,所以便去嘗試,只想說(shuō)真的很坑,尤其調(diào)試起來(lái)不方便
這是微信的官方API文檔 微信API
微信支付的準(zhǔn)備工作
申請(qǐng)公眾號(hào),申請(qǐng)開(kāi)通支付,這個(gè)很簡(jiǎn)單,自行百度
申請(qǐng)好之后 在微信公眾平臺(tái)頁(yè)面的“微信支付”頁(yè)面中的“開(kāi)發(fā)配置”Tab上配置“支付授權(quán)目錄”,“測(cè)試授權(quán)目錄”,“測(cè)試白名單”
在微信公眾平臺(tái)頁(yè)面的“開(kāi)發(fā)者中心”中找到“AppID(應(yīng)用ID)”和“AppSecret(應(yīng)用密鑰)”
在商戶平臺(tái)中找到微信支付分配的商戶號(hào),以及自己配置一個(gè)商戶支付密鑰
具體步驟
首先通過(guò)微信支付的api 獲得支付用的prepay_id,這里需要用到上面提到的“AppID(應(yīng)用ID)”,“AppSecret(應(yīng)用密鑰)”,“微信支付分配的商戶號(hào)”,“商戶支付密鑰”以及其他的一些參數(shù)(具體參照微信開(kāi)發(fā)文檔)用MD5加密成簽名(第一次簽名)獲得prepay_id后,用prepay_id和一些其他參數(shù)(具體參照微信開(kāi)發(fā)文檔)用MD5加密成簽名(第二次簽名)然后在前端通過(guò)微信內(nèi)置瀏覽器提供的js API,WeixinJSBridge.invoke來(lái)調(diào)用微信支付的彈出頁(yè)面,這里需要用到上面的第二次的簽名
具體代碼如下
$.get('/xxx',function(data){ if(data && data !== ""){ var _data = $.parseJSON(data)[0]; if(parseInt(_data.userAgent) < 5){ alert('您的微信版本低于5.0,無(wú)法使用微信支付!'); 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)需要注意
支付鏈接和在開(kāi)發(fā)平臺(tái)配置的鏈接不匹配
總共需要2次簽名,并且所需的參數(shù)是不同的,在JS中用到的簽名是第二次簽名,不要混淆參數(shù)傳遞的不能有錯(cuò)
如果body中有中文需要轉(zhuǎn)義其中還有一些問(wèn)題沒(méi)有完全解決,就是位置支付沒(méi)有一個(gè)判斷失效的時(shí)間,如果在微信支付的彈出層停留時(shí)間太久了,可能這個(gè)訂單在我們網(wǎng)站上已經(jīng)失效了,可在微信支付中仍然能支付成功,如果有高人知道這個(gè)問(wèn)題怎么解決的,希望能告訴解決辦法
相關(guān)文章
談?wù)剬?duì)JavaScript原生拖放的深入理解
拖放(drag-and-drop,DnD)其實(shí)是兩個(gè)動(dòng)作——拖和放。所以,它涉及到兩個(gè)元素。一個(gè)是被拖的元素,稱為拖放源;另一個(gè)是要放的目標(biāo),稱為拖放目標(biāo)。本文將通過(guò)拆分這兩個(gè)概念來(lái)詳細(xì)介紹原生拖放,感興趣的朋友一起學(xué)習(xí)吧2016-09-09JavaScript(js)處理的HTML事件、鍵盤(pán)事件、鼠標(biāo)事件簡(jiǎn)單示例
這篇文章主要介紹了JavaScript(js)處理的HTML事件、鍵盤(pán)事件、鼠標(biāo)事件,結(jié)合實(shí)例形式分析了JavaScript針對(duì)HTML事件、鍵盤(pán)事件及鼠標(biāo)事件的簡(jiǎn)單處理方法,需要的朋友可以參考下2019-11-11JavaScript獲取字符串實(shí)際長(zhǎng)度(包含中英文)
這篇文章介紹了JavaScript獲取字符串實(shí)際長(zhǎng)度(包含中英文)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06js對(duì)url進(jìn)行編碼解碼的三種方式總結(jié)
為一個(gè)字符串進(jìn)行URL編碼很容易,只需要調(diào)用encodeURI,傳入要編碼的字符串即可,而且實(shí)現(xiàn)的方法不止這一個(gè),下面這篇文章主要給大家介紹了關(guān)于js對(duì)url進(jìn)行編碼解碼的三種方式,需要的朋友可以參考下2023-02-02JS實(shí)現(xiàn)的JSON序列化操作簡(jiǎn)單示例
這篇文章主要介紹了JS實(shí)現(xiàn)的JSON序列化操作,結(jié)合簡(jiǎn)單實(shí)例形式分析了json序列化操作相關(guān)實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下2018-07-07