From 59099ec96f7a2da11df4b0b1593092b0aff38e90 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 23 十月 2025 13:45:52 +0800
Subject: [PATCH] 修改bug
---
ruoyi-system/src/main/java/com/ruoyi/system/wxPay/utils/WxV3Pay.java | 108 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 66 insertions(+), 42 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/utils/WxV3Pay.java b/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/utils/WxV3Pay.java
index ff256ae..2ba770d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/utils/WxV3Pay.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/utils/WxV3Pay.java
@@ -1,29 +1,21 @@
package com.ruoyi.system.wxPay.utils;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.system.utils.wx.tools.WxUtils;
import com.ruoyi.system.wxPay.model.WeixinPayProperties;
import com.ruoyi.system.wxPay.model.WxCloseOrderModel;
-import com.ruoyi.system.wxPay.model.WxPaymentInfoModel;
import com.ruoyi.system.wxPay.model.WxPaymentRefundModel;
import com.ruoyi.system.wxPay.resp.NotifyV3PayDecodeRespBody;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
import com.wechat.pay.contrib.apache.httpclient.auth.Verifier;
-import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
-import com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import javax.servlet.http.HttpServletRequest;
-import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.util.Map;
@@ -62,13 +54,6 @@
checkWxConfig();
this.privateKey = PemUtil.loadPrivateKey(config.getV3().getPrivateKeyStream());
this.privateKeySigner = new PrivateKeySigner(config.getV3().getMchSerialNo(), privateKey);
- // 获取证书管理器实例
- CertificatesManager certificatesManager = CertificatesManager.getInstance();
- // 向证书管理器增加需要自动更新平台证书的商户信息
- certificatesManager.putMerchant(config.getMchId(), new WechatPay2Credentials(config.getMchId(),
- this.privateKeySigner), config.getV3().getApiKey().getBytes(StandardCharsets.UTF_8));
- // 从证书管理器中获取verifier
- this.verifier = certificatesManager.getVerifier(config.getMchId());
this.validator = new WechatPay2Validator(verifier);
this.builder = WechatPayHttpClientBuilder.create()
.withMerchant(config.getMchId(), config.getV3().getMchSerialNo(), this.privateKey)
@@ -122,37 +107,76 @@
* @author xiaochen
* @date 2022-03-22 12:47
*/
- public Map<String, Object> jsApi(String tradeNo, Integer amount, String openid, String description) {
- WxPaymentInfoModel requestBody = WxPaymentInfoModel.builder()
- .mchid(this.config.getMchId())
- .appid(this.config.getAppId())
- .description(description)
- .out_trade_no(tradeNo)
-// .attach("")
- .amount(WxPaymentInfoModel.Amount.builder().total(amount).build())
- .payer(WxPaymentInfoModel.Payer.builder().openid(openid).build())
- // 分不分账
-// .settle_info(WxPaymentInfoModel.SettleInfo.builder().profit_sharing(true).build())
- .build();
- // 封装基础数据
- String reqBody = buildBaseParam(requestBody
- , this.config.getV3().getNotifyPayUrl());
- //请求URL
- HttpEntityEnclosingRequestBase httpPost = requestPost(
- "/v3/pay/transactions/jsapi"
- , this.config.getHttpReadTimeoutMs()
- , this.config.getHttpConnectTimeoutMs()
- , reqBody);
- String repBody = result(httpClient, httpPost);
- ObjectMapper om = new ObjectMapper();
+ public Map<String, Object> jsApi(String tradeNo, Long amount, String openid, String description,String attach) {
+ JsapiPrepay client = new JsapiPrepay(
+ this.config.getMchId(), // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756
+ this.config.getV3().getMchSerialNo(), // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053
+ this.config.getV3().getPrivateKeyPath(), // 商户API证书私钥文件路径,本地文件路径
+ this.config.getV3().getPublicKeyId(), // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816
+ this.config.getV3().getPublicKeyPath() // 微信支付公钥文件路径,本地文件路径
+ );
+ JsapiPrepay.DirectAPIv3JsapiPrepayRequest request = new JsapiPrepay.DirectAPIv3JsapiPrepayRequest();
+ request.appid = this.config.getAppId();
+ request.mchid = this.config.getMchId();
+ request.description = description;
+ request.outTradeNo = tradeNo;
+// request.timeExpire = "2018-06-08T10:34:56+08:00";
+ request.attach = attach;
+ request.notifyUrl = this.config.getCallBackUrl();
+ request.goodsTag = "WXG";
+ request.supportFapiao = false;
+ request.amount = new JsapiPrepay.CommonAmountInfo();
+ request.amount.total = amount;
+ request.amount.currency = "CNY";
+ request.payer = new JsapiPrepay.JsapiReqPayerInfo();
+ request.payer.openid = openid;
try {
- JsonNode rootNode = om.readTree(repBody);
- String prepayId = rootNode.path("prepay_id").asText();
- return wxTuneUp(this.privateKeySigner, requestBody.getAppid(), prepayId);
- } catch (JsonProcessingException e) {
+ JsapiPrepay.DirectAPIv3JsapiPrepayResponse response = client.run(request);
+ return wxTuneUp(this.privateKeySigner, this.config.getAppId(), response.prepayId);
+ } catch (WXPayUtility.ApiException e) {
throw new RuntimeException("获取支付数据错误!");
}
}
+// /**
+// * jsApi下单
+// *
+// * @param tradeNo 订单号
+// * @param amount 金额 分
+// * @param openid openid
+// * @param description 订单描述
+// * @return java.util.Map<java.lang.String, java.lang.Object>
+// * @author xiaochen
+// * @date 2022-03-22 12:47
+// */
+// public Map<String, Object> jsApi(String tradeNo, Integer amount, String openid, String description) {
+// WxPaymentInfoModel requestBody = WxPaymentInfoModel.builder()
+// .mchid(this.config.getMchId())
+// .appid(this.config.getAppId())
+// .description(description)
+// .out_trade_no(tradeNo)
+//// .attach("")
+// .amount(WxPaymentInfoModel.Amount.builder().total(amount).build())
+// .payer(WxPaymentInfoModel.Payer.builder().openid(openid).build())
+// .build();
+// // 封装基础数据
+// String reqBody = buildBaseParam(requestBody
+// , this.config.getV3().getNotifyPayUrl());
+// //请求URL
+// HttpEntityEnclosingRequestBase httpPost = requestPost(
+// "/v3/pay/transactions/jsapi"
+// , this.config.getHttpReadTimeoutMs()
+// , this.config.getHttpConnectTimeoutMs()
+// , reqBody);
+// String repBody = result(httpClient, httpPost);
+// ObjectMapper om = new ObjectMapper();
+// try {
+// JsonNode rootNode = om.readTree(repBody);
+// String prepayId = rootNode.path("prepay_id").asText();
+// return wxTuneUp(this.privateKeySigner, requestBody.getAppid(), prepayId);
+// } catch (JsonProcessingException e) {
+// throw new RuntimeException("获取支付数据错误!");
+// }
+// }
/**
--
Gitblit v1.7.1