一、微信官方文檔微信支付開發流程(公眾號支付)
首先我們到微信支付的官方文檔的開發步驟部分查看一下需要的設置。
[圖片上傳失敗...(image-5eb825-1531014079742)]
因為微信支付需要較高的權限,只有認證了得服務號才有使用微信支付接口的權限,我們個人很難申請到,所以需要向其他朋友借用賬號。
來到文檔的業務流程部分,查看微信支付的流程(我覺得這個還是需要十分仔細的了解和查看的,這有助于你理解微信開發的流程)。
然后,訪問微信支付接口是要傳遞的參數很多,見統一下單
[圖片上傳失敗...(image-df7051-1531014079742)]
通過查看上面的這些微信支付的官方文檔之后,我相信你對這些應該有了一定的了解了,但是還是覺得微信支付的開發十分的麻煩,所以我們接下來使用第三方的sdk來開發。
二、微信支付第三方sdk開發(公眾號支付)
這個是公眾號支付,我們使用best-pay-sdk,這個sdk使用payrequest和payresponse對請求接口和相應結果做了大量的封裝,主要需要動態傳入的參數是openid(用戶唯一標識)和orderid。接下來我們看看如何開發。
1、配置
1
2
3
4
5
6
7
8
9
10
|
//微信公眾賬號支付配置 wxpayh5config wxpayh5config = new wxpayh5config(); wxpayh5config.setappid( "xxxxx" ); wxpayh5config.setappsecret( "xxxxxxxx" ); wxpayh5config.setmchid( "xxxxxx" ); wxpayh5config.setmchkey( "xxxxxxx" ); wxpayh5config.setnotifyurl( "http://xxxxx" ); //支付類, 所有方法都在這個類里 bestpayserviceimpl bestpayservice = new bestpayserviceimpl(); bestpayservice.setwxpayh5config(wxpayh5config); |
2、發起支付
1
2
3
4
5
6
7
|
payrequest payrequest = new payrequest(); payrequest.setpaytypeenum(bestpaytypeenum.wxpay_h5); payrequest.setorderid( "123456" ); payrequest.setordername( "微信公眾賬號支付訂單" ); payrequest.setorderamount( 0.01 ); payrequest.setopenid( "openid_xxxxxx" ); bestpayservice.pay(payrequest); |
3、異步回調
bestpayservice.asyncnotify();
這就是這個sdk所說的10行代碼解決微信支付。
支付完成后,微信會返回給把支付結果以一段支付xml的數據返回給我們,我們需要將這段數據傳遞給異步通知url(notify_url),來完成支付結果的驗證(驗證簽名,驗證支付狀態),這兩步sdk都為我們做好了,只需這樣調用bestpayservice.asyncnotify(notifydata);,完成驗證后,我們需要返回給微信這樣一段數據:
1
2
3
4
|
<xml> <return_code><![cdata[success]]></return_code> <return_msg><![cdata[ok]]></return_msg> </xml> |
告訴微信已完成驗證,不要再給我們發送異步通知的請求。
是不是還是不太清楚如何集成到項目?沒關系,這個還有示例demo,可以更加明了的清楚。
三、demo運行
demo網址為:https://github.com/pay-group/best-pay-demo
我們最主要的controller放在這里:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
@controller @slf4j public class paycontroller { @autowired private bestpayserviceimpl bestpayservice; /** * 發起支付 */ @getmapping (value = "/pay" ) public modelandview pay( @requestparam ( "openid" ) string openid, map<string, object> map) { payrequest request = new payrequest(); random random = new random(); //支付請求參數 request.setpaytypeenum(bestpaytypeenum.wxpay_h5); request.setorderid(string.valueof(random.nextint( 1000000000 ))); request.setorderamount( 0.01 ); request.setordername( "最好的支付sdk" ); request.setopenid(openid); log.info( "【發起支付】request={}" , jsonutil.tojson(request)); payresponse payresponse = bestpayservice.pay(request); log.info( "【發起支付】response={}" , jsonutil.tojson(payresponse)); map.put( "payresponse" , payresponse); return new modelandview( "pay/create" , map); } /** * 異步回調 */ @postmapping (value = "/notify" ) public modelandview notify( @requestbody string notifydata) throws exception { log.info( "【異步回調】request={}" , notifydata); payresponse response = bestpayservice.asyncnotify(notifydata); log.info( "【異步回調】response={}" , jsonutil.tojson(response)); return new modelandview( "pay/success" ); } } |
這個可以自己去下載就可以,下面看一下一下如何運行
項目說明
需要在jdk版本>1.8上運行
本項目采用springboot1.5.1開發
項目結構
1
2
3
4
5
6
7
|
src/main/java/com/github/lly835 ├── paydemoapplication.java ├── servletinitializer.java ├── config │ └── payconfig.java //支付密鑰配置類 └── controller └── paycontroller.java //支付調用 |
運行示例
運行前需要先配置好密鑰, 見payconfig.java
運行命令
1
2
3
4
|
git clone https: //github.com/pay-group/best-pay-demo cd best-pay-demo mvn clean package java -jar target/*.war |
瀏覽器訪問 http://127.0.0.1:8080/pay
總結
以上所述是小編給大家介紹的java版微信公眾號支付開發全過程,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
原文鏈接:https://www.cnblogs.com/SIHAIloveYAN/archive/2018/07/08/9279261.html