| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- 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 :qsl
- * @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);
- }
- }
|