|
@@ -0,0 +1,130 @@
|
|
|
|
|
+package com.yc.ship;
|
|
|
|
|
+
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
+import com.yc.ship.module.trade.framework.common.PayDigestUtil;
|
|
|
|
|
+import com.yc.ship.module.trade.framework.common.PayUtil;
|
|
|
|
|
+
|
|
|
|
|
+import java.net.URLEncoder;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author :李事樯
|
|
|
|
|
+ * @description:TODO
|
|
|
|
|
+ * @date :2026/7/1 16:15
|
|
|
|
|
+ **/
|
|
|
|
|
+public class RefundPayOrder {
|
|
|
|
|
+
|
|
|
|
|
+ static final String mchId = "10000004";
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 加签key
|
|
|
|
|
+ */
|
|
|
|
|
+ static final String reqKey = "M86l522AV6q613Ii4W6u8K48uW8vM1N6bFgyv769220MdYe9u37N4y7rI5mQ";
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 验签key
|
|
|
|
|
+ */
|
|
|
|
|
+ static final String repKey = "Hpcl522AV6q613KIi46u6g6XuW8vM1N8bFgyv769770MdYe9u37M4y7rIpl8";
|
|
|
|
|
+
|
|
|
|
|
+ static final String baseUrl = "http://booking.vista-cruises.com/pay/api";
|
|
|
|
|
+
|
|
|
|
|
+ static final String notifyUrl = "http://booking.vista-cruises.com/ship-app-api/trade/payNotify"; // 本地环境测试,可到ngrok.cc网站注册
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ payOrderTest(); // 支付下单
|
|
|
|
|
+// refundOrderTest(); // 退款创建退单
|
|
|
|
|
+ //quryRefundOrderTest(); //查询退单
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ static void payOrderTest() {
|
|
|
|
|
+ JSONObject paramMap = new JSONObject();
|
|
|
|
|
+ paramMap.put("mchId", mchId); // 商户ID
|
|
|
|
|
+ paramMap.put("mchOrderNo", "ZSHL"+System.currentTimeMillis()); // 商户订单号
|
|
|
|
|
+ paramMap.put("channelId", "ABC_JL_C2B");
|
|
|
|
|
+ paramMap.put("amount", 1); // 支付金额,单位分
|
|
|
|
|
+ paramMap.put("currency", "cny"); // 币种, cny-人民币
|
|
|
|
|
+ paramMap.put("clientIp", "127.0.0.1"); // 用户地址,微信H5支付时要真实的
|
|
|
|
|
+ paramMap.put("device", "WEB"); // 设备
|
|
|
|
|
+ paramMap.put("subject", "测试票,请勿购买");
|
|
|
|
|
+ paramMap.put("body", "测试票,请勿购买");
|
|
|
|
|
+ paramMap.put("notifyUrl", notifyUrl); // 回调URL
|
|
|
|
|
+ paramMap.put("returnUrl", "http://172.16.121.237:8100/"); // 回调URL
|
|
|
|
|
+ paramMap.put("param1", ""); // 扩展参数1 1 微信 2 支付宝
|
|
|
|
|
+ paramMap.put("param2", ""); // 扩展参数1 1 微信 2 支付宝
|
|
|
|
|
+ paramMap.put("expireTime", "1800"); // 扩展参数2
|
|
|
|
|
+// paramMap.put("payCode", "132857771924518653"); //付款码 用户被扫必传
|
|
|
|
|
+ paramMap.put("msgType", "");
|
|
|
|
|
+// //附加参数
|
|
|
|
|
+ paramMap.put("extra", "{\"deviceType\":\"11\",\"secretText\":\"\",\"appVersion\":\"\",\"serialNum\":\"\",\"productId\":\"558873250097004544\",\"openId\":\"otZpM10ls6fycQU3rlclCTHzw8NM\",\"latitude\":\"16.1\",\"longitude\":\"16.1\"}");
|
|
|
|
|
+ String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
|
|
|
|
|
+ paramMap.put("sign", reqSign);
|
|
|
|
|
+ // 签名
|
|
|
|
|
+ String reqData = "params=" + paramMap.toJSONString();
|
|
|
|
|
+ System.out.println("请求支付中心下单接口,请求数据:" + reqData);
|
|
|
|
|
+ long s1 = System.currentTimeMillis();
|
|
|
|
|
+ String url = baseUrl + "/pay/create_order?";
|
|
|
|
|
+ String result = PayUtil.call4Post(url + reqData);
|
|
|
|
|
+ System.out.println("请求支付中心下单接口,响应数据:" + result);
|
|
|
|
|
+ System.out.println("执行:"+(System.currentTimeMillis()-s1));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ static void refundOrderTest() {
|
|
|
|
|
+ JSONObject paramMap = new JSONObject();
|
|
|
|
|
+ paramMap.put("mchId", mchId); // 商户ID
|
|
|
|
|
+ paramMap.put("mchRefundNo", "REFUND" + System.currentTimeMillis()); // 商户订单号
|
|
|
|
|
+ paramMap.put("channelId", "ABC_JL_C2B");
|
|
|
|
|
+ paramMap.put("currency", "cny"); // 币种, cny-人民币
|
|
|
|
|
+ paramMap.put("clientIp", "127.0.0.1"); // 用户地址,微信H5支付时要真实的
|
|
|
|
|
+ paramMap.put("device", "WEB"); // 设备
|
|
|
|
|
+ paramMap.put("subject", "退款");
|
|
|
|
|
+ paramMap.put("body", "退款");
|
|
|
|
|
+ paramMap.put("notifyUrl", notifyUrl); // 回调URL
|
|
|
|
|
+ paramMap.put("param1", ""); // 扩展参数1
|
|
|
|
|
+ paramMap.put("param2", "");
|
|
|
|
|
+ paramMap.put("param4", "退款");
|
|
|
|
|
+ paramMap.put("amount", 1); //单位分
|
|
|
|
|
+ // 退款金额
|
|
|
|
|
+ paramMap.put("channelUser", "oZbAa6hwbFOAG8k_yByGq3UXlcgk"); // 微信openId
|
|
|
|
|
+ paramMap.put("payOrderId","PDDY0020260104123816XXXX");
|
|
|
|
|
+
|
|
|
|
|
+ String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
|
|
|
|
|
+ System.out.println("加密参数:"+paramMap+";reqKey="+reqKey);
|
|
|
|
|
+ System.out.println("sign="+reqSign);
|
|
|
|
|
+ paramMap.put("sign", reqSign); // 签名
|
|
|
|
|
+ String reqDataencode = "params=" + URLEncoder.encode(paramMap.toJSONString());
|
|
|
|
|
+ String reqData = "params=" + paramMap.toJSONString();
|
|
|
|
|
+ System.out.println("请求支付中心退款接口,请求数据:" + reqData);
|
|
|
|
|
+ String url = baseUrl + "/refund/create_order?";
|
|
|
|
|
+ String result = PayUtil.call4Post(url + reqDataencode);
|
|
|
|
|
+ System.out.println("请求支付中心退款接口,响应数据:" + result);
|
|
|
|
|
+ Map retMap = JSON.parseObject(result);
|
|
|
|
|
+ if("SUCCESS".equals(retMap.get("retCode")) && "SUCCESS".equalsIgnoreCase(retMap.get("resCode").toString())) {
|
|
|
|
|
+ // 验签
|
|
|
|
|
+ System.out.println(retMap);
|
|
|
|
|
+ String checkSign = PayDigestUtil.getSign(retMap, repKey, "sign", "payParams");
|
|
|
|
|
+ String retSign = (String) retMap.get("sign");
|
|
|
|
|
+ if(checkSign.equals(retSign)) {
|
|
|
|
|
+ System.out.println("=========支付中心退款验签成功=========");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ System.err.println("=========支付中心退款验签失败=========");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ static void quryRefundOrderTest() {
|
|
|
|
|
+ JSONObject paramMap = new JSONObject();
|
|
|
|
|
+ paramMap.put("mchId", mchId); // 商户ID
|
|
|
|
|
+ paramMap.put("mchOrderNo", "8739585736883499008"); // 商户订单号
|
|
|
|
|
+ paramMap.put("refundOrderId", "RDY002026050418170608"); // 支付订单号
|
|
|
|
|
+ paramMap.put("executeNotify", "false"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
|
|
|
|
|
+ paramMap.put("channelId", "ABC_JL_C2B"); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
|
|
|
|
|
+ paramMap.put("param1", ""); // 是否执行回调,true或false,如果为true当订单状态为支付成功(2)时,支付中心会再次回调一次业务系统
|
|
|
|
|
+
|
|
|
|
|
+ String reqSign = PayDigestUtil.getSign(paramMap, reqKey);
|
|
|
|
|
+ paramMap.put("sign", reqSign); // 签名
|
|
|
|
|
+ String reqData = "params=" + paramMap.toJSONString();
|
|
|
|
|
+ String url = baseUrl + "/query/refund?";
|
|
|
|
|
+ String result = PayUtil.call4Post(url + reqData);
|
|
|
|
|
+ System.out.println("请求支付中心退单查询接口,响应数据:" + result);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|