准备各种参数密钥
public static String appId = "wx123456789";
public static String merchantId = "123456789";
public static String privateKeyPath = "src\\main\\resources\\wx\\apiclient_key.pem";
public static String apiV3key = "asbaKatajelkYwq9Zsuji5Lc48Glpert";
[首先下载]
CertificateDownloader.jar [点我点我](https://gitcode.net/mirrors/wechatpay-apiv3/CertificateDownloader)
[运行命令]
java -jar E:\CertificateDownloader.jar -k 替换成上面的apiV3key不需要双引号 -m 替换成上面的merchantId -f 替换成上面的privateKeyPath -s 替换成下面的privateKeyPath -o 替换成你想保存证书的目录
[例子]
java -jar E:\CertificateDownloader.jar -k asbaKatajelkYwq9Zsuji5Lc48Glpert -m 123456789 -f E:\apiclient_key.pem -s 2123123123C827366B4FFC780454A0CA598C9 -o E:\data
运行上面的命令后得到的证书位置
public static String wechatpayPath = "src\\main\\resources\\wx\\wechatpay_123.pem";
public static String merchantSerialNumber = "2123123123C827366B4FFC780454A0CA598C9";
微信初始化加载
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKey(getStrKey())
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3key)
.build();
public String getStrKey() throws IOException {
ClassPathResource resource = new ClassPathResource("/wx/apiclient_key.pem");
return StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
}
App下单
public PrepayWithRequestPaymentResponse prepayWithRequestPayment(WxPlaceOrderDTO dto) {
com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest request = new PrepayRequest();
request.setSpAppid(appId);
request.setSpMchid(dto.getSpMchId());
request.setSubMchid(dto.getSubMchId());
request.setDescription(dto.getDescription());
request.setOutTradeNo(dto.getOutTradeNo());
request.setAttach(dto.getAttach());
request.setNotifyUrl("https://xxxxx/notify");
com.wechat.pay.java.service.partnerpayments.app.model.Amount amount = new Amount();
amount.setTotal(1);
amount.setCurrency("CNY");
request.setAmount(amount);
return service.prepayWithRequestPayment(request, appId);
}
@PostMapping(value = "/notify")
public String wxPayNotify(HttpServletRequest request) throws IOException {
String serialNo = request.getHeader("Wechatpay-Serial");
String timestamp = request.getHeader("Wechatpay-Timestamp");
String nonce = request.getHeader("Wechatpay-Nonce");
String signature = request.getHeader("Wechatpay-Signature");
String body = readData(request);
com.wechat.pay.java.core.notification.RequestParam requestParam = new com.wechat.pay.java.core.notification.RequestParam.Builder()
.serialNumber(serialNo)
.nonce(nonce)
.signature(signature)
.timestamp(timestamp)
.body(body)
.build();
NotificationConfig configs = (NotificationConfig) config;
NotificationParser parser = new NotificationParser(configs);
Transaction transaction = parser.parse(requestParam, Transaction.class);
Long id = Long.valueOf(transaction.getAttach());
if (!transaction.getTradeState().name().equals("SUCCESS")){
}
return "true"
}
public static String readData(HttpServletRequest request) {
BufferedReader br = null;
try {
StringBuilder result = new StringBuilder();
br = request.getReader();
for (String line; (line = br.readLine()) != null; ) {
if (result.length() > 0) {
result.append("\n");
}
result.append(line);
}
return result.toString();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}