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對(duì)接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))
- java?Springboot對(duì)接開發(fā)微信支付詳細(xì)流程
- SpringBoot集成支付寶沙箱支付(支付、退款)
- springboot調(diào)用支付寶第三方接口(沙箱環(huán)境)
- SpringBoot整合支付寶APP支付
- UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能
- springboot 集成支付寶支付的示例代碼
- SpringBoot微信掃碼支付的實(shí)現(xiàn)示例
- SpringBoot?支付渠道實(shí)現(xiàn)統(tǒng)一的支付服務(wù)示例
相關(guān)文章
學(xué)習(xí)Spring-Session+Redis實(shí)現(xiàn)session共享的方法
本篇文章主要介紹了學(xué)習(xí)Spring-Session+Redis實(shí)現(xiàn)session共享的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Java如何使用SSLContext請(qǐng)求https鏈接
這篇文章主要介紹了Java如何使用SSLContext請(qǐng)求https鏈接問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringBoot整合FFmpeg進(jìn)行視頻處理的詳細(xì)教學(xué)
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合FFmpeg進(jìn)行視頻處理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法
這篇文章主要介紹了玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java中時(shí)間戳和時(shí)間的轉(zhuǎn)換方法代碼
這篇文章主要介紹了Java中時(shí)間戳和時(shí)間的轉(zhuǎn)換的相關(guān)資料,Java8中時(shí)間戳與日期時(shí)間對(duì)象之間的轉(zhuǎn)換是編程中常見的操作,通過時(shí)間字符串獲取時(shí)間對(duì)象也是其中的一種方法,需要的朋友可以參考下2025-03-03

