From 29fce0c40eee40eba2b3a580239066fdecb7966e Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Tue, 3 Dec 2024 18:04:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E5=BF=A7=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sqx/modules/pay/wuyou/BaseResp.java | 17 +++++ .../com/sqx/modules/pay/wuyou/Constants.java | 15 +++++ .../com/sqx/modules/pay/wuyou/Encrypt.java | 36 +++++++++++ .../com/sqx/modules/pay/wuyou/OrderResp.java | 29 +++++++++ .../com/sqx/modules/pay/wuyou/WuyouPay.java | 62 +++++++++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java create mode 100644 src/main/java/com/sqx/modules/pay/wuyou/Constants.java create mode 100644 src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java create mode 100644 src/main/java/com/sqx/modules/pay/wuyou/OrderResp.java create mode 100644 src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java diff --git a/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java b/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java new file mode 100644 index 00000000..365e4681 --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java @@ -0,0 +1,17 @@ +package com.sqx.modules.pay.wuyou; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author GYJ + */ +@Data +public class BaseResp { + private Integer code; + private Integer status; + private String msg; + private OrderResp data; + @JSONField(name = "pay_status") + private String payStatus; +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/Constants.java b/src/main/java/com/sqx/modules/pay/wuyou/Constants.java new file mode 100644 index 00000000..8472e8f7 --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/Constants.java @@ -0,0 +1,15 @@ +package com.sqx.modules.pay.wuyou; + +/** + * @author GYJ + */ +public class Constants { + final static String APP_SECRET = "3MWSBmyKDeQDLXzoLr53tKVqiJv4Fm0KdsEhbpXW9YWvh35VgozL5S3rpUz4EjSb"; + final static String MERCHANT_ID = "100360"; + + final static String BASE_URL = "http://47.113.117.120"; + + final static String PAY_URL = BASE_URL + "/api/order"; + final static String QUERY_URL = BASE_URL + "/api/queryOrder"; + +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java b/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java new file mode 100644 index 00000000..79d99fde --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/Encrypt.java @@ -0,0 +1,36 @@ +package com.sqx.modules.pay.wuyou; + +import com.alibaba.druid.util.Utils; + +import java.util.HashMap; +import java.util.Map; + +import static com.sqx.modules.pay.wuyou.Constants.APP_SECRET; + +/** + * 无忧支付 签名加密 + * @author GYJ + */ +public class Encrypt { + + + public static String getParamsSign(Map params) { + // 将参数按照key=value的格式拼接在一起, key按照字典序排序 + StringBuilder sb = new StringBuilder(); + params.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { + sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); + }); + sb.append("key=").append(APP_SECRET); + String signStr = sb.toString(); + System.out.println("signStr: " + signStr); + return Utils.md5(signStr).toUpperCase(); + } + + public static void main(String[] args) { + Map params = new HashMap<>(); + params.put("a", "1"); + params.put("b", "2"); + String sign = getParamsSign(params); + System.out.println(sign); + } +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/OrderResp.java b/src/main/java/com/sqx/modules/pay/wuyou/OrderResp.java new file mode 100644 index 00000000..2fe67be7 --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/OrderResp.java @@ -0,0 +1,29 @@ +package com.sqx.modules.pay.wuyou; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author GYJ + */ +@Data +public class OrderResp { + @JSONField(name = "mch_id") + private String mchId; + + @JSONField(name = "out_trade_no") + private String outTradeNo; + + private Double total; + + private String type; + + // 如果支付订单则返回订单创建时间,如果是查询订单则返回订单支付时间 + private long timestamp; + + @JSONField(name = "qr_url") + private String qrUrl; + + @JSONField(name = "h5_url") + private String h5Url; +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java b/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java new file mode 100644 index 00000000..a73fd179 --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java @@ -0,0 +1,62 @@ +package com.sqx.modules.pay.wuyou; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author GYJ + */ +public class WuyouPay { + public static BaseResp payOrder(String orderNo, String amount, String userAgent) { + Map params = getBaseParams(); + params.put("out_trade_no", orderNo); + params.put("total", amount); + + String sign = Encrypt.getParamsSign(params); + params.put("sign", sign); + + String body = request(Constants.PAY_URL, params, userAgent); + + return JSONObject.parseObject(body, BaseResp.class); + } + + private static BaseResp queryOrder(String orderNo, String amount, String userAgent) { + Map params = getBaseParams(); + params.put("out_trade_no", orderNo); + params.put("total", amount); + + String sign = Encrypt.getParamsSign(params); + params.put("sign", sign); + + String body = request(Constants.QUERY_URL, params, userAgent); + return JSONObject.parseObject(body, BaseResp.class); + } + + private static Map getBaseParams() { + Map params = new HashMap<>(); + params.put("mch_id", Constants.MERCHANT_ID); + params.put("timestamp", System.currentTimeMillis() / 1000); + params.put("type", "6001"); + params.put("notify_url", Constants.BASE_URL + "/api/notify"); + params.put("is_code", "1"); + return params; + } + + private static String request(String url, Map params, String userAgent) { + String body = HttpRequest.post(url) + .header("Content-Type", "application/x-www-form-urlencoded") + .header("User-Agent", userAgent) + .body(JSONObject.toJSONString(params)) + .execute() + .body(); + + return body; + } + + public static void main(String[] args) { + payOrder("20221118123456791", "0.1", "Mozilla/5.0"); + } +}