<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你接入微信支付

          共 6547字,需瀏覽 14分鐘

           ·

          2021-04-13 11:57


          隨著微信小程序的發(fā)展,越來(lái)越多的移動(dòng)端應(yīng)用選擇了微信產(chǎn)品作為媒介。無(wú)論是公眾號(hào)開(kāi)發(fā)還是小程序開(kāi)發(fā),微信支付永遠(yuǎn)都是繞不開(kāi)的話題。由于微信支付涉及了很多場(chǎng)景,本文我們只學(xué)習(xí)如何在公眾號(hào)、小程序中接入微信支付。

          一、微信支付的前提條件

          1.1 公眾號(hào)

          微信公眾號(hào)大體上可以分為服務(wù)號(hào)和訂閱號(hào),訂閱號(hào)和服務(wù)號(hào)的具體區(qū)別在以前寫(xiě)過(guò)的一篇文章Spring Boot開(kāi)發(fā)微信公眾號(hào)中具體介紹了,這里就不再贅述,總的來(lái)說(shuō)就是服務(wù)號(hào)提供了更高級(jí)的功能。

          微信支付接入需要已經(jīng)完成微信認(rèn)證的服務(wù)號(hào)。如果是小程序的話,也需要完成微信認(rèn)證

          公眾號(hào)可以關(guān)聯(lián)同一主體的10個(gè)小程序,不同主體的3個(gè)小程序,如果是和公眾號(hào)同一主體的小程序并且公眾號(hào)已經(jīng)完成認(rèn)證,則直接可以在公眾號(hào)后臺(tái)的小程序管理中,進(jìn)行快速注冊(cè)并認(rèn)證,這樣就無(wú)需重復(fù)支付微信認(rèn)證所需的300RMB了。

          1.2 微信商戶平臺(tái)

          微信認(rèn)證完成后,在公眾號(hào)后臺(tái)的 微信支付 中開(kāi)通微信支付功能。提交微信支付申請(qǐng)后,3-5個(gè)工作日內(nèi),會(huì)進(jìn)行審核,審核通過(guò)后會(huì)往你填寫(xiě)的郵箱里發(fā)送一份包含商戶號(hào)信息的郵件,同時(shí)會(huì)往你填寫(xiě)的對(duì)公賬戶中打幾毛錢的匯款,需要你查看具體金額后在商戶平臺(tái)中驗(yàn)證。

          商戶分為普通商戶和服務(wù)商商戶,千萬(wàn)不要申請(qǐng)錯(cuò)了。

          普通商戶是可以進(jìn)行交易,但是不能拓展商戶。

          服務(wù)商可以拓展商戶,但是不能交易。

          服務(wù)商就是提供統(tǒng)一的支付入口,它需要綁定具體的普通商戶,微信支付時(shí)會(huì)在支付接口中攜帶普通商戶參數(shù),支付成功后金額會(huì)直接到具體的普通商戶賬戶上。

          申請(qǐng)時(shí)直接申請(qǐng)普通商戶就可以了。

          1.3 綁定商戶

          微信支付發(fā)起依賴于公眾號(hào)、小程序等應(yīng)用與商戶號(hào)的綁定關(guān)系。因此在進(jìn)行開(kāi)發(fā)前,需要將商戶與具體應(yīng)用進(jìn)行綁定。

          如果商戶和需要綁定的AppID是同一主體,只需要以下步驟即可完成綁定。

          • 在商戶平臺(tái)-產(chǎn)品中心-AppID賬戶管理中關(guān)聯(lián)AppID,輸入AppId申請(qǐng)綁定
          • 在公眾號(hào)或小程序后臺(tái)微信支付-商戶號(hào)管理中進(jìn)行確認(rèn)。

          如果商戶和需要綁定的AppID是不同主體,步驟和上述一樣,除了輸入AppId之外,還需要填入AppId的認(rèn)證信息。

          二、微信支付相關(guān)配置

          2.1 支付產(chǎn)品類型

          1. 付款碼支付

          用戶打開(kāi)微信錢包-付款碼的界面,商戶掃碼后提交完成支付。

          2. JSAPI支付

          用戶通過(guò)微信掃碼,關(guān)注公眾號(hào)等方式進(jìn)入商家H5頁(yè)面,并在微信內(nèi)調(diào)用JSSDK完成支付。

          3. Native支付

          用戶打開(kāi)微信掃一掃,掃描商戶的二維碼后完成支付。

          4. APP支付

          商戶APP中集成微信SDK,用戶點(diǎn)擊后跳轉(zhuǎn)到微信內(nèi)完成支付。

          5. H5支付

          用戶在微信以外的手機(jī)瀏覽器請(qǐng)求微信支付的場(chǎng)景喚起微信支付。

          6. 小程序支付

          用戶在微信小程序中使用微信支付的場(chǎng)景。

          7. 刷臉支付

          無(wú)需掏出手機(jī),刷臉完成支付,適合線下各種場(chǎng)景。

          在商戶平臺(tái)-產(chǎn)品中心-我的產(chǎn)品中申請(qǐng)開(kāi)通支付產(chǎn)品。

          2.2 支付授權(quán)目錄配置

          在商戶平臺(tái)-產(chǎn)品中心-開(kāi)發(fā)配置中進(jìn)行支付授權(quán)目錄的配置(即你開(kāi)發(fā)的下單接口地址),需要注意的是授權(quán)目錄最多可以配置五個(gè),在開(kāi)發(fā)過(guò)程中請(qǐng)合理定義支付接口。

          2.3 配置商戶密鑰

          在商戶平臺(tái)-賬戶中心-API安全中設(shè)置API密鑰。

          第一次設(shè)置時(shí),需要安裝操作證書(shū),傻瓜式安裝,按照提示一步一步操作就可以。

          API密鑰需要一個(gè)32位的隨機(jī)字符串,記得不要隨意更改API密鑰

          在微信API v3版本中,除了要配置API密鑰外,還需要配置APIv3密鑰和申請(qǐng)CA頒發(fā)的API證書(shū)。

          • API v3密鑰主要用于平臺(tái)證書(shū)解密、回調(diào)信息解密。

          • API證書(shū)用于調(diào)用更高級(jí)別的api接口,包含退款、紅包等接口。

          如果使用開(kāi)源的微信開(kāi)發(fā)包,請(qǐng)了解是否支持v3版本

          2.4 配置服務(wù)器

          在公眾號(hào)后臺(tái)-開(kāi)發(fā)-基本配置-服務(wù)器配置中啟用并填寫(xiě)服務(wù)器信息。

          2.5 白名單配置

          在公眾號(hào)后臺(tái)-開(kāi)發(fā)-基本配置-公眾號(hào)開(kāi)發(fā)信息中配置開(kāi)發(fā)者密鑰,同時(shí)填寫(xiě)IP白名單。

          2.6 JS接口安全域名

          在公眾號(hào)后臺(tái)-公眾號(hào)設(shè)置-功能設(shè)置中設(shè)置JS接口安全域名。

          上面的配置是基于公眾號(hào)支付配置的,小程序支付沒(méi)有這么麻煩,小程序支付不用配置支付授權(quán)目錄和授權(quán)域名。


          JSAPI小程序
          支付協(xié)議HTTP/HTTPSHTTPS
          支付目錄無(wú)
          授權(quán)域名無(wú)

          三、微信支付流程

          由于微信升級(jí)了API接口,在API v3接口中,需要加載申請(qǐng)的API證書(shū),微信已經(jīng)封裝了相關(guān)jar包,并且提供了加載示例,具體可參考“https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_3.shtml”,這里就不再贅述。我們以API v2為例詳細(xì)學(xué)習(xí)一下微信接入的主要流程(因?yàn)锳PI v3的一些接口還在持續(xù)升級(jí),v2接口相對(duì)完整)。

          上面的這張圖片來(lái)自微信開(kāi)發(fā)文檔,我們?cè)敿?xì)分析一下支付流程。

          3.1 微信下單接口

          用戶通過(guò)微信客戶端發(fā)起支付,在商戶后臺(tái)生成訂單,然后調(diào)用微信下單接口,生成預(yù)支付訂單,返回訂單號(hào)!

          下單接口涉及到的主要參數(shù),只列舉重要的幾個(gè)參數(shù):

          請(qǐng)求參數(shù)是否必傳類型描述
          appidString公眾號(hào)appid
          mch_idString商戶號(hào)
          nonce_strString隨機(jī)字符串,32位以內(nèi)
          signString簽名,默認(rèn)使用MD5進(jìn)行加密
          out_trade_noString系統(tǒng)內(nèi)部訂單號(hào)
          total_feeInt訂單總金額,單位是分
          notify_urlString支付結(jié)果通知接口

          sign的簽名也比較通用,涉及了一個(gè)保證簽名不可預(yù)測(cè)的nonce_str

          • 將所有發(fā)送的非空參數(shù)使用字典排序生成鍵值對(duì)(key1=value1&key2=value2);
          • 將商戶平臺(tái)密鑰拼接在上述字符串的最后("String"+&key=密鑰);
          • 將上述字符串采用MD5加密

          3.2 支付

          拉起微信支付,輸入密碼,完成支付。這一步需要在H5網(wǎng)頁(yè)中執(zhí)行JS調(diào)起支付。

          需要以下參數(shù),因此在預(yù)付訂單返回時(shí),需要將下列參數(shù)封裝后響應(yīng)給頁(yè)面,由頁(yè)面完成支付。

          參數(shù)名是否必傳類型描述
          appIdString公眾號(hào)id
          timeStampString當(dāng)前時(shí)間戳
          nonceStrString隨機(jī)字符串
          packageString預(yù)支付訂單,格式為prepay_id=***
          signTypeString簽名類型,默認(rèn)MD5
          paySignString簽名

          簽名和下單接口的簽名方式一樣。

          JS偽代碼如下:

          function onBridgeReady(){
              WeixinJSBridge.invoke(
                  'getBrandWCPayRequest', {
                      // 公眾號(hào)ID,由商戶傳入
                      "appId":"wx2421b1c4370ec43b",
                      // 時(shí)間戳,自1970年以來(lái)的秒數(shù)
                      "timeStamp":"1395712654",  
                      // 隨機(jī)串
                      "nonceStr":"e61463f8efa94090b1f366cccfbbb444",
                      "package":"prepay_id=u802345jgfjsdfgsdg888"
                      // 微信簽名方式
                      "signType":"MD5",
                      // 微信簽名
                      "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89"
                  },
                  function(res){
                      if(res.err_msg == "get_brand_wcpay_request:ok" ){
                          // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
                          // res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。
                      } 
                  }); 
          }
          if (typeof WeixinJSBridge == "undefined"){
              ifdocument.addEventListener ){
                  document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
              }else if (document.attachEvent){
                  document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
                  document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
              }
          }else{
              onBridgeReady();
          }

          注意偽代碼中的這句話// res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。為什么這么說(shuō)呢,我舉個(gè)例子應(yīng)該就明白了。假如你去超市買東西,是不是你說(shuō)支付成功了你就可以把東西帶走呢?肯定不是,是當(dāng)商家收到錢后才算你支付成功,你才可以把東西帶走。也就是說(shuō),這里提示的成功并不能說(shuō)一定支付成功了,具體是否成功,微信平臺(tái)會(huì)以異步的方式給你進(jìn)行通知。

          3.3 異步通知

          異步通知是比較重要的一步,在這里你可以根據(jù)通知結(jié)果處理你的業(yè)務(wù)邏輯。但是,可能會(huì)由于網(wǎng)絡(luò)波動(dòng)等原因通知不到,或者說(shuō)微信接收到的響應(yīng)不符合API的規(guī)定,微信會(huì)持續(xù)發(fā)起多次通知(請(qǐng)?jiān)诨卣{(diào)通知接口中合理處理,避免重復(fù)通知造成業(yè)務(wù)重復(fù)處理),直到成功為止,通知頻率為15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 總計(jì) 24h4m)。但是微信不保證通知最終一定會(huì)成功。

          異步通知響應(yīng)參數(shù)如下:

          參數(shù)名是否必傳類型描述
          return_codeString返回狀態(tài)碼,SUCCESS/FAIL
          return_msgString返回信息

          如果微信一直通知不成功怎么?還是剛才那個(gè)例子,你明明支付成功了,但是商家卻一直說(shuō)她沒(méi)收到錢,這時(shí)候你怎么辦?肯定是去看一下她的手機(jī)是否真的沒(méi)有收到錢!這里也一樣。

          3.4 支付狀態(tài)查詢

          1. 商戶APP或者前端頁(yè)面收到支付返回時(shí),商戶需要調(diào)用商戶查單接口確認(rèn)訂單狀態(tài),并把查詢結(jié)果展示給用戶。

          2. 商戶后臺(tái)需要準(zhǔn)確、高效地處理微信支付發(fā)送的異步支付結(jié)果通知,并按接口規(guī)范把處理結(jié)果返回給微信支付。

          3. 商戶后臺(tái)未收到異步支付結(jié)果通知時(shí),商戶應(yīng)該主動(dòng)調(diào)用 微信支付查單接口,同步訂單狀態(tài)。

          4. 商戶在T+1日從微信支付側(cè)獲取T日的交易賬單,并與商戶系統(tǒng)中的訂單核對(duì)。如出現(xiàn)訂單在微信支付側(cè)成功,但是在商戶側(cè)未成功的情況,商戶需要給用戶補(bǔ)發(fā)貨或者退款處理。

          四、總結(jié)

          本文主要以公眾號(hào)支付為例,總結(jié)了接入微信支付需要的相關(guān)配置和支付流程。其他支付像APP支付也是開(kāi)發(fā)中比較常見(jiàn)的應(yīng)用場(chǎng)景,APP支付需要在 微信開(kāi)放平臺(tái) 去創(chuàng)建應(yīng)用來(lái)接入微信支付。除此之外,微信支付API在向v3平滑升級(jí),有些接口也還沒(méi)有升級(jí)完成,升級(jí)完的接口相較于v2發(fā)生了一些數(shù)據(jù)格式方面的變化。如果引用第三方開(kāi)發(fā)包進(jìn)行開(kāi)發(fā),需要注意接口對(duì)應(yīng)的版本。

          參考

          微信支付開(kāi)發(fā)文檔

          1. 日處理200億+調(diào)用,單機(jī)QPS高峰達(dá)到4萬(wàn)+,喜馬拉雅自研 API 網(wǎng)關(guān)架構(gòu)實(shí)踐

          2. JDK 8 Stream 數(shù)據(jù)流效率怎么樣?

          3. 又發(fā)現(xiàn)一款牛逼的 API 敏捷開(kāi)發(fā)工具

          4. 發(fā)現(xiàn)一個(gè)很奇怪的現(xiàn)象,MyBaits 的 insert方法一直返回"-2147482646"

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲免费a | 五月色天天| 国产精品无码久久久久久久 | 中文字幕sv在线播放 | 中文字幕无码一区二区三区一本久道不卡 |