From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 09 六月 2025 11:54:00 +0800
Subject: [PATCH] 6.9新增登录失败冻结逻辑

---
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java |  157 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 122 insertions(+), 35 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
index ed15b2b..9cade45 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
@@ -1,56 +1,71 @@
 package com.panzhihua.common.utlis;
 
-import com.alibaba.fastjson.JSONObject;
-import com.panzhihua.common.constants.PayCpmstant;
-
 import java.math.BigDecimal;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
+import com.panzhihua.common.utlis.wx.WXPayUtil;
+import org.json.XML;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.constants.PayCpmstant;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
 public class WxPayUtils {
 
-    public static String getUnifiedorder(String body, String openid, String outTradeNo, BigDecimal money) throws Exception{
+    public static String getUnifiedorder(String appid, String mchId, String payKey, String notifyUrl, String body,
+        String openid, String outTradeNo, BigDecimal money,String attach) {
         String nonceStr = PayUtil.makeUUID(32);
         SortedMap<Object, Object> params = new TreeMap<>();
-        params.put("appid", "wx0cef797390444b75");
+        params.put("appid", appid);
         params.put("body", body);
-        params.put("mch_id", "1608439275");
-        params.put("nonce_str",nonceStr);
-        params.put("notify_url", "http://387405oo37.zicp.vip/api/applets/wx/notify");
+        params.put("mch_id", mchId);
+        params.put("nonce_str", nonceStr);
+        params.put("notify_url", notifyUrl);
         params.put("openid", openid);
-        params.put("out_trade_no", outTradeNo);//商品订单号
-        params.put("spbill_create_ip", PayUtil.getLocalIp());//服务部署的ip
-        params.put("total_fee", PayUtil.moneyToIntegerStr(money));//费用的参数转型
-        params.put("trade_type", "JSAPI");//对接类型
-        params.put("sign", PayUtil.createSign("UTF-8", params, "01A9CB2234D7CBD0AC61B75EB1263805"));//MD5签名
-        //转换成xml
+        //附加数据
+        if(StringUtils.isNotEmpty(attach)){
+            params.put("attach", attach);
+        }
+        params.put("out_trade_no", outTradeNo);// 商品订单号
+        params.put("spbill_create_ip", PayUtil.getLocalIp());// 服务部署的ip
+        params.put("total_fee", PayUtil.moneyToIntegerStr(money));// 费用的参数转型
+        params.put("trade_type", "JSAPI");// 对接类型
+        params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));// MD5签名
+        // 转换成xml
         String xmlData = PayUtil.getRequestXml(params);
-        //请求微信后台,获取支付id
+        // 请求微信后台,获取支付id
         String resXml = HttpClientUtil.httpsRequest(PayCpmstant.UNIFIEDORDER_URL, xmlData);
-        System.out.println(resXml);
+        log.info("请求微信支付返回参数:" + resXml);
 
-        JSONObject data = XMLUtils.xml2Json(resXml);
+        org.json.JSONObject resultData = XML.toJSONObject(resXml);
+        JSONObject data = JSON.parseObject(resultData.get("xml").toString());
         JSONObject result = new JSONObject();
-        if(data.get("return_msg").equals("OK")){
-            //将微信统一下单成功的参数拼接再签名
-            //统一下单返回prepay_id
-            String prepay_id = "prepay_id=" + data.getString("prepay_id");
-            //时间戳
-            Long timeStamp = System.currentTimeMillis()/1000;
-            //封装需要签名的字段
+        if (data.get("return_msg").equals(PayCpmstant.RETURN_MSG)
+            && data.get("return_code").equals(PayCpmstant.RETURN_CODE)) {
+            // 将微信统一下单成功的参数拼接再签名
+            // 统一下单返回prepay_id
+            String prepayId = "prepay_id=" + data.getString("prepay_id");
+            // 时间戳
+            Long timeStamp = System.currentTimeMillis() / 1000;
+            // 封装需要签名的字段
             SortedMap<Object, Object> payParams = new TreeMap<>();
-            params.put("appid", "wx0cef797390444b75");
-            params.put("nonce_str",nonceStr);
-            params.put("package",nonceStr);
-            params.put("signType",nonceStr);
-            params.put("timeStamp",nonceStr);
-            //将参数以及签名计算完成封装返回给前端
-            result.put("timeStamp",timeStamp);
-            result.put("nonceStr",nonceStr);
-            result.put("package",prepay_id);
-            result.put("signType","MD5");
-            result.put("paySign",PayUtil.createSign("UTF-8", payParams, "01A9CB2234D7CBD0AC61B75EB1263805"));
+            payParams.put("appId", appid);
+            payParams.put("nonceStr", nonceStr);
+            payParams.put("package", prepayId);
+            payParams.put("signType", PayCpmstant.SIGN_TYPE);
+            payParams.put("timeStamp", timeStamp);
+            // 将参数以及签名计算完成封装返回给前端
+            result.put("timeStamp", timeStamp);
+            result.put("nonceStr", nonceStr);
+            result.put("package", prepayId);
+            result.put("signType", PayCpmstant.SIGN_TYPE);
+            result.put("paySign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
         }
         return result.toJSONString();
     }
@@ -67,8 +82,80 @@
         parameters.put("paySign", sign);
         return parameters;
     }
+    public static String h5pay(String appid, String mchId, String payKey, String notifyUrl, String body,
+                               String openid, String outTradeNo, BigDecimal money, String tradeType, String clientIp) {
+        String nonceStr = PayUtil.makeUUID(32);
+        SortedMap<Object, Object> params = new TreeMap<>();
+        params.put("appid", appid);
+        params.put("body", body);
+        params.put("mch_id", mchId);
+        params.put("nonce_str", nonceStr);
+        params.put("notify_url", notifyUrl);
+        params.put("openid", openid);
+        params.put("out_trade_no", outTradeNo);// 商品订单号
+        params.put("spbill_create_ip", clientIp);// 用户真实ip
+        params.put("total_fee", PayUtil.moneyToIntegerStr(money));// 费用的参数转型
+        params.put("trade_type", tradeType);// 对接类型
+        params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));// MD5签名
+        // 转换成xml
+        String xmlData = PayUtil.getRequestXml(params);
+        // 请求微信后台,获取支付id
+        String resXml = HttpClientUtil.httpsRequest(PayCpmstant.UNIFIEDORDER_URL, xmlData);
+        log.info("请求微信支付返回参数:" + resXml);
+
+        org.json.JSONObject resultData = XML.toJSONObject(resXml);
+        JSONObject data = JSON.parseObject(resultData.get("xml").toString());
+        JSONObject result = new JSONObject();
+
+            if (data.get("return_msg").equals(PayCpmstant.RETURN_MSG)
+                    && data.get("return_code").equals(PayCpmstant.RETURN_CODE)) {
+                // 将微信统一下单成功的参数拼接再签名
+                // 统一下单返回prepay_id
+                if(tradeType.equals("JSAPI")) {
+                    String prepayId = "prepay_id=" + data.getString("prepay_id");
+                    // 时间戳
+                    Long timeStamp = System.currentTimeMillis() / 1000;
+                    // 封装需要签名的字段
+                    SortedMap<Object, Object> payParams = new TreeMap<>();
+                    payParams.put("appId", appid);
+                    payParams.put("nonceStr", nonceStr);
+                    payParams.put("package", prepayId);
+                    payParams.put("signType", PayCpmstant.SIGN_TYPE);
+                    payParams.put("timeStamp", timeStamp);
+                    // 将参数以及签名计算完成封装返回给前端
+                    result.put("timeStamp", timeStamp);
+                    result.put("nonceStr", nonceStr);
+                    result.put("package", prepayId);
+                    result.put("signType", PayCpmstant.SIGN_TYPE);
+                    result.put("paySign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
+                }
+                else if(tradeType.equals("NATIVE")) {
+                    result.put("codeUrl",data.getString("code_url"));
+                } else if(tradeType.equals("MWEB")) {
+                    result.put("mWebUrl",data.getString("mweb_url"));
+                }
+            }
 
 
 
+        return result.toJSONString();
+    }
 
+    public static String refund(String appid,String mchId,String orderNo,BigDecimal totalFee,BigDecimal refundFee,String refundNo,Boolean isTest) throws Exception {
+        //创建请求地址
+        String url = PayCpmstant.REFUND_URL;
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        paramMap.put("appid",appid);
+        paramMap.put("mch_id",mchId);
+        paramMap.put("nonce_str", WXPayUtil.generateNonceStr());
+        paramMap.put("out_refund_no",refundNo);
+        paramMap.put("out_trade_no",orderNo);
+        paramMap.put("refund_fee",String.valueOf(refundFee.multiply(BigDecimal.valueOf(100)).longValue()));
+        paramMap.put("total_fee",String.valueOf(totalFee.multiply(BigDecimal.valueOf(100)).longValue()));
+        paramMap.put("sign",WXPayUtil.generateSignature(paramMap,PayCpmstant.REFUND_KEY));
+        log.info("微信退款请求参数:{},{},{},{}",url,WXPayUtil.mapToXml(paramMap),mchId,isTest);
+        //接收请求返回值
+        return HttpClientUtil.doRefund(url,WXPayUtil.mapToXml(paramMap),mchId,isTest);
+
+    }
 }

--
Gitblit v1.7.1