自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手教你接入微信支付

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

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

一、微信支付的前提條件

1.1 公眾號

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

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

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

1.2 微信商戶平臺

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

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

普通商戶是可以進行交易,但是不能拓展商戶。

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

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

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

1.3 綁定商戶

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

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

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

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

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

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

1. 付款碼支付

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

2. JSAPI支付

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

3. Native支付

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

4. APP支付

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

5. H5支付

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

6. 小程序支付

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

7. 刷臉支付

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

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

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

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

2.3 配置商戶密鑰

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

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

API密鑰需要一個32位的隨機字符串,記得不要隨意更改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)域名。

 

三、微信支付流程

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

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

3.1 微信下單接口

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

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

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)給頁面,由頁面完成支付。

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

JS偽代碼如下: 

  1. function onBridgeReady(){  
  2.     WeixinJSBridge.invoke(  
  3.         'getBrandWCPayRequest', {  
  4.             // 公眾號ID,由商戶傳入  
  5.             "appId":"wx2421b1c4370ec43b",  
  6.             // 時間戳,自1970年以來的秒數(shù)  
  7.             "timeStamp":"1395712654",    
  8.             // 隨機串  
  9.             "nonceStr":"e61463f8efa94090b1f366cccfbbb444",  
  10.             "package":"prepay_id=u802345jgfjsdfgsdg888",   
  11.             // 微信簽名方式  
  12.             "signType":"MD5",  
  13.             // 微信簽名  
  14.             "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89"  
  15.         },  
  16.         function(res){  
  17.             if(res.err_msg == "get_brand_wcpay_request:ok" ){  
  18.                 // 使用以上方式判斷前端返回,微信團隊鄭重提示:  
  19.                 // res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。  
  20.             }   
  21.         });   
  22.  
  23. if (typeof WeixinJSBridge == "undefined"){  
  24.     if( document.addEventListener ){  
  25.         document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);  
  26.     }else if (document.attachEvent){  
  27.         document.attachEvent('WeixinJSBridgeReady', onBridgeReady);   
  28.         document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);  
  29.     }  
  30. }else{  
  31.     onBridgeReady();  

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

3.3 異步通知

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

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

 

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

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

  1. 商戶APP或者前端頁面收到支付返回時,商戶需要調(diào)用商戶查單接口確認訂單狀態(tài),并把查詢結(jié)果展示給用戶。
  2. 商戶后臺需要準確、高效地處理微信支付發(fā)送的異步支付結(jié)果通知,并按接口規(guī)范把處理結(jié)果返回給微信支付。
  3. 商戶后臺未收到異步支付結(jié)果通知時,商戶應(yīng)該主動調(diào)用 微信支付查單接口,同步訂單狀態(tài)。
  4. 商戶在T+1日從微信支付側(cè)獲取T日的交易賬單,并與商戶系統(tǒng)中的訂單核對。如出現(xiàn)訂單在微信支付側(cè)成功,但是在商戶側(cè)未成功的情況,商戶需要給用戶補發(fā)貨或者退款處理。

四、總結(jié)

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

 

責(zé)任編輯:龐桂玉 來源: Hollis
相關(guān)推薦

2023-04-18 07:39:20

2009-12-24 13:52:57

網(wǎng)絡(luò)接入控制解決方案

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2014-11-17 11:13:17

易維

2021-02-26 11:54:38

MyBatis 插件接口

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

2022-07-27 08:16:22

搜索引擎Lucene

2015-10-26 09:24:30

微信公眾號數(shù)據(jù)分析

2023-11-24 16:57:53

2020-04-14 10:20:12

MySQL數(shù)據(jù)庫死鎖

2016-04-27 09:49:16

用戶模型產(chǎn)品總結(jié)

2021-08-04 08:55:02

Socket Java開發(fā)

2020-07-09 08:59:52

if else模板Service
點贊
收藏

51CTO技術(shù)棧公眾號