<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>

          手把手教你接入微信支付

          共 6438字,需瀏覽 13分鐘

           ·

          2021-04-14 13:04

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

          一、微信支付的前提條件

          1.1 公眾號

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

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

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

          1.2 微信商戶平臺

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

          商戶分為普通商戶和服務(wù)商商戶,千萬不要申請錯了。

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

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

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

          申請時直接申請普通商戶就可以了。

          1.3 綁定商戶

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

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

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

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

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

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

          1. 付款碼支付

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

          2. JSAPI支付

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

          3. Native支付

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

          4. APP支付

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

          5. H5支付

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

          6. 小程序支付

          用戶在微信小程序中使用微信支付的場景。

          7. 刷臉支付

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

          在商戶平臺-產(chǎn)品中心-我的產(chǎn)品中申請開通支付產(chǎn)品。

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

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

          2.3 配置商戶密鑰

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

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

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

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

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

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

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

          2.4 配置服務(wù)器

          在公眾號后臺-開發(fā)-基本配置-服務(wù)器配置中啟用并填寫服務(wù)器信息。

          2.5 白名單配置

          在公眾號后臺-開發(fā)-基本配置-公眾號開發(fā)信息中配置開發(fā)者密鑰,同時填寫IP白名單。

          2.6 JS接口安全域名

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

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


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

          三、微信支付流程

          由于微信升級了API接口,在API v3接口中,需要加載申請的API證書,微信已經(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ù)升級,v2接口相對完整)。

          上面的這張圖片來自微信開發(fā)文檔,我們詳細(xì)分析一下支付流程。

          3.1 微信下單接口

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

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

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

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

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

          3.2 支付

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

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

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

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

          JS偽代碼如下:

          function onBridgeReady(){
              WeixinJSBridge.invoke(
                  'getBrandWCPayRequest', {
                      // 公眾號ID,由商戶傳入
                      "appId":"wx2421b1c4370ec43b",
                      // 時間戳,自1970年以來的秒數(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,但并不保證它絕對可靠。
                      } 
                  }); 
          }
          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,但并不保證它絕對可靠。為什么這么說呢,我舉個例子應(yīng)該就明白了。假如你去超市買東西,是不是你說支付成功了你就可以把東西帶走呢?肯定不是,是當(dāng)商家收到錢后才算你支付成功,你才可以把東西帶走。也就是說,這里提示的成功并不能說一定支付成功了,具體是否成功,微信平臺會以異步的方式給你進(jìn)行通知。

          3.3 異步通知

          異步通知是比較重要的一步,在這里你可以根據(jù)通知結(jié)果處理你的業(yè)務(wù)邏輯。但是,可能會由于網(wǎng)絡(luò)波動等原因通知不到,或者說微信接收到的響應(yīng)不符合API的規(guī)定,微信會持續(xù)發(fā)起多次通知(請?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)。但是微信不保證通知最終一定會成功。

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

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

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

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

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

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

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

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

          四、總結(jié)

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

          參考

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


          推薦?? :1049天,100K!簡單復(fù)盤!

          推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅

          我是 Guide哥,擁抱開源,喜歡烹飪。Github 接近 10w 點(diǎn)贊的開源項(xiàng)目 JavaGuide 的作者。未來幾年,希望持續(xù)完善 JavaGuide,爭取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊查看我的2020年工作匯報(bào)!
          原創(chuàng)不易,歡迎點(diǎn)贊分享。咱們下期再會!
          瀏覽 24
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  一道本一区二区三区免费视频 | 日韩无码第三页 | 中国亚州精品历史女人久久 | 中国一级免费黄色片 | 顶级欧美AAAAAA特级欧美AAAAAA |