diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java new file mode 100644 index 00000000..b705a9d8 --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -0,0 +1,46 @@ +package com.sqx.modules.pay.controller.app; + +import com.alibaba.fastjson.JSONObject; +import com.amazonaws.services.dynamodbv2.xspec.M; +import com.sqx.modules.pay.wuyou.Encrypt; +import com.sqx.modules.pay.wuyou.NotifyDto; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +/** + * @author GYJ + */ +@Slf4j +@RestController +@Api(value = "无忧支付", tags = {"无忧支付"}) +@RequestMapping("/app/wuyou") +public class WuyouController { + + @PostMapping("/notify") + public String notify(HttpServletRequest request, @RequestBody NotifyDto notifyDto) { + log.info("无忧支付回调"); + Map params = new HashMap<>(); + params.put("callbacks", notifyDto.getCallbacks()); + params.put("total", notifyDto.getTotal()); + params.put("out_trade_no", notifyDto.getOutTradeNo()); + params.put("pay_time", notifyDto.getPayTime()); + + String sign = Encrypt.getParamsSign(params); + if (!sign.equals(notifyDto.getSign())) { + log.error("无忧支付回调签名错误, 参数: {},签名结果:{}", JSONObject.toJSONString(notifyDto), sign); + return "签名错误"; + } + + log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto)); + + return "success"; + } +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java b/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java index 365e4681..17c342b2 100644 --- a/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java +++ b/src/main/java/com/sqx/modules/pay/wuyou/BaseResp.java @@ -12,6 +12,8 @@ public class BaseResp { private Integer status; private String msg; private OrderResp data; + + // 只有 SUCCESS 是成功的 @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 index 8472e8f7..50723dd4 100644 --- a/src/main/java/com/sqx/modules/pay/wuyou/Constants.java +++ b/src/main/java/com/sqx/modules/pay/wuyou/Constants.java @@ -12,4 +12,6 @@ public class Constants { final static String PAY_URL = BASE_URL + "/api/order"; final static String QUERY_URL = BASE_URL + "/api/queryOrder"; + final static String NOTIFY_URL = "https://video.hnsiyao.cn/app/wuyou/notify"; + } diff --git a/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java b/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java new file mode 100644 index 00000000..010be56e --- /dev/null +++ b/src/main/java/com/sqx/modules/pay/wuyou/NotifyDto.java @@ -0,0 +1,22 @@ +package com.sqx.modules.pay.wuyou; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author GYJ + */ +@Data +public class NotifyDto { + // CODE_SUCCESS 代表成功,其余为失败 + private String callbacks; + private Double total; + + @JSONField(name = "out_trade_no") + private String outTradeNo; + + @JSONField(name = "pay_time") + private String payTime; + + private String sign; +} diff --git a/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java b/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java index a73fd179..706812b0 100644 --- a/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java +++ b/src/main/java/com/sqx/modules/pay/wuyou/WuyouPay.java @@ -2,6 +2,8 @@ package com.sqx.modules.pay.wuyou; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; @@ -10,6 +12,8 @@ import java.util.Map; * @author GYJ */ public class WuyouPay { + private static final Logger logger = LoggerFactory.getLogger(WuyouPay.class); + public static BaseResp payOrder(String orderNo, String amount, String userAgent) { Map params = getBaseParams(); params.put("out_trade_no", orderNo); @@ -40,7 +44,7 @@ public class WuyouPay { 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("notify_url", Constants.NOTIFY_URL); params.put("is_code", "1"); return params; } @@ -53,10 +57,13 @@ public class WuyouPay { .execute() .body(); + logger.info("request url: {}, params: {}, response: {}", url, params, body); + return body; } public static void main(String[] args) { - payOrder("20221118123456791", "0.1", "Mozilla/5.0"); +// payOrder("20221118123456791", "0.1", "Mozilla/5.0"); + queryOrder("20221118123456791", "0.1", "Mozilla/5.0"); } }