Java实现微信native支付
1、介绍
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。
详细介绍以及实现流程可参考官方文档:微信native支付官方指引文档,本文主要为编码者讲解具体实现细节。
2、业务流程
根据业务流程图可以得知,编码主要有两部分:
1. 调用统一下单API,将返回的预支付交易链接(code_url)生成二维码图片,供用户扫描;
2. 调用查询订单API,获取订单的支付状态;
3、实现逻辑
先说第一部分:调用统一下单API,将返回的预支付交易链接(code_url)生成二维码图片,供用户扫描
1、导入依赖
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.4.9</version>
</dependency>
2、调用统一下单API
public class NativePayCreateOrder {
// 一些参数,公司提供的,通常定义在项目的配置文件中,以下皆是模拟数据
private appId = "wx8790234sau98232ehb2"; // 应用号
private String mchId = "1571814339"; // 商户号
private String privateKey = ""; // 私钥字符串,此处省略
private String mchSerialNo = "25FS78SGSGFGG7879SGS987GS675AT6"; // 商户证书序列号
private String apiV3Key = "CZBK12Y675AHIGA97987987957AD"; // V3密钥
// 定义httpClient对象
private CloseableHttpClient httpClient;
@Before
public void setup() throws IOException {
// 加载商户私钥(privateKey:私钥字符串)
PrivateKey merchantPrivateKey = PemUtil
.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
// 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));
// 初始化httpClient
httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(mchId, mchSerialNo, merchantPrivateKey)
.withValidator(new WechatPay2Validator(verifier)).build();
}
@After
public void after() throws IOException {
httpClient.close();
}
上述代码是初始化httpClient对象(就是将商户ID、商户序列号、商户私钥、
平台证书设置到httpClient对象中),
httpClient对象是用来发送请求的,向微信支付系统发送下单请求。
public void CreateOrder() throws Exception{
// 定义Post类型的http请求(参数是请求的地址,固定不变的,因为请求的是微信支付系统的地址)
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/