ecshop老版的是沒(méi)有微信支付接口的,必須安裝官方的微信通插件,另外,你還要有通過(guò)認(rèn)證的服務(wù)號(hào),才能獲取微信支付接口權(quán)限
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),先為桃江等服務(wù)建站,桃江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為桃江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1、用戶(hù)在商戶(hù)側(cè)完成下單,使用微信支付進(jìn)行支付
2、由商戶(hù)后臺(tái)向微信支付發(fā)起下單請(qǐng)求( 調(diào)用統(tǒng)一下單接口 )注:交易類(lèi)型trade_type=MWEB
3、統(tǒng)一下單接口返回支付相關(guān)參數(shù)給商戶(hù)后臺(tái),如支付跳轉(zhuǎn)url(參數(shù)名“mweb_url”),商戶(hù)通過(guò)mweb_url調(diào)起微信支付中間頁(yè)
4、中間頁(yè)進(jìn)行H5權(quán)限的校驗(yàn),安全性檢查(此處常見(jiàn)錯(cuò)誤請(qǐng)見(jiàn)下文)
5、如支付成功,商戶(hù)后臺(tái)會(huì)接收到微信側(cè)的異步通知
6、用戶(hù)在微信支付收銀臺(tái)完成支付或取消支付,返回商戶(hù)頁(yè)面(默認(rèn)為返回支付發(fā)起頁(yè)面)
7、商戶(hù)在展示頁(yè)面,引導(dǎo)用戶(hù)主動(dòng)發(fā)起支付結(jié)果的查詢(xún)
8,9、商戶(hù)后臺(tái)判斷是否接收到微信側(cè)的支付結(jié)果通知,如沒(méi)有,后臺(tái)調(diào)用我們的 訂單查詢(xún)接口 確認(rèn)訂單狀態(tài)(查單實(shí)現(xiàn)可參考: 支付回調(diào)和查單實(shí)現(xiàn)指引 )
10、展示最終的訂單支付結(jié)果給用戶(hù)
常見(jiàn)問(wèn)題
一、回調(diào)頁(yè)面
正常流程用戶(hù)支付完成后會(huì)返回至發(fā)起支付的頁(yè)面,如需返回至指定頁(yè)面,則可以在MWEB_URL后拼接上redirect_url參數(shù),來(lái)指定回調(diào)頁(yè)面。
如,您希望用戶(hù)支付完成后跳轉(zhuǎn)至 ,則可以做如下處理:
假設(shè)您通過(guò)統(tǒng)一下單接口獲到的MWEB_URL= ;package=1037687096
則拼接后的地址為MWEB_URL= ;package=1037687096redirect_url=https%3A%2F%2F
注意:
1.需對(duì)redirect_url進(jìn)行urlencode處理
2.由于設(shè)置redirect_url后,回跳指定頁(yè)面的操作可能發(fā)生在:
a、微信支付中間頁(yè)調(diào)起微信收銀臺(tái)后超過(guò)5秒
b、用戶(hù)點(diǎn)擊“取消支付”或支付完成后點(diǎn)擊“完成”按鈕。因此無(wú)法保證頁(yè)面回跳時(shí),支付流程已結(jié)束,所以商戶(hù)設(shè)置的redirect_url地址不能自動(dòng)執(zhí)行查單操作,應(yīng)讓用戶(hù)去點(diǎn)擊按鈕觸發(fā)查單操作?;靥?yè)面展示效果可參考下圖
二、其它常見(jiàn)錯(cuò)誤
| 網(wǎng)絡(luò)環(huán)境未能通過(guò)安全驗(yàn)證,請(qǐng)稍后再試 | 1. 商戶(hù)側(cè)統(tǒng)一下單傳的終端IP(spbill_create_ip)與用戶(hù)實(shí)際調(diào)起支付時(shí)微信側(cè)檢測(cè)到的終端IP不一致導(dǎo)致的,這個(gè)問(wèn)題一般是商戶(hù)在統(tǒng)一下單時(shí)沒(méi)有傳遞正確的終端IP到spbill_create_ip導(dǎo)致,詳細(xì)可參見(jiàn) 客戶(hù)端ip獲取指引
2. 統(tǒng)一下單與調(diào)起支付時(shí)的網(wǎng)絡(luò)有變動(dòng),如統(tǒng)一下單時(shí)是WIFI網(wǎng)絡(luò),下單成功后切換成4G網(wǎng)絡(luò)再調(diào)起支付,這樣可能會(huì)引發(fā)我們的正常攔截,請(qǐng)保持網(wǎng)絡(luò)環(huán)境一致的情況下重新發(fā)起支付流程
|
| 2 |
| 商家參數(shù)格式有誤,請(qǐng)聯(lián)系商家解決 |
1. 當(dāng)前調(diào)起H5支付的referer為空導(dǎo)致,一般是因?yàn)橹苯釉L問(wèn)頁(yè)面調(diào)起H5支付,請(qǐng)按正常流程進(jìn)行頁(yè)面跳轉(zhuǎn)后發(fā)起支付,或自行抓包確認(rèn)referer值是否為空
2. 如果是APP里調(diào)起H5支付,需要在webview中手動(dòng)設(shè)置referer,如(
Mapstring extraHeaders = new HashMapstring();
extraHeaders.put("Referer", "商戶(hù)申請(qǐng)H5時(shí)提交的授權(quán)域名");//例如 )/string/string
|
| 3 |
| 商家存在未配置的參數(shù),請(qǐng)聯(lián)系商家解決 | 1,當(dāng)前調(diào)起H5支付的域名(微信側(cè)從referer中獲?。┡c申請(qǐng)H5支付時(shí)提交的授權(quán)域名不一致,如需添加或修改授權(quán)域名,請(qǐng)登錄商戶(hù)號(hào)對(duì)應(yīng)的【商戶(hù)平臺(tái)-產(chǎn)品中心-開(kāi)發(fā)配置】自行配置
2,如果設(shè)置了回跳地址redirect_url,請(qǐng)確認(rèn)設(shè)置的回跳地址的域名與申請(qǐng)H5支付時(shí)提交的授權(quán)域名是否一致 |
| 4 |
| 支付請(qǐng)求已失效,請(qǐng)重新發(fā)起支付 | 統(tǒng)一下單返回的MWEB_URL生成后,有效期為5分鐘,如超時(shí)請(qǐng)重新生成MWEB_URL后再發(fā)起支付 |
| 5 |
| 請(qǐng)?jiān)谖⑿磐獯蜷_(kāi)訂單,進(jìn)行支付 | H5支付不能直接在微信客戶(hù)端內(nèi)調(diào)起,請(qǐng)?jiān)谕獠繛g覽器調(diào)起 |
| 6 |
| IOS:簽名驗(yàn)證失敗
安卓:系統(tǒng)繁忙,請(qǐng)稍后再試 | 1,請(qǐng)確認(rèn)同一個(gè)MWEB_URL只被一個(gè)微信號(hào)調(diào)起,如果不同微信號(hào)調(diào)起請(qǐng)重新下單生成新的MWEB_URL
2,如MWEB_URL有添加redirect_url,請(qǐng)確認(rèn)參數(shù)拼接格式是否有誤,是否有對(duì)redirect_url的值做urlencode,可對(duì)比以下例子格式:
;package=1037687096redirect_url=https%3A%2F%2F |
|
|
| 7 |
| 由于商家傳入的H5交易參數(shù)有誤,該筆交易暫時(shí)無(wú)法完成,請(qǐng)聯(lián)系商家解決 | 統(tǒng)一下單中 spbill_create_ip 字段必須為客戶(hù)端IP地址 |
三、QA
Q1:
1、傳遞redirect_url safari瀏覽器時(shí)支付完成后會(huì)新開(kāi)一個(gè)頁(yè)面;
2、還有就是有些ios手機(jī)使用其他瀏覽器支付完成后默認(rèn)會(huì)回到safari瀏覽器。
A1:
1、目前邏輯就是這樣設(shè)計(jì)的,防止商戶(hù)無(wú)限循環(huán)調(diào)用微信客戶(hù)端
2、對(duì)的,返回需要瀏覽器的schema信息,部分瀏覽器隱藏了這個(gè)信息,在無(wú)法拿到schema信息的情況下,就會(huì)回到safari瀏覽器
因?yàn)楦鞣N原因吧,我們?cè)谧鲆苿?dòng)端開(kāi)發(fā)的時(shí)候,涉及到money,我們經(jīng)常要做微信支付。如果是做小程序開(kāi)發(fā),我們可以直接用小程序的原生接口,一鍵搞定,如果是h5網(wǎng)頁(yè)的話(huà),那我們就需要使用微信提供的js-sdk了。
注:使用了jssdk不是所有的環(huán)境都可以調(diào)用微信來(lái)支付,它只是單純的微信環(huán)境下支付,如果要想支持非微信瀏覽器內(nèi)支付,需要開(kāi)通微信h5支付功能,我們現(xiàn)在用的都是微信的JSAPI支付,而微信的h5支付是要求商戶(hù)已有H5商城網(wǎng)站,并且已經(jīng)過(guò)ICP備案。哈哈哈哈,是不是很驚訝!太坑了呀!
雖然坑,還得用,那咱就搞一下它。
首先,打開(kāi)我們的微信公眾平臺(tái),閱讀一下網(wǎng)頁(yè)開(kāi)發(fā)的基本要求
然后我們了解到,使用js-sdk,我們先要
然后呢,這里給你們講一下,我們接下來(lái)要做的事情。
首先呢,我們要先要獲得網(wǎng)頁(yè)授權(quán),然后我們跳轉(zhuǎn)我們項(xiàng)目中的業(yè)務(wù)頁(yè)面。
這里主要是appid和重定向頁(yè)面,至于是否彈出授權(quán)頁(yè)面(scope=snsapi_userinfo/snsapi_base )等等,根據(jù)你自己需求來(lái)。然后呢,我們通過(guò)這個(gè)來(lái)進(jìn)入頁(yè)面的時(shí)候,在當(dāng)前你支付頁(yè)面的url上會(huì)有授權(quán)后返回的code參數(shù)。
如果提示:調(diào)用支付jsapi缺少參數(shù): 這是由于沒(méi)拿到openid導(dǎo)致,可以把window.location.href 替換成window,location.replace() ,這是因?yàn)槲⑿啪W(wǎng)頁(yè)授權(quán)會(huì)2次刷新頁(yè)面,我們這樣做能有效避免錯(cuò)誤。
然后呢,我們定義一個(gè)方法
通過(guò) let code = this.getQueryString('code'),我們?nèi)フ{(diào)用后端提供的接口,來(lái)獲取openId。我們的支付不需要我去另外獲取openId了,同學(xué)們自行卑微的通過(guò)接口用code換取openId吧
要注意的是,每次用戶(hù)授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過(guò)期 。
然后我們接下來(lái)就是我們真正進(jìn)行支付操作的時(shí)刻了
到這里,我們的微信支付基本就是完成了.其實(shí)整體做下來(lái)我們發(fā)現(xiàn),無(wú)非是比把大象裝冰箱里多兩步而已
然后我們把我們封裝的接口用起來(lái)
到此,一個(gè)完整的h5微信支付就完成了。下一次,我們把微信分享也添加進(jìn)來(lái)。這樣,一個(gè)我們常用的基于微信SDK的支付分享功能就被我們完成了。如果覺(jué)得對(duì)你有幫助的話(huà),幫作者點(diǎn)個(gè)贊吧,碼文不易,點(diǎn)一下支持支持!謝謝您嘞!