springboot整合微信支付sdk過程解析
前言
之前做的幾個微信小程序項目,大部分客戶都有要在微信小程序前端提現(xiàn)的需求。提現(xiàn)功能的實現(xiàn),自然使用企業(yè)付款接口,不過這個功能開通比較麻煩,要滿足3個條件;
之前實現(xiàn)過幾個微信支付的接口,不過都是自己碼的代碼,從網(wǎng)上找找拼湊,覺得看起來不舒服~_~ 于是乎找到了微信官方提供的支付sdk。這里用的是java版本,springboot整合java
下載sdk,引入項目
這里可以直接下載官方提供的sdk,然后將幾個java類拷貝到你的項目,也可以直接引入maven依賴,這里是直接將Java類拷貝到我項目的。
<!-- 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項目,會有以下幾個文件

配置config文件
通過它的readme文件,可以看到幾個demo。但是首先我們需要配置相關(guān)的信息。新建一個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)自動切換
* 實現(xiàn)這個接口
* @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ā)
寫一個提現(xiàn)接口,傳入提現(xiàn)相關(guān)的參數(shù)
/**
*@描述 提現(xiàn)接口
*@參數(shù) [param]
*@創(chuàng)建人 Eangaie
*@創(chuàng)建時間 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配置文件自動注入,接口參數(shù)主要是傳過來openid,跟提現(xiàn)金額。其實這個spbill_create_ip字段也可以固定的。
一開始是因為開發(fā)一直遇到IP不允許訪問的問題,最后發(fā)現(xiàn)。。是商戶號配置鍋,商戶號記得把配置允許IP訪問這個地方關(guān)了!,不然就一直不能訪問接口
提現(xiàn)成功返回,但是程序也會報500,因為processResponseXml這個函數(shù)里面有校驗返回值。但是提現(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)接口完成。。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
學(xué)習(xí)Spring-Session+Redis實現(xiàn)session共享的方法
本篇文章主要介紹了學(xué)習(xí)Spring-Session+Redis實現(xiàn)session共享的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
SpringBoot整合FFmpeg進行視頻處理的詳細教學(xué)
這篇文章主要為大家詳細介紹了SpringBoot如何整合FFmpeg進行視頻處理,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法
這篇文章主要介紹了玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

