箪瓢轩,意境盎然,清雅自然,觅天下知音
目录
3.根据具体接口生成对应的请求对象,设置好参数后使用已构建的服务对象发出请求
前言
看了几篇介绍对接微信支付的博客,不是内容比较老就是存在各种问题,本文介绍了在环境中如何快速对接微信支付
主要内容
使用微信支付官方为v3版本推荐的SDK,具体介绍见微信支付官方文档:
SDK,工具 | 微信支付商户平台文档中心 (qq.com)https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
1.添加MAVEN依赖到项目中
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.7</version>
</dependency>
2.编写用于完成请求的微信支付工具类
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.model.Amount;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
public class WePayUtils {
//小程序ID
private static String appid="";
/** 商户号 */
private static String merchantId = "";
/** 商户API私钥路径 */
private static String privateKeyPath = "";
/** 商户证书序列号 */
private static String merchantSerialNumber = "";
/** 商户APIV3密钥 */
private static String apiV3key = "";
private static Config config;
private static JsapiService jsapiService;
static {
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
config =new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3key)
.build();
// 根据支付类型的不同构建service
jsapiService=new JsapiService.Builder().config(config).build();
}
public static String getPrepayId(String openid,String orderNo){
//根据不同的业务构建不同的request对象,并使用所构建的service完成业务接收响应
PrepayRequest prepayRequest=new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(1);
Payer payer=new Payer();
payer.setOpenid(openid);
prepayRequest.setPayer(payer);
prepayRequest.setAmount(amount);
prepayRequest.setAppid(appid);
prepayRequest.setMchid(merchantId);
prepayRequest.setDescription("订单描述");
prepayRequest.setNotifyUrl("//回调地址");
prepayRequest.setOutTradeNo(orderNo);
PrepayResponse prepayResponse=jsapiService.prepay(prepayRequest);
return prepayResponse.getPrepayId();
}
//补充调用其他官方接口的方法
}
此处参考了官方示例,以小程序支付为例,完成以上部分代码后即可调用微信官方的API完成自己的业务。
其他支付方式的步骤
小程序支付使用的是com.wechat.pay.java.service.payments.jsapi包,其他业务参照文档选择包,
1.初始化微信支付相关的配置
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
Config config =new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3key)
.build();
此处微信支付的SDK会根据所提供的信息进行初始化,为后续构建service做准备。
注意:此处全局最好只执行一次
2.根据自己支付类型的不同构建官方提供的支付服务对象
// 根据支付类型的不同构建service
JsapiService jsapiService=new JsapiService.Builder().config(config).build();
根据步骤1中的配置,按自己的支付方式生成服务对象,小程序支付使用JsapiService
3.根据具体接口生成对应的请求对象,设置好参数后使用已构建的服务对象发出请求
//根据不同的业务构建不同的request对象,并使用所构建的service完成业务接收响应
PrepayRequest prepayRequest=new PrepayRequest();
//......在此处设置请求参数
//使用service调用相关的接口发出请求获取响应
PrepayResponse prepayResponse=jsapiService.prepay(prepayRequest);
总结
本文基本说明了如何在Springcloud中使用官方的SDK实现微信支付。
文章内容是个人开发经验,仅供参考,如有问题敬请您的指正
End 箪瓢轩