RefundPayOrder.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.yc.ship;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.yc.ship.module.trade.framework.common.PayDigestUtil;
  5. import com.yc.ship.module.trade.framework.common.PayUtil;
  6. import java.net.URLEncoder;
  7. import java.util.Map;
  8. /**
  9. * @author :qsl
  10. * @description:TODO
  11. * @date :2026/7/1 16:15
  12. **/
  13. public class RefundPayOrder {
  14. static final String mchId = "10000004";
  15. /**
  16. * 加签key
  17. */
  18. static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
  19. /**
  20. * 验签key
  21. */
  22. static final String repKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
  23. static final String baseUrl = "http://booking.vista-cruises.com/pay/api";
  24. static final String notifyUrl = "http://booking.vista-cruises.com/ship-app-api/trade/payNotify"; // 本地环境测试,可到ngrok.cc网站注册
  25. public static void main(String[] args) {
  26. payOrderTest(); // 支付下单
  27. // refundOrderTest(); // 退款创建退单
  28. //quryRefundOrderTest(); //查询退单
  29. }
  30. static void payOrderTest() {
  31. JSONObject paramMap = new JSONObject();
  32. paramMap.put("mchId", mchId); // 商户ID
  33. paramMap.put("mchOrderNo", "ZSHL"+System.currentTimeMillis()); // 商户订单号
  34. paramMap.put("channelId", "ABC_JL_C2B");
  35. paramMap.put("amount", 1); // 支付金额,单位分
  36. paramMap.put("currency", "cny"); // 币种, cny-人民币
  37. paramMap.put("clientIp", "127.0.0.1"); // 用户地址,微信H5支付时要真实的
  38. paramMap.put("device", "WEB"); // 设备
  39. paramMap.put("subject", "测试票,请勿购买");
  40. paramMap.put("body", "测试票,请勿购买");
  41. paramMap.put("notifyUrl", notifyUrl); // 回调URL
  42. paramMap.put("returnUrl", "http://172.16.121.237:8100/"); // 回调URL
  43. paramMap.put("param1", ""); // 扩展参数1 1 微信 2 支付宝
  44. paramMap.put("param2", ""); // 扩展参数1 1 微信 2 支付宝
  45. paramMap.put("expireTime", "1800"); // 扩展参数2
  46. // paramMap.put("payCode", "132857771924518653"); //付款码 用户被扫必传
  47. paramMap.put("msgType", "");
  48. // //附加参数
  49. paramMap.put("extra", "{\"deviceType\":\"11\",\"secretText\":\"\",\"appVersion\":\"\",\"serialNum\":\"\",\"productId\":\"558873250097004544\",\"openId\":\"otZpM10ls6fycQU3rlclCTHzw8NM\",\"latitude\":\"16.1\",\"longitude\":\"16.1\"}");
  50. String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
  51. paramMap.put("sign", reqSign);
  52. // 签名
  53. String reqData = "params=" + paramMap.toJSONString();
  54. System.out.println("请求支付中心下单接口,请求数据:" + reqData);
  55. long s1 = System.currentTimeMillis();
  56. String url = baseUrl + "/pay/create_order?";
  57. String result = PayUtil.call4Post(url + reqData);
  58. System.out.println("请求支付中心下单接口,响应数据:" + result);
  59. System.out.println("执行:"+(System.currentTimeMillis()-s1));
  60. }
  61. static void refundOrderTest() {
  62. JSONObject paramMap = new JSONObject();
  63. paramMap.put("mchId", mchId); // 商户ID
  64. paramMap.put("mchRefundNo", "REFUND" + System.currentTimeMillis()); // 商户订单号
  65. paramMap.put("channelId", "ABC_JL_C2B");
  66. paramMap.put("currency", "cny"); // 币种, cny-人民币
  67. paramMap.put("clientIp", "127.0.0.1"); // 用户地址,微信H5支付时要真实的
  68. paramMap.put("device", "WEB"); // 设备
  69. paramMap.put("subject", "退款");
  70. paramMap.put("body", "退款");
  71. paramMap.put("notifyUrl", notifyUrl); // 回调URL
  72. paramMap.put("param1", ""); // 扩展参数1
  73. paramMap.put("param2", "");
  74. paramMap.put("param4", "退款");
  75. paramMap.put("amount", 1); //单位分
  76. // 退款金额
  77. paramMap.put("channelUser", "oZbAa6hwbFOAG8k_yByGq3UXlcgk"); // 微信openId
  78. paramMap.put("payOrderId","PDDY0020260104123816XXXX");
  79. String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
  80. System.out.println("加密参数:"+paramMap+";reqKey="+reqKey);
  81. System.out.println("sign="+reqSign);
  82. paramMap.put("sign", reqSign); // 签名
  83. String reqDataencode = "params=" + URLEncoder.encode(paramMap.toJSONString());
  84. String reqData = "params=" + paramMap.toJSONString();
  85. System.out.println("请求支付中心退款接口,请求数据:" + reqData);
  86. String url = baseUrl + "/refund/create_order?";
  87. String result = PayUtil.call4Post(url + reqDataencode);
  88. System.out.println("请求支付中心退款接口,响应数据:" + result);
  89. Map retMap = JSON.parseObject(result);
  90. if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
  91. // 验签
  92. System.out.println(retMap);
  93. String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
  94. String retSign = (String) retMap.get("sign");
  95. if(checkSign.equals(retSign)) {
  96. System.out.println("=========支付中心退款验签成功=========");
  97. }else {
  98. System.err.println("=========支付中心退款验签失败=========");
  99. }
  100. }
  101. }
  102. static void quryRefundOrderTest() {
  103. JSONObject paramMap = new JSONObject();
  104. paramMap.put("mchId", mchId); // 商户ID
  105. paramMap.put("mchOrderNo", "8739585736883499008"); // 商户订单号
  106. paramMap.put("refundOrderId", "RDY002026050418170608"); // 支付订单号
  107. paramMap.put("executeNotify", "false"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
  108. paramMap.put("channelId", "ABC_JL_C2B"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
  109. paramMap.put("param1", ""); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
  110. String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
  111. paramMap.put("sign", reqSign); // 签名
  112. String reqData = "params=" + paramMap.toJSONString();
  113. String url = baseUrl + "/query/refund?";
  114. String result = PayUtil.call4Post(url + reqData);
  115. System.out.println("请求支付中心退单查询接口,响应数据:" + result);
  116. }
  117. }