微信支付、支付寶接入指引,看完立刻就可以上手!
本文轉(zhuǎn)載自微信公眾號「Java極客技術(shù)」,作者鴨血粉絲 。轉(zhuǎn)載本文請聯(lián)系Java極客技術(shù)公眾號。
Hello,大家好,我是阿粉~
前段時間阿粉在公司接手了一個支付項目,這個項目接入了微信、支付寶。這個項目開發(fā)下來,阿粉可是完完整整體驗了一下微信、支付寶開發(fā)流程,也踩了一些坑。
最近正好看到有些小伙伴想接入微信、支付寶,但是不知道如何開發(fā),所以阿粉就給大家總結(jié)一下微信支付、支付寶接入開發(fā)流程。
總體流程
明確使用支付方式
首先我們需要明確我們需要使用的支付方式。
因為微信支付、支付寶中存在很多支付方式,不同支付方式對應(yīng)的不同的業(yè)務(wù)場景,開發(fā)對接復(fù)雜度也不太一樣。
以微信支付舉例,其總共提供如下幾種的支付方式。
這幾種支付方式對應(yīng)的不同的業(yè)務(wù)場景,比如說:
- 付款碼支付:商家使用掃碼槍或其他掃碼機具掃描用戶出示的付款碼,適合于線下商超收款
- Native支付:商家在系統(tǒng)中按微信支付協(xié)議生成支付二維碼,用戶掃碼拉起微信收銀臺,確認(rèn)并完成付款
- JSAPI 支付:用戶在商家公眾號內(nèi)下單,輸入密碼支付,完成支付,適合于在線購物的場景
- APP 支付:用戶在商家的APP中下單,跳轉(zhuǎn)到微信中完成支付,支付完后跳回到商家APP內(nèi),展示支付結(jié)果
- H5 支付:用戶在手機瀏覽器中下單,然后跳轉(zhuǎn)到微信中完成支付
- 小程序支付:用戶打開商家小程序下單,輸入支付密碼并完成支付后,返回商家小程序
如果你還是有點迷茫,不知道對接哪種支付方式,可以看下微信支付的接入指引,網(wǎng)址如下:
https://pay.weixin.qq.com/static/applyment_guide/applyment_index.shtml
這個網(wǎng)站里面列舉上面這幾種支付方式業(yè)務(wù)場景,你可以從中選擇適合自己的業(yè)務(wù)場景。
接入角色
第二我們需要明確以哪種身份接入。
不同的身份將會使用不同的開發(fā)文檔,微信支付、支付寶支持以下三類身份接入:
- 普通商戶、企業(yè)
- 服務(wù)商
- 銀行服務(wù)商
服務(wù)商是指有技術(shù)開發(fā)能力的第三方開發(fā)者為普通商戶提供微信支付技術(shù)開發(fā)、營銷方案,即服務(wù)商可在微信支付開放的服務(wù)商高級接口的基礎(chǔ)上,為商戶完成支付申請、技術(shù)開發(fā)、機具調(diào)試、活動營銷等全生態(tài)鏈服務(wù)。
而銀行服務(wù)商適合于銀行類單位,其將會使用銀聯(lián)、網(wǎng)聯(lián)提供的接口接入。
服務(wù)商與銀行服務(wù)商可以說比較特殊了,一般企業(yè)都是以普通商戶接入微信支付、支付寶。
所以本文后續(xù)流程將會以普通商戶接入展開。
接入流程
當(dāng)我們確定完上面兩個基礎(chǔ)條件后,我們就可以開始微信支付的接入流程,這個過程分為以下三步:
- 進件
- 參數(shù)配置
- 對接開發(fā)
對于我們技術(shù)同學(xué)來講,其實我們只需要參與后面兩步,所以我們重點介紹后面兩步。第一步進件一般由市場或者財務(wù)等部門同學(xué)負責(zé),不過在一些小公司,技術(shù)同學(xué)可能需要包辦整個流程,所以這里也簡單介紹一下。
進件
有的同學(xué)可能我當(dāng)初一樣,剛看到『進件』這個詞,是不是很陌生,不理解這個詞是什么意思。
其實進件的意思,就是將相關(guān)所需要的材料提交給微信支付、支付寶。
一般需要的材料如下:
- 營業(yè)執(zhí)照
- 對公賬戶
- 法定代表人/個體戶經(jīng)營者證件
- 特殊資質(zhì)證明材料
- 等等
首先我們需要明確自己公司主體類型,以微信支付為例,其僅面向企業(yè)、個體工商戶、政府及事業(yè)單位、民辦非企業(yè)、社會團體、基金會類型商戶開放。
不同的主體的類型所需要的材料文件如下:
目前微信支付、支付寶都支持自主進件,在相應(yīng)的網(wǎng)站上就提交相關(guān)資料即可。
當(dāng)我們提交完材料,我們還需要進行賬戶驗證,微信支付、支付寶將會往上面填的對公賬戶打入一筆小額金額,當(dāng)我們收到以后,我們需要將在網(wǎng)站填入這個金額。
這一步的目的,主要是為了校驗對公賬戶的真實性。完成這一步之后,進件的流程的基本完成,我們進入?yún)?shù)配置這一步。
參數(shù)配置
微信支付與支付寶參數(shù)配置又比較大區(qū)別,所以這里我們這里分別介紹一下。
微信支付
當(dāng)我們完成上面的商戶進件配置之后,其實我們只完成第一步。
由于商戶的微信支付交易發(fā)起依賴于公眾號、小程序、移動應(yīng)用(即 APPID )與微信支付商戶號(MCHID)的綁定關(guān)系, 所以,還需在簽約后登錄對應(yīng) APPID 平臺完成綁定關(guān)系確認(rèn)。
如果此時還沒有申請,我們還需要在相應(yīng)的微信平臺進行申請。這里不得不吐槽一下微信,沒有一個統(tǒng)一申請 appid 的地方,公眾號,移動應(yīng)用申請在不同的網(wǎng)站。
這里總結(jié)一下公眾號,小程序等的注冊地址:
- 公眾號/小程序:微信公眾平臺(https://mp.weixin.qq.com/)
- APP/PC 網(wǎng)站:微信開放平臺(https://open.weixin.qq.com/)
- 企業(yè)微信:企業(yè)微信管理平臺(https://work.weixin.qq.com)
當(dāng)注冊完公眾號等賬號之后,我們還需要將微信支付商戶號與申請公眾號、小程序等進行綁定,這里放一張官方的流程指引圖,詳情可以點擊:https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html
來源:https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html
當(dāng)完成上面的流程之后,接下去我們需要設(shè)置 API密鑰,然后下載 API 證書。
API 證書獲取流程參考:https://kf.qq.com/faq/161222NneAJf161222U7fARv.html
API 密鑰設(shè)置流程參考:https://kf.qq.com/faq/180830UVRZR7180830Ij6ZZz.html
當(dāng)完成上面這些步驟之后,我們將會有以下商戶參數(shù):
- APPID
- 微信支付商戶號,mch_id
- API密鑰
- API 證書
- Appsecret
上面這些參數(shù)我們需要妥善保管,切勿外傳,以免造成資金損失。
支付寶
支付寶設(shè)置可能沒有微信支付那么復(fù)雜,首先我們需要在支付寶開放平臺(open.alipay.com),在開發(fā)者中心欄目下創(chuàng)建應(yīng)用。
第二步我們需要在創(chuàng)建的應(yīng)用中添加相應(yīng)的支付功能,比如說需要使用掃碼支付,那么需要使用當(dāng)面付。
第三步,我們需要配置當(dāng)前應(yīng)用的公私鑰信息。
首先我們需要生成一對 RSA2 公私鑰,這里我們可以使用支付寶的官方工具生成。
工具下載地址:https://opendocs.alipay.com/open/291/105971
生成之后,我們需要在支付寶網(wǎng)站上配置支付公鑰。
這個需要注意了,一旦公鑰配置完成,將不支持查看,只支持重新修改公鑰,這樣我們需要重新生成一對公私鑰。
當(dāng)應(yīng)用公鑰設(shè)置完成之后,我們就也可以查看支付寶的公鑰,這個公鑰信息,我們也需要保管起來。
此時我們手上就有支付寶的參數(shù)信息,作用如下:
- appid
- 應(yīng)用私鑰:適用于接口參數(shù)加密
- 支付寶公鑰:適用于支付寶返回參數(shù)驗簽
上面我們需要注意應(yīng)用公鑰與支付寶公鑰區(qū)別,應(yīng)用公鑰是需要給支付寶的,一旦在支付寶網(wǎng)站上設(shè)置完成,我們就用不到這個應(yīng)用公鑰。
完成這一步之后,我們基本上已經(jīng)完成開發(fā)的參數(shù)配置,接下去就是開發(fā)。
基本開發(fā)完成之后,我們需要在支付寶處上架這個應(yīng)用,上架時根據(jù)應(yīng)用選擇的支付能力,需要進行相應(yīng)的簽約。
其實這個簽約就是我們上面講到進件,需要填寫商戶各種資料。
對接開發(fā)
上面講了這么多,終于聊到開發(fā)這一步。其實,對接開發(fā)真的不難,我們只要根據(jù)相應(yīng)的文檔組裝接口參數(shù),然后發(fā)送給微信支付寶即可。
微信支付文檔地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
支付寶文檔地址:https://opendocs.alipay.com/open/194/105203
這里我們就不聊具體的源碼實現(xiàn)方式,大家參考相應(yīng)的接口文檔,這里主要分享一些經(jīng)驗,防止大家踩坑。
同步接口與異步接口
同步接口:在我們調(diào)用 API 接口之后就可以同步返回具體扣款結(jié)果。
異步接口:我們調(diào)用 API 接口成功,這一步只是返回一些參數(shù),我們需要在前臺頁面拼接這些參數(shù),然后喚醒微信支付、支付寶,最后完成支付。支付結(jié)果將會通過異步通知給應(yīng)用程序。
舉個例子,微信支付、支付寶 API 接口中,僅付款碼支付為同步接口,這里引用一下官方的時序圖:
付款碼支付免密流程時序圖
而剩余的其他接口都為異步接口,這里引用一下微信支付 Native 時序圖:
原生支付接口模式一時序圖
對于異步接口來說,我們除了需要開發(fā) API 接口發(fā)送程序,我們還需要開發(fā)一個接收微信支付、支付寶的接受程序。
安全性
微信支付與支付寶涉及的所有 API 接口都需要進行加簽,獲取簽名值,這一步目的主要是為了安全性。
微信支付加簽方式如圖所示:
在這一步我們就需要使用到上一個流程提到的微信支付的 AP I密鑰。
除此之外,微信支付的退款接口還有點特殊,我們還需要使用其下發(fā)給我們的 API 證書。
另外查看微信支付的文檔的時候,阿粉還發(fā)現(xiàn),微信支付的接口還有一個 V3 版。這個版本參數(shù)格式支持 JSON,新老接口的區(qū)別如下:
V2 VS V3
阿粉上面提到都是基于 V2 版本,如果你在搜索引擎搜索,可以看到現(xiàn)在市面上大部分還是在使用 V2 版本的接口。
如果大家對接 V3 版本的接口,那一定要記得查看 V3 版本的API 接口,地址如下:
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/Overview.shtml
另外對于異步通知的內(nèi)容,我們一定要進行驗簽,驗簽的目的就是在于防止數(shù)據(jù)泄漏導(dǎo)致出現(xiàn)“假通知”,造成資金損失。
這里需要注意了,異步通知的可能會發(fā)送多次,我們的程序一定要注意冪等控制。
建議可以采用如下的流程:
當(dāng)收到通知進行處理時,首先檢查對應(yīng)業(yè)務(wù)數(shù)據(jù)的狀態(tài),判斷該通知是否已經(jīng)處理過,如果沒有處理過再進行處理,如果處理過直接返回結(jié)果成功。在對業(yè)務(wù)數(shù)據(jù)進行狀態(tài)檢查和處理之前,要采用數(shù)據(jù)鎖進行并發(fā)控制,以避免函數(shù)重入造成的數(shù)據(jù)混亂。
開源工具
我們在開發(fā)過程中,可以使用一些開源工具,這些工具幫我們封裝加簽、驗簽的步驟,以及網(wǎng)絡(luò)發(fā)送程序,極大減少開發(fā)的復(fù)雜度。
支付寶開源工具主要由支付寶官方提供,使用介紹:
https://opendocs.alipay.com/open/54/103419
其提供 Maven 依賴,如下:
- <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
- <dependency>
- <groupId>com.alipay.sdk</groupId>
- <artifactId>alipay-sdk-java</artifactId>
- <version>4.10.170.ALL</version>
- </dependency>
對于微信來說,目前沒看到官方提供的相關(guān)的工具類,這里推薦一個 Github 擁有超多 Star 的項目-WxJava
項目地址如下:
https://github.com/Wechat-Group/WxJava
這個開源工具,框架初始化設(shè)置 API秘鑰,證書等,后續(xù)請求 API 接口只要填入相關(guān)參數(shù)即可,其他加簽、驗簽內(nèi)部程序?qū)詣油瓿伞?/p>
沙箱環(huán)境
測試過程中,如果正式應(yīng)用還沒有被官方審批,我們可以先使用沙箱環(huán)境進行測試。測試完成之后,我們只要替換相關(guān)參數(shù)就可以了。
這里需要注意了,目前只有支付寶提供沙箱測試環(huán)境,微信支付暫時沒有。
支付寶沙箱的地址如下:
https://openhome.alipay.com/platform/appDaily.htm
同樣的沙箱環(huán)境我們也需要設(shè)置相應(yīng)的應(yīng)用公鑰,以及下載對應(yīng)的支付寶公鑰。
另外沙箱環(huán)境的請求地址與正式環(huán)境不同,請求地址為:
https://openapi.alipaydev.com/gateway.do
同時我們還需要使用沙箱版支付寶 APP才能進行正常測試。
最后
總體來說,阿粉覺得微信支付、支付寶的開發(fā)難度不大,相關(guān)參數(shù)只要安裝接口文檔拼接就可以了。
最大的難度可能在于加簽、驗簽上,這一點新手可能比較容易踩坑。
好了,今天的文章就到此為止了,大家下篇文章見~
幫助文檔
- 商戶號與 APPID 綁定
- 微信接入指引
- 進件
- 商戶申請接入時,如何確認(rèn)綁定關(guān)系?