java开发微信支付接口_JAVA微信支付接口开发——支付
微信支付接口開發——支付
這幾天在做支付服務,系統接入了支付寶、微信、銀聯三方支付接口。個人感覺支付寶的接口開發較為簡單,并且易于測試。
關于數據傳輸,微信是用xml,所以需要對xml進行解析。
1、微信支付的幾種接口
付款碼支付、JSAPI支付、Native支付、APP支付、H5支付、小程序支付。幾種支付方式都是大同小異。
2、支付流程
基于APP支付來說,微信支付的大體流程:
1、APP客戶端根據用戶支付請求,將訂單信息(訂單號,金額等)傳至后臺服務器
2、后臺服務器根據訂單信息,拼裝微信統一下單接口需要的請求參數。其中比較重要的參數為appid、mch_id、nonce_str、sign、out_trade_no、total_fee、notify_url。
這里參數拼裝需要根據微信提供的簽名算法
假設請求參數為:
"appid":"wxd930ea5d5a258f4f"
"mch_id":"10000100"
"body":"test"
"nonce_str":"ibuaiVcKdpRxkhJA"
需要將以上參數按照規則先拼裝成String
key值按照ASCII從小到大排序(A->Z),key=value形式并用&連接
String a = "appid=wxd930ea5d5a258f4f&mch_id=10000100&body=test&nonce_str=ibuaiVcKdpRxkhJA"
拼接API密鑰 key 是商戶平臺設置的密鑰key
signStr = a + "&key=192006250b4c09247ec02edce69f6a2d"
MD5簽名(轉大寫) 注:微信默認為MD5簽名,也支持HMAC-SHA256簽名方式
sign=MD5(signStr).toUpperCase()
//最終得到sign = "9A0A8659F005D6984697E2CA0A9CF3B7"
然后sign繼續按照規則(A->Z)拼裝進String中。
java中可以用map完成排序
Map paramsMap = new TreeMap(String::compareTo);
paramsMap.put("appid", APP_APP_ID);
......
//完成簽名得到sign
paramsMap.put("sign",sign);
最后需要將參數轉化成xml格式的string進行接口請求
![CDATA[wxd930ea5d5a258f4f]]
![CDATA[10000100]]
![CDATA[1000]]
![CDATA[ibuaiVcKdpRxkhJA]]
![CDATA[9A0A8659F005D6984697E2CA0A9CF3B7]]
3、微信支付統一下單的接口地址為:https://api.mch.weixin.qq.com/pay/unifiedorder
java中可以利用httpclient進行post調用。參數即之前拼接完成的帶sign簽名參數。
得到微信支付接口的返回值也同樣是xml格式的數據,需要我們將其轉成便于操作的map型數據。
返回的數據包含了return_code、return_msg。
return_code只有SUCCESS和FAIL,這是通信成功與否的標識,非業務標識。
只有return_code是SUCCESS時,才會有其他數據返回包括result_code,sign等。
若result_code業務標識也同樣為SUCCESS時候才說明微信方預付單生成成功。
這時會返回我們支付業務需要的prepay_id預支付會話id。
注意: 這里需要我們進行sign簽名驗證,以保證數據安全性
4、將通過驗簽的prepay_id等信息返回給APP客戶端。此時APP端可以調起支付接口,
調起了微信支付窗口,讓用戶完成支付操作。
然后微信端會根據之前設置的notify_url異步通知地址,進行調用。通知服務端支付情況。
3、總結
微信支付接口開發還涉及到訂單的相關業務(查詢,關閉),以及退款等相關業務。
微信支付主要需要先了解其業務流程,然后就是調用微信支付的接口,其中就是參數的拼裝與驗簽。這部分可以抽取成一個工具類,比如mapToXml(),xmlToMap(),md5()等等。最后根據接口文檔中返回的數據判斷進行業務操作。
最后吐槽一下,微信測試號沒有提供支付測試環境,需要真實的服務號。
總結
以上是生活随笔為你收集整理的java开发微信支付接口_JAVA微信支付接口开发——支付的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOStextField/textVie
- 下一篇: C#基础(201)--常量枚举