溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot整合微信支付sdk過程的示例分析

發(fā)布時間:2021-07-08 11:38:16 來源:億速云 閱讀:284 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“springboot整合微信支付sdk過程的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“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項目,會有以下幾個文件

springboot整合微信支付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, 用于多域名容災自動切換
  * 實現(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)接口完成。。

以上是“springboot整合微信支付sdk過程的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI