From e6a9e6f750115579c8cc90d7e6d5bf1eebe79b90 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 05 十一月 2024 15:26:24 +0800
Subject: [PATCH] 获取农户数据去掉重复记录,微信支付的传参、返回值、接口、数据库表金额都以元为单位

---
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java |   39 ++++++++++++++++++++-------------------
 1 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java
index 4314bed..af8e887 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wechatpay/PaymentCtrl.java
@@ -6,6 +6,7 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.cert.WxCertUtil;
 import com.dy.pipIrrGlobal.pojoSe.*;
 import com.dy.pipIrrGlobal.voSe.VoClient;
 import com.dy.pipIrrSell.client.ClientSv;
@@ -18,10 +19,7 @@
 import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM;
 import com.dy.pipIrrSell.virtualCard.enums.RefundItemStateENUM;
 import com.dy.pipIrrSell.wallet.enums.RefundStatusENUM;
-import com.dy.pipIrrSell.wechatpay.dto.Code2Session;
-import com.dy.pipIrrSell.wechatpay.dto.DtoOrder;
-import com.dy.pipIrrSell.wechatpay.dto.NotifyResource;
-import com.dy.pipIrrSell.wechatpay.dto.OrderNotify;
+import com.dy.pipIrrSell.wechatpay.dto.*;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -33,6 +31,7 @@
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.ResourceLoader;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,10 +47,7 @@
 import java.security.SignatureException;
 import java.security.spec.InvalidKeySpecException;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -66,13 +62,15 @@
 @RequestMapping(path="payment")
 @RequiredArgsConstructor
 public class PaymentCtrl {
+    private final ResourceLoader resourceLoader;
+
     private final PaymentSv paymentSv;
     private final RestTemplateUtil restTemplateUtil;
     private final PayHelper payHelper;
     private final VirtualCardSv virtualCardSv;
     private final ClientSv clientSv;
 
-    private final String privateCertFileName = PayInfo.privateCertFileName;
+    //private final String privateCertFileName = PayInfo.privateCertFileName;
     private final String appid = PayInfo.appid;
     private final String secret = PayInfo.secret;
     private final String mchid = PayInfo.mchid;
@@ -171,7 +169,8 @@
         String nonceStr = payHelper.generateRandomString();
         Long timestamp = System.currentTimeMillis() / 1000;
 
-        String header = schema + " " + payHelper.getToken(method, httpUrl, "", nonceStr, timestamp, privateCertFileName);
+        byte[] keyPemBs = WxCertUtil.getKey_pemBytes(resourceLoader) ;
+        String header = schema + " " + payHelper.getToken(method, httpUrl, "", nonceStr, timestamp, keyPemBs);
 
         Map<String, String> headers = new HashMap<>();
         headers.put("Authorization", header);
@@ -189,7 +188,7 @@
         // 鏋勯�犻獙绛惧悕涓�
         String signatureStr = payHelper.responseSign(wechatpayTimestamp, wechatpayNonce, job_body.toJSONString());
         // 楠岃瘉绛惧悕
-        Boolean valid = payHelper.responseSignVerify(wechatpaySerial, signatureStr, wechatpaySignature);
+        Boolean valid = payHelper.responseSignVerify(wechatpaySerial, signatureStr, wechatpaySignature, keyPemBs);
 
         return BaseResponseUtils.buildSuccess();
     }
@@ -212,14 +211,14 @@
     @PostMapping(path = "placeOrder")
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> placeOrder(@RequestBody @Valid DtoOrder order, BindingResult bindingResult) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException, InvalidKeyException {
+    public BaseResponse<Boolean> placeOrder(@RequestBody @Valid DtoOrder order, BindingResult bindingResult) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException, InvalidKeyException, Exception {
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
         // 鎺ユ敹鍙傛暟锛氱櫥褰曟�両D銆佽櫄鎷熷崱ID銆佸厖鍊奸噾棰濓紙鍒嗭級
         Long sessionId = order.getSessionId();
         Long virtualId = order.getVcId();
-        Integer rechargeAmount = order.getRechargeAmount();
+        //Integer rechargeAmount = order.getRechargeAmount();
 
         String prepayId = "";
 
@@ -241,7 +240,7 @@
         virtualCard.setOrderNumber(orderNumber);
         virtualCard.setClientId(clientId);
         virtualCard.setVirtualId(virtualId);
-        virtualCard.setRechargeAmount(rechargeAmount);
+        virtualCard.setRechargeAmount(order.getRechargeAmount());
         BaseResponse result = virtualCardSv.insertVCRecharge(virtualCard);
         if(!result.getCode().equals("0001")) {
             return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_ADD_FAIL.getMessage());
@@ -256,7 +255,7 @@
 
         //璁㈠崟閲戦
         JSONObject job_amount = new JSONObject();
-        job_amount.put("total", rechargeAmount);
+        job_amount.put("total", (int)(order.getRechargeAmount()*100));
         job_amount.put("currency", "CNY");
         job_body.put("amount", job_amount);
 
@@ -273,7 +272,7 @@
         String httpUrl = "/v3/pay/transactions/jsapi";
 
         String body = job_body.toJSONString();
-        String header = schema + " " + payHelper.getToken(method, httpUrl, body, nonceStr, timestamp, privateCertFileName);
+        String header = schema + " " + payHelper.getToken(method, httpUrl, body, nonceStr, timestamp, WxCertUtil.getKey_pemBytes(resourceLoader));
 
         Map<String, String> headers = new HashMap<>();
         headers.put("Authorization", header);
@@ -315,7 +314,7 @@
         String nonceStr = payHelper.generateRandomString();
         String pkg = "prepay_id=" + prepayId;
         String message = payHelper.buildMessage_signAgain(appid, timeStamp, nonceStr, pkg);
-        String paySign = payHelper.sign(message.getBytes("utf-8"), privateCertFileName);
+        String paySign = payHelper.sign(message.getBytes("utf-8"), WxCertUtil.getKey_pemBytes(resourceLoader));
 
         JSONObject job_result = new JSONObject();
         job_result.put("timeStamp", timeStamp);
@@ -348,7 +347,7 @@
     @PostMapping(path = "orderNotify", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public JSONObject orderNotify(@RequestHeader HttpHeaders headers, HttpServletRequest request, HttpServletResponse response) throws IOException, GeneralSecurityException {
+    public JSONObject orderNotify(@RequestHeader HttpHeaders headers, HttpServletRequest request, HttpServletResponse response) throws IOException, GeneralSecurityException, Exception {
         JSONObject result = new JSONObject();
 
         /**
@@ -386,8 +385,9 @@
 
         // 鏋勯�犻獙绛惧悕涓�
         String signatureStr = payHelper.responseSign(wechatpayTimestamp, wechatpayNonce, bodyStr);
+        byte[] keyPemBs = WxCertUtil.getKey_pemBytes(resourceLoader) ;
         // 楠岃瘉绛惧悕
-        Boolean valid = payHelper.responseSignVerify(wechatpaySerial, signatureStr, wechatpaySignature);
+        Boolean valid = payHelper.responseSignVerify(wechatpaySerial, signatureStr, wechatpaySignature, keyPemBs);
         if(!valid) {
             response.setStatus(500);
             result.put("code", "FAIL");
@@ -516,4 +516,5 @@
         result.put("message", "鎴愬姛");
         return  result;
     }
+
 }

--
Gitblit v1.8.0