springboot整合微信支付sdk過程解析
前言
之前做的幾個(gè)微信小程序項(xiàng)目,大部分客戶都有要在微信小程序前端提現(xiàn)的需求。提現(xiàn)功能的實(shí)現(xiàn),自然使用企業(yè)付款接口,不過這個(gè)功能開通比較麻煩,要滿足3個(gè)條件;
之前實(shí)現(xiàn)過幾個(gè)微信支付的接口,不過都是自己碼的代碼,從網(wǎng)上找找拼湊,覺得看起來不舒服~_~ 于是乎找到了微信官方提供的支付sdk。這里用的是java版本,springboot整合java
下載sdk,引入項(xiàng)目
這里可以直接下載官方提供的sdk,然后將幾個(gè)java類拷貝到你的項(xiàng)目,也可以直接引入maven依賴,這里是直接將Java類拷貝到我項(xiàng)目的。
<!-- https://mvnrepository.com/artifact/com.github.wxpay/WXPay-SDK-Java --> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>WXPay-SDK-Java</artifactId> <version>0.0.4</version> </dependency>
如圖,打開sdk項(xiàng)目,會(huì)有以下幾個(gè)文件
配置config文件
通過它的readme文件,可以看到幾個(gè)demo。但是首先我們需要配置相關(guān)的信息。新建一個(gè)java類繼承原先的配置類。
package com.github.wxpay.sdk; import java.io.InputStream; /** * @author Ean * @date 2019/7/2 */ public class MyConfig extends WXPayConfig { /** * 獲取 App ID * * @return App ID */ @Override String getAppID() { return "wxdb70c7c6b******"; } /** * 獲取 Mch ID * * @return Mch ID */ @Override String getMchID() { return "1522050000"; } /** * 獲取 API 密鑰 * * @return API密鑰 */ @Override String getKey() { return "xxxxxxxxxxxxxxxx"; } /** * 獲取商戶證書內(nèi)容 * 這里是讀取resources根目錄下面的證書文件 * @return 商戶證書內(nèi)容 */ @Override InputStream getCertStream() { InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12"); return certStream; } /** * 獲取WXPayDomain, 用于多域名容災(zāi)自動(dòng)切換 * 實(shí)現(xiàn)這個(gè)接口 * @return */ @Override public IWXPayDomain getWXPayDomain() { IWXPayDomain iwxPayDomain = new IWXPayDomain() { public void report(String domain, long elapsedTimeMillis, Exception ex) { } public DomainInfo getDomain(WXPayConfig config) { return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true); } }; return iwxPayDomain; } }
提現(xiàn)接口開發(fā)
寫一個(gè)提現(xiàn)接口,傳入提現(xiàn)相關(guān)的參數(shù)
/** *@描述 提現(xiàn)接口 *@參數(shù) [param] *@創(chuàng)建人 Eangaie *@創(chuàng)建時(shí)間 2019/7/2 */ @PostMapping("despot") public Result despot(@RequestBody Map<String,Object> param) throws Exception { MyConfig config = new MyConfig(); WXPay wxpay = new WXPay(config,1); SortedMap<String, String> sendData; sendData=getDespData(param); sendData.put("sign", WXPayUtil.generateSignature(sendData,key , WXPayConstants.SignType.MD5)); Map<String,String> resData=wxpay.despot(sendData,config.getHttpConnectTimeoutMs(),config.getHttpReadTimeoutMs()); return ResultUtil.success(resData); } private SortedMap<String, String> getDespData(Map<String, Object> param) { SortedMap<String, String> params = new TreeMap<String, String>(); String nonce_str=commonUtil.gen32RandomString(); String partner_trade_no=commonUtil.createNo(); String openid= String.valueOf(param.get("openid")); String check_name="NO_CHECK"; String amount= String.valueOf(param.get("amount")); String desc="用戶提現(xiàn)"; String spbill_create_ip= String.valueOf(param.get("spbill_create_ip")); params.put("mch_appid",mch_appid); params.put("mchid",mchid); params.put("nonce_str",nonce_str); params.put("partner_trade_no",partner_trade_no); params.put("openid",openid); params.put("check_name",check_name); params.put("amount", amount); params.put("desc", desc); params.put("spbill_create_ip", spbill_create_ip); return params; }
這里的一些變量,比如商戶id,appid這些直接通過spring掃描application配置文件自動(dòng)注入,接口參數(shù)主要是傳過來openid,跟提現(xiàn)金額。其實(shí)這個(gè)spbill_create_ip字段也可以固定的。
一開始是因?yàn)殚_發(fā)一直遇到IP不允許訪問的問題,最后發(fā)現(xiàn)。。是商戶號(hào)配置鍋,商戶號(hào)記得把配置允許IP訪問這個(gè)地方關(guān)了!,不然就一直不能訪問接口
提現(xiàn)成功返回,但是程序也會(huì)報(bào)500,因?yàn)閜rocessResponseXml這個(gè)函數(shù)里面有校驗(yàn)返回值。但是提現(xiàn)這里用不到,可以注釋掉代碼。
else if (return_code.equals(WXPayConstants.SUCCESS)) { return respData; // if (this.isResponseSignatureValid(respData)) { // return respData; // } // else { // throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr)); // } }
至此,提現(xiàn)接口完成。。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot實(shí)現(xiàn)微信支付接口調(diào)用及回調(diào)函數(shù)(商戶參數(shù)獲取)
- java?Springboot對(duì)接開發(fā)微信支付詳細(xì)流程
- SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn)
- Springboot整合微信支付(訂單過期取消及商戶主動(dòng)查單)
- UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能
- SpringBoot實(shí)現(xiàn)整合微信支付方法詳解
- springboot對(duì)接微信支付的完整流程(附前后端代碼)
- 一篇文章帶你入門Springboot整合微信登錄與微信支付(附源碼)
- SpringBoot+MyBatis集成微信支付實(shí)現(xiàn)示例
相關(guān)文章
Java日期工具類操作字符串Date和LocalDate互轉(zhuǎn)
這篇文章主要介紹了Java日期工具類操作字符串Date和LocalDate互轉(zhuǎn),文章首先通過需要先引入坐標(biāo)展開主題的相關(guān)內(nèi)容介紹,需要的朋友可以參一下2022-06-06Java排序之Comparable和Comparator比較器詳解
這篇文章主要介紹了Java排序之Comparable和Comparator比較器詳解,Comparable<T>是內(nèi)部比較器,Comparator<T>是外部比較器,最推薦使用Comparator<T>接口排序,Comparator提供靜態(tài)方法很方便,推薦使用,需要的朋友可以參考下2024-01-01JavaEE開發(fā)之SpringMVC中的自定義消息轉(zhuǎn)換器與文件上傳
本篇文章主要介紹了SpringMVC的相關(guān)知識(shí)。同時(shí)也會(huì)介紹到j(luò)s、css這些靜態(tài)文件的加載配置,以及服務(wù)器推送的兩種實(shí)現(xiàn)方式并且給出了兩者的區(qū)別。下面跟著小編一起來看下吧2017-04-04服務(wù)器實(shí)現(xiàn)Java遠(yuǎn)程訪問Linux服務(wù)器方式(JSch)
文章介紹了如何使用Java遠(yuǎn)程訪問Linux服務(wù)器,主要包括建立SSH連接、使用JSch庫執(zhí)行命令、解析返回值以及關(guān)閉連接的步驟2024-11-11Mybatis-Plus使用ID_WORKER生成主鍵id重復(fù)的解決方法
本文主要介紹了Mybatis-Plus使用ID_WORKER生成主鍵id重復(fù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07SpringBoot實(shí)現(xiàn)發(fā)送郵件、發(fā)送微信公眾號(hào)推送功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)發(fā)送郵件、發(fā)送微信公眾號(hào)推送功能,這里對(duì)成員變量JavaMailSender使用了@Resource注解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03