导包
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.12</version>
</dependency>
申请配置信息
# 微信支付配置
# 商户号
merchantId: xxxxxxxx
# 商户API私钥路径
privateKeyPath: xxxxx\apiclient_key.pem
# 商户证书序列号
merchantSerialNumber: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 商户证书路径
wechatPayCertificatePath: xxxxxx\platform.pem
# APPID
appID: xxxxxxxxxxxx
# 支付成功回调地址
notifyUrl: https://xxxxxxxxxxxxxxxxx
# 小程序需要的配置
apiV3Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
核心支付代码
@Value("${merchantId}")
private String merchantId;
@Value("${privateKeyPath}")
private String privateKeyPath;
@Value("${merchantSerialNumber}")
private String merchantSerialNumber;
@Value("${wechatPayCertificatePath}")
private String wechatPayCertificatePath;
@Value("${appID}")
private String appID;
@Value("${notifyUrl}")
private String notifyUrl;
public String addGroupPurchase(需要的参数) throws Exception {
RSAConfig config =
new RSAConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.wechatPayCertificatesFromPath(wechatPayCertificatePath)
.build();
NativePayService service = new NativePayService.Builder().config(config).build();
PrepayRequest request = new PrepayRequest();
request.setAppid(appID);
request.setMchid(merchantId);
request.setOutTradeNo(商户订单号);
request.setDescription(商品描述);
request.setNotifyUrl(url);
Amount amount = new Amount();
amount.setTotal(金额);
amount.setCurrency("CNY");
request.setAmount(amount);
PrepayResponse prepay = service.prepay(request);
return prepay.getCodeUrl();
}
小程序对接微信支付
配置类大同小异、也可以使用其他配置类
wxPay() {
Config config = new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
JsapiService jsapiService = new JsapiService.Builder().config(config).build();
PrepayRequest request = new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(金额);
amount.setCurrency("CNY");
request.setAppid(appID);
request.setMchid(merchantId);
request.setDescription(商品描述);
request.setOutTradeNo(订单编号/商户订单号);
request.setAmount(amount);
request.setNotifyUrl(回调地址);
Payer payer = new Payer();
payer.setOpenid(openId);
request.setPayer(payer);
PrepayResponse response = jsapiService.prepay(request);
String prepayId = response.getPrepayId();
String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
String nonceStr = NonceUtil.createNonce(32);
String signData = String.format("%s\n%s\n%s\n%s\n", appID, timeStamp, nonceStr, "prepay_id=" + prepayId);
String signature = config.createSigner().sign(signData).getSign();
Map<String, Object> payParams = new HashMap<>();
payParams.put("appId", appID);
payParams.put("timeStamp", timeStamp);
payParams.put("nonceStr", nonceStr);
payParams.put("package", "prepay_id=" + prepayId);
payParams.put("signType", "RSA");
payParams.put("paySign", signature);
return payParams;
}