springboot整合微信支付sdk过程解析

网友投稿 648 2023-07-29

springboot整合微信支付sdk过程解析

springboot整合微信支付sdk过程解析

前言

之前做的几个微信小程序项目,大部分客户都有要在微信小程序前端提现的需求。提现功能的实现,自然使用企业付款接口,不过这个功能开通比较麻烦,要满足3个条件;

之前实现过几个微信支付的接口,不过都是自己码的代码,从网上找找拼凑,觉得看起来不舒服~_~ 于是乎找到了微信官方提供的支付sdk。这里用的是java版本,springboot整合java

-sdk,引入项目

这里可以直接-官方提供的sdk,然后将几个java类拷贝到你的项目,也可以直接引入maven依赖,这里是直接将Java类拷贝到我项目的。

com.github.wxpay

WXPay-SDK-Java

0.0.4

如图,打开sdk项目,会有以下几个文件

配置config文件

通过它的readme文件,可以看到几个demo。但是首先我们需要配置相关的信息。新建一个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";

}

/**

* 获取商户证书内容

* 这里是读取resources根目录下面的证书文件

* @return 商户证书内容

*/

@Override

InputStream getCertStream() {

InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");

return certStream;

}

/**

* 获取WXPayDomain, 用于多域名容灾自动切换

* 实现这个接口

* @return

*/

@Override

public IWXPayDomain getWXPayDomhttp://ain() {

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;

}

}

提现接口开发

写一个提现接口,传入提现相关的参数

/**

*@描述 提现接口

*@参数 [param]

*@创建人 Eangaie

*@创建时间 2019/7/2

*/

@PostMapping("despot")

public Result despot(@RequestBody Map param) throws Exception {

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config,1);

SortedMap sendData;

sendData=getDespData(param);

sendData.put("sign", WXPayUtil.generateSignature(sendData,key http://, WXPayConstants.SignType.MD5));

Map resData=wxpay.despot(sendData,config.getHttpConnectTimeoutMs(),config.getHttpReadTimeoutMs());

return ResultUtil.success(resData);

}

private SortedMap getDespData(Map param) {

SortedMap params = new TreeMap();

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="用户提现";

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配置文件自动注入,接口参数主要是传过来openid,跟提现金额。其实这个spbill_create_ip字段也可以固定的。

一开始是因为开发一直遇到IP不允许访问的问题,最后发现。。是商户号配置锅,商户号记得把配置允许IP访问这个地方关了!,不然就一直不能访问接口

提现成功返回,但是程序也会报500,因为processResponseXml这个函数里面有校验返回值。但是提现这里用不到,可以注释掉代码。

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));

// }

}

至此,提现接口完成。。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot2.0整合Shiro框架实现用户权限管理的示例
下一篇:JPA的多表复杂查询的方法示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~