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