From 11e778f72b830a4050c293d78694417d32055727 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 20 十月 2023 20:39:55 +0800
Subject: [PATCH] 对接第三方分账接口

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/HuiFuTianXiaUtil.java |   61 +++++++++++-------------------
 1 files changed, 23 insertions(+), 38 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/HuiFuTianXiaUtil.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/HuiFuTianXiaUtil.java
index e51b325..70a0a06 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/HuiFuTianXiaUtil.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/HuiFuTianXiaUtil.java
@@ -7,6 +7,8 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.order.domain.dto.WechatPaymentRefundDto;
+import com.ruoyi.order.domain.dto.WeixinPaymentNotifyDto;
 import com.ruoyi.order.domain.vo.PaymentDelaytransHFTXVo;
 import com.ruoyi.order.domain.vo.WeixinPaymentNotifyVo;
 import com.ruoyi.order.domain.vo.WeixinPaymentRefundVo;
@@ -18,7 +20,6 @@
 import java.security.Signature;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.X509EncodedKeySpec;
-import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -55,9 +56,6 @@
      */
     public static R<JSONObject> weixinPayment(String req_seq_id, String goods_desc, Double trans_amt, String sub_openid, String notify_url){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-        NumberFormat numberInstance = NumberFormat.getInstance();
-        //最大两位小数
-        numberInstance.setMaximumFractionDigits(2);
         String url = "https://api.huifu.com/v2/trade/payment/jspay";
         JSONObject data = new JSONObject();
         data.put("req_date", sdf.format(new Date()));
@@ -65,7 +63,7 @@
         data.put("huifu_id", huifu_id);
         data.put("goods_desc", goods_desc);
         data.put("trade_type", "T_MINIAPP");
-        data.put("trans_amt", numberInstance.format(trans_amt));
+        data.put("trans_amt", String.format("%.2f", trans_amt));
 
         JSONObject wx_data = new JSONObject();
         wx_data.put("sub_appid", sub_appid);
@@ -84,18 +82,13 @@
         headers.put("Content-type","application/json; charset=utf-8");
         headers.put("Accept", "application/json");
         post.addHeaders(headers);
+        System.err.println(JSON.toJSONString(body));
         post.body(body.toJSONString());
         HttpResponse execute = post.execute();
         String result1 = execute.body();
         execute.close();
         if(StringUtils.hasLength(result1)){
             JSONObject result = JSONObject.parseObject(result1);
-            String result_data = result.getString("data");
-            String result_sign = result.getString("sign");
-            boolean verify = verify(result_data, result_sign);
-            if(!verify){
-                return R.fail("结果验签失败");
-            }
             JSONObject resultData = result.getJSONObject("data");
             String resp_code = resultData.getString("resp_code");
             String resp_desc = resultData.getString("resp_desc");
@@ -114,18 +107,17 @@
 
     /**
      * 微信支付回调数据处理
-     * @param jsonObject
      * @return
      */
-    public static R<WeixinPaymentNotifyVo> weixinPaymentNotify(JSONObject jsonObject){
-        String sign = jsonObject.getString("sign");
-        JSONObject resp_data = jsonObject.getJSONObject("resp_data");
-        String resp_code = jsonObject.getString("resp_code");
-        String resp_desc = jsonObject.getString("resp_desc");
+    public static R<WeixinPaymentNotifyVo> weixinPaymentNotify(WeixinPaymentNotifyDto dto){
+        String sign = dto.getSign();
+        JSONObject resp_data = JSON.parseObject(dto.getResp_data());
+        String resp_code = dto.getResp_code();
+        String resp_desc = dto.getResp_desc();
         if("00000000".equals(resp_code)){
             String code = resp_data.getString("resp_code");
             String desc = resp_data.getString("resp_desc");
-            if("00000000".equals(code)){
+            if(!"00000000".equals(code)){
                 return R.fail(desc);
             }
             WeixinPaymentNotifyVo vo = new WeixinPaymentNotifyVo();
@@ -148,23 +140,20 @@
      * @param req_seq_id            请求流水号
      * @param ord_amt               退款金额
      * @param org_req_date          原交易请求日期yyyyMMdd
-     * @param org_party_order_id    原交易微信支付宝的商户单号
+     * @param org_req_seq_id        原交易请求流水号
      * @param notify_url            异步通知地址
      * @return
      */
-    public static R<String> weixinPaymentRefund(String req_seq_id, Double ord_amt, String org_req_date, String org_party_order_id, String notify_url){
+    public static R<String> weixinPaymentRefund(String req_seq_id, Double ord_amt, String org_req_date, String org_req_seq_id, String notify_url){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-        NumberFormat numberInstance = NumberFormat.getInstance();
-        //最大两位小数
-        numberInstance.setMaximumFractionDigits(2);
         String url = "https://api.huifu.com/v2/trade/payment/scanpay/refund";
         JSONObject data = new JSONObject();
         data.put("req_date", sdf.format(new Date()));
         data.put("req_seq_id", req_seq_id);
         data.put("huifu_id", huifu_id);
-        data.put("ord_amt", ord_amt);
+        data.put("ord_amt", String.format("%.2f", ord_amt));
         data.put("org_req_date", org_req_date);
-        data.put("org_party_order_id", org_party_order_id);
+        data.put("org_req_seq_id", org_req_seq_id);
         data.put("notify_url", notify_url);
 
         JSONObject body = new JSONObject();
@@ -178,23 +167,20 @@
         headers.put("Accept", "application/json");
         post.addHeaders(headers);
         post.body(body.toJSONString());
+        System.err.println(JSON.toJSONString(body));
         HttpResponse execute = post.execute();
         String result1 = execute.body();
         execute.close();
         if(StringUtils.hasLength(result1)){
             JSONObject result = JSONObject.parseObject(result1);
-            String result_data = result.getString("data");
-            String result_sign = result.getString("sign");
-            boolean verify = verify(result_data, result_sign);
-            if(!verify){
-                return R.fail("结果验签失败");
-            }
             JSONObject resultData = result.getJSONObject("data");
             String resp_code = resultData.getString("resp_code");
             String resp_desc = resultData.getString("resp_desc");
+            String trans_stat = resultData.getString("trans_stat");
             //交易受理成功;注:交易状态以trans_stat为准;
             String success1 = "00000000";
-            if(success1.equals(resp_code)){
+            String success2 = "00000100";
+            if(success1.equals(resp_code) || success2.equals(resp_code)){
                 String req_seq_id1 = resultData.getString("req_seq_id");
                 return R.ok(req_seq_id1);
             }
@@ -206,14 +192,13 @@
 
     /**
      * 微信支付退款回调通知
-     * @param jsonObject
      * @return
      */
-    public static R<WeixinPaymentRefundVo> weixinPaymentRefundNotify(JSONObject jsonObject){
-        String sign = jsonObject.getString("sign");
-        JSONObject data = jsonObject.getJSONObject("data");
-        String resp_code = data.getString("resp_code");
-        String resp_desc = data.getString("resp_desc");
+    public static R<WeixinPaymentRefundVo> weixinPaymentRefundNotify(WechatPaymentRefundDto dto){
+        String sign = dto.getSign();
+        JSONObject data = JSON.parseObject(dto.getResp_data());
+        String resp_code = data.getString("sub_resp_code");
+        String resp_desc = data.getString("sub_resp_desc");
         if("00000000".equals(resp_code)){
             WeixinPaymentRefundVo vo = new WeixinPaymentRefundVo();
             vo.setReqSeqId(data.getString("req_seq_id"));

--
Gitblit v1.7.1