diff --git a/mallinkService/src/main/java/com/simple/pay/WxPay.java b/mallinkService/src/main/java/com/simple/pay/WxPay.java index 033cd9ecd..7688152d1 100644 --- a/mallinkService/src/main/java/com/simple/pay/WxPay.java +++ b/mallinkService/src/main/java/com/simple/pay/WxPay.java @@ -11,9 +11,9 @@ public class WxPay { protected static Logger log = LoggerFactory.getLogger(WxPay.class); // 统一下单接口 - private static final String UNIFIEDORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + private static final String UNIFIEDORDER_URL = "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder"; // 订单查询 - private static final String ORDERQUERY_URL = "https://api.mch.weixin.qq.com/pay/orderquery"; + private static final String ORDERQUERY_URL = "https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery"; // 关闭订单 private static final String CLOSEORDER_URL = "https://api.mch.weixin.qq.com/pay/closeorder"; // 撤销订单 @@ -37,6 +37,9 @@ public class WxPay { // 查询企业付款 private static final String GETTRANSFERINFO_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo"; + // 沙箱 + private static final String SANDBOX_GETSIGNKEY_URL = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; + private WxPay() { } @@ -277,6 +280,17 @@ public class WxPay { return qrCodeUrl; } + /** + * 获取验签秘钥API + * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1 + * + * @param params + * @return + */ + public static String sanboxSignGet(Map params) { + return doPost(SANDBOX_GETSIGNKEY_URL, params); + } + public static String doPost(String url, Map params) { return HttpUtil.payPost(url, WxPayment.toXml(params)); } diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java index a7c8604e3..d327a719d 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java @@ -40,37 +40,161 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { @Autowired WxPayAccountMapper wxPayAccountMapper; - JSONObject errorRefundReqMap = JSON.parseObject("{\"SYSTEMERROR\":{\"detail\":\"接口返回错误\",\"reason\":\"系统超时等\",\"resolution\":\"请不要更换商户退款单号,请使用相同参数再次调用API。\"},\n" + - "{\"BIZERR_NEED_RETRY\":{\"detail\":\"退款业务流程错误,需要商户触发重试来解决\",\"reason\":\"并发情况下,业务被拒绝,商户重试即可解决\",\"resolution\":\"请不要更换商户退款单号,请使用相同参数再次调用API。\"},\n" + - "{\"TRADE_OVERDUE\":{\"detail\":\"订单已经超过退款期限\",\"reason\":\"订单已经超过可退款的最大期限(支付后一年内可退款)\t\",\"resolution\":\"请选择其他方式自行退款\"},\n" + - "{\"ERROR\":{\"detail\":\"业务错误\",\"reason\":\"申请退款业务发生错误\",\"resolution\":\"该错误都会返回具体的错误原因,请根据实际返回做相应处理。\"},\n" + - "{\"USER_ACCOUNT_ABNORMAL\":{\"detail\":\"退款请求失败\",\"reason\":\"用户帐号注销\",\"resolution\":\"此状态代表退款申请失败,商户可自行处理退款。\"},\n" + - "{\"INVALID_REQ_TOO_MUCH\":{\"detail\":\"无效请求过多\",\"reason\":\"连续错误请求数过多被系统短暂屏蔽\t\",\"resolution\":\"请检查业务是否正常,确认业务正常后请在1分钟后再来重试\"},\n" + - "{\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"商户可用退款余额不足\",\"resolution\":\"此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。\"},\n" + - "{\"INVALID_TRANSACTIONID\":{\"detail\":\"无效transaction_id\",\"reason\":\"请求参数未按指引进行填写\",\"resolution\":\"请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败\"},\n" + - "{\"PARAM_ERROR\":{\"detail\":\"参数错误\",\"reason\":\"请求参数未按指引进行填写\",\"resolution\":\"请求参数错误,请重新检查再调用退款申请\"},\n" + - "{\"APPID_NOT_EXIST\":{\"detail\":\"APPID不存在\",\"reason\":\"参数中缺少APPID\",\"resolution\":\"请检查APPID是否正确\"},\n" + - "{\"MCHID_NOT_EXIST\":{\"detail\":\"MCHID不存在\",\"reason\":\"参数中缺少MCHID\",\"resolution\":\"请检查MCHID是否正确\"},\n" + - "{\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"},\n" + - "{\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"},\n" + - "{\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\",\"reason\":\"XML格式错误\",\"resolution\":\"请检查XML参数格式是否正确\"},\n" + - "{\"FREQUENCY_LIMITED\":{\"detail\":\"频率限制\",\"reason\":\"2个月之前的订单申请退款有频率限制\",\"resolution\":\"该笔退款未受理,请降低频率后重试\"}"); - - JSONObject errorRefundQueryMap = JSON.parseObject("{\"SYSTEMERROR\":{\"detail\":\"接口返回错误\",\"reason\":\"系统超时等\",\"resolution\":\"请不要更换商户退款单号,请使用相同参数再次调用API。\"},\n" + - "{\"BIZERR_NEED_RETRY\":{\"detail\":\"退款业务流程错误,需要商户触发重试来解决\",\"reason\":\"并发情况下,业务被拒绝,商户重试即可解决\",\"resolution\":\"请不要更换商户退款单号,请使用相同参数再次调用API。\"},\n" + - "{\"TRADE_OVERDUE\":{\"detail\":\"订单已经超过退款期限\",\"reason\":\"订单已经超过可退款的最大期限(支付后一年内可退款)\t\",\"resolution\":\"请选择其他方式自行退款\"},\n" + - "{\"ERROR\":{\"detail\":\"业务错误\",\"reason\":\"申请退款业务发生错误\",\"resolution\":\"该错误都会返回具体的错误原因,请根据实际返回做相应处理。\"},\n" + - "{\"USER_ACCOUNT_ABNORMAL\":{\"detail\":\"退款请求失败\",\"reason\":\"用户帐号注销\",\"resolution\":\"此状态代表退款申请失败,商户可自行处理退款。\"},\n" + - "{\"INVALID_REQ_TOO_MUCH\":{\"detail\":\"无效请求过多\",\"reason\":\"连续错误请求数过多被系统短暂屏蔽\t\",\"resolution\":\"请检查业务是否正常,确认业务正常后请在1分钟后再来重试\"},\n" + - "{\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"商户可用退款余额不足\",\"resolution\":\"此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。\"},\n" + - "{\"INVALID_TRANSACTIONID\":{\"detail\":\"无效transaction_id\",\"reason\":\"请求参数未按指引进行填写\",\"resolution\":\"请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败\"},\n" + - "{\"PARAM_ERROR\":{\"detail\":\"参数错误\",\"reason\":\"请求参数未按指引进行填写\",\"resolution\":\"请求参数错误,请重新检查再调用退款申请\"},\n" + - "{\"APPID_NOT_EXIST\":{\"detail\":\"APPID不存在\",\"reason\":\"参数中缺少APPID\",\"resolution\":\"请检查APPID是否正确\"},\n" + - "{\"MCHID_NOT_EXIST\":{\"detail\":\"MCHID不存在\",\"reason\":\"参数中缺少MCHID\",\"resolution\":\"请检查MCHID是否正确\"},\n" + - "{\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"},\n" + - "{\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"},\n" + - "{\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\",\"reason\":\"XML格式错误\",\"resolution\":\"请检查XML参数格式是否正确\"},\n" + - "{\"FREQUENCY_LIMITED\":{\"detail\":\"频率限制\",\"reason\":\"2个月之前的订单申请退款有频率限制\",\"resolution\":\"该笔退款未受理,请降低频率后重试\"}"); + JSONObject errorRefundReqMap = JSON.parseObject("{\n" + + " \"SYSTEMERROR\": {\n" + + " \"detail\": \"接口返回错误\",\n" + + " \"reason\": \"系统超时等\",\n" + + " \"resolution\": \"请不要更换商户退款单号,请使用相同参数再次调用API。\"\n" + + " },\n" + + " \"BIZERR_NEED_RETRY\": {\n" + + " \"detail\": \"退款业务流程错误,需要商户触发重试来解决\",\n" + + " \"reason\": \"并发情况下,业务被拒绝,商户重试即可解决\",\n" + + " \"resolution\": \"请不要更换商户退款单号,请使用相同参数再次调用API。\"\n" + + " },\n" + + " \"TRADE_OVERDUE\": {\n" + + " \"detail\": \"订单已经超过退款期限\",\n" + + " \"reason\": \"订单已经超过可退款的最大期限(支付后一年内可退款)\\t\",\n" + + " \"resolution\": \"请选择其他方式自行退款\"\n" + + " },\n" + + " \"ERROR\": {\n" + + " \"detail\": \"业务错误\",\n" + + " \"reason\": \"申请退款业务发生错误\",\n" + + " \"resolution\": \"该错误都会返回具体的错误原因,请根据实际返回做相应处理。\"\n" + + " },\n" + + " \"USER_ACCOUNT_ABNORMAL\": {\n" + + " \"detail\": \"退款请求失败\",\n" + + " \"reason\": \"用户帐号注销\",\n" + + " \"resolution\": \"此状态代表退款申请失败,商户可自行处理退款。\"\n" + + " },\n" + + " \"INVALID_REQ_TOO_MUCH\": {\n" + + " \"detail\": \"无效请求过多\",\n" + + " \"reason\": \"连续错误请求数过多被系统短暂屏蔽\\t\",\n" + + " \"resolution\": \"请检查业务是否正常,确认业务正常后请在1分钟后再来重试\"\n" + + " },\n" + + " \"NOTENOUGH\": {\n" + + " \"detail\": \"余额不足\",\n" + + " \"reason\": \"商户可用退款余额不足\",\n" + + " \"resolution\": \"此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。\"\n" + + " },\n" + + " \"INVALID_TRANSACTIONID\": {\n" + + " \"detail\": \"无效transaction_id\",\n" + + " \"reason\": \"请求参数未按指引进行填写\",\n" + + " \"resolution\": \"请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败\"\n" + + " },\n" + + " \"PARAM_ERROR\": {\n" + + " \"detail\": \"参数错误\",\n" + + " \"reason\": \"请求参数未按指引进行填写\",\n" + + " \"resolution\": \"请求参数错误,请重新检查再调用退款申请\"\n" + + " },\n" + + " \"APPID_NOT_EXIST\": {\n" + + " \"detail\": \"APPID不存在\",\n" + + " \"reason\": \"参数中缺少APPID\",\n" + + " \"resolution\": \"请检查APPID是否正确\"\n" + + " },\n" + + " \"MCHID_NOT_EXIST\": {\n" + + " \"detail\": \"MCHID不存在\",\n" + + " \"reason\": \"参数中缺少MCHID\",\n" + + " \"resolution\": \"请检查MCHID是否正确\"\n" + + " },\n" + + " \"REQUIRE_POST_METHOD\": {\n" + + " \"detail\": \"请使用post方法\",\n" + + " \"reason\": \"未使用post传递参数\",\n" + + " \"resolution\": \"请检查请求参数是否通过post方法提交\"\n" + + " },\n" + + " \"SIGNERROR\": {\n" + + " \"detail\": \"签名错误\",\n" + + " \"reason\": \"参数签名结果不正确\",\n" + + " \"resolution\": \"请检查签名参数和方法是否都符合签名算法要求\"\n" + + " },\n" + + " \"XML_FORMAT_ERROR\": {\n" + + " \"detail\": \"XML格式错误\",\n" + + " \"reason\": \"XML格式错误\",\n" + + " \"resolution\": \"请检查XML参数格式是否正确\"\n" + + " },\n" + + " \"FREQUENCY_LIMITED\": {\n" + + " \"detail\": \"频率限制\",\n" + + " \"reason\": \"2个月之前的订单申请退款有频率限制\",\n" + + " \"resolution\": \"该笔退款未受理,请降低频率后重试\"\n" + + " }\n" + + "}"); + + JSONObject errorRefundQueryMap = JSON.parseObject("{\n" + + " \"SYSTEMERROR\": {\n" + + " \"detail\": \"接口返回错误\",\n" + + " \"reason\": \"系统超时等\",\n" + + " \"resolution\": \"请不要更换商户退款单号,请使用相同参数再次调用API。\"\n" + + " },\n" + + " \"BIZERR_NEED_RETRY\": {\n" + + " \"detail\": \"退款业务流程错误,需要商户触发重试来解决\",\n" + + " \"reason\": \"并发情况下,业务被拒绝,商户重试即可解决\",\n" + + " \"resolution\": \"请不要更换商户退款单号,请使用相同参数再次调用API。\"\n" + + " },\n" + + " \"TRADE_OVERDUE\": {\n" + + " \"detail\": \"订单已经超过退款期限\",\n" + + " \"reason\": \"订单已经超过可退款的最大期限(支付后一年内可退款)\\t\",\n" + + " \"resolution\": \"请选择其他方式自行退款\"\n" + + " },\n" + + " \"ERROR\": {\n" + + " \"detail\": \"业务错误\",\n" + + " \"reason\": \"申请退款业务发生错误\",\n" + + " \"resolution\": \"该错误都会返回具体的错误原因,请根据实际返回做相应处理。\"\n" + + " },\n" + + " \"USER_ACCOUNT_ABNORMAL\": {\n" + + " \"detail\": \"退款请求失败\",\n" + + " \"reason\": \"用户帐号注销\",\n" + + " \"resolution\": \"此状态代表退款申请失败,商户可自行处理退款。\"\n" + + " },\n" + + " \"INVALID_REQ_TOO_MUCH\": {\n" + + " \"detail\": \"无效请求过多\",\n" + + " \"reason\": \"连续错误请求数过多被系统短暂屏蔽\\t\",\n" + + " \"resolution\": \"请检查业务是否正常,确认业务正常后请在1分钟后再来重试\"\n" + + " },\n" + + " \"NOTENOUGH\": {\n" + + " \"detail\": \"余额不足\",\n" + + " \"reason\": \"商户可用退款余额不足\",\n" + + " \"resolution\": \"此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。\"\n" + + " },\n" + + " \"INVALID_TRANSACTIONID\": {\n" + + " \"detail\": \"无效transaction_id\",\n" + + " \"reason\": \"请求参数未按指引进行填写\",\n" + + " \"resolution\": \"请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败\"\n" + + " },\n" + + " \"PARAM_ERROR\": {\n" + + " \"detail\": \"参数错误\",\n" + + " \"reason\": \"请求参数未按指引进行填写\",\n" + + " \"resolution\": \"请求参数错误,请重新检查再调用退款申请\"\n" + + " },\n" + + " \"APPID_NOT_EXIST\": {\n" + + " \"detail\": \"APPID不存在\",\n" + + " \"reason\": \"参数中缺少APPID\",\n" + + " \"resolution\": \"请检查APPID是否正确\"\n" + + " },\n" + + " \"MCHID_NOT_EXIST\": {\n" + + " \"detail\": \"MCHID不存在\",\n" + + " \"reason\": \"参数中缺少MCHID\",\n" + + " \"resolution\": \"请检查MCHID是否正确\"\n" + + " },\n" + + " \"REQUIRE_POST_METHOD\": {\n" + + " \"detail\": \"请使用post方法\",\n" + + " \"reason\": \"未使用post传递参数\",\n" + + " \"resolution\": \"请检查请求参数是否通过post方法提交\"\n" + + " },\n" + + " \"SIGNERROR\": {\n" + + " \"detail\": \"签名错误\",\n" + + " \"reason\": \"参数签名结果不正确\",\n" + + " \"resolution\": \"请检查签名参数和方法是否都符合签名算法要求\"\n" + + " },\n" + + " \"XML_FORMAT_ERROR\": {\n" + + " \"detail\": \"XML格式错误\",\n" + + " \"reason\": \"XML格式错误\",\n" + + " \"resolution\": \"请检查XML参数格式是否正确\"\n" + + " },\n" + + " \"FREQUENCY_LIMITED\": {\n" + + " \"detail\": \"频率限制\",\n" + + " \"reason\": \"2个月之前的订单申请退款有频率限制\",\n" + + " \"resolution\": \"该笔退款未受理,请降低频率后重试\"\n" + + " }\n" + + "}"); @Override public ResultData createRefundOrder(WxAppinfo appInfo, WxRefundOrder record, EnumPayWay payWay) { diff --git a/mallinkService/src/main/java/com/simple/utils/MapUtil.java b/mallinkService/src/main/java/com/simple/utils/MapUtil.java new file mode 100644 index 000000000..947f6fd05 --- /dev/null +++ b/mallinkService/src/main/java/com/simple/utils/MapUtil.java @@ -0,0 +1,22 @@ +package com.simple.utils; + +import java.util.Comparator; +import java.util.Map; +import java.util.TreeMap; + +public class MapUtil { + /** + * 获取带排序的Map + * @return + */ + public static Map getOrderMap() { + Map paramMap = new TreeMap( + new Comparator() { + public int compare(String obj1, String obj2) { + // 降序排序 + return obj1.compareTo(obj2); + } + }); + return paramMap; + } +} diff --git a/mallinkService/src/main/java/com/simple/utils/TJDCarUtil.java b/mallinkService/src/main/java/com/simple/utils/TJDCarUtil.java index c85e462eb..d3aa35b17 100644 --- a/mallinkService/src/main/java/com/simple/utils/TJDCarUtil.java +++ b/mallinkService/src/main/java/com/simple/utils/TJDCarUtil.java @@ -60,21 +60,6 @@ public class TJDCarUtil { */ } - /** - * 获取带排序的Map - * @return - */ - public static Map getOrderMap() { - Map paramMap = new TreeMap( - new Comparator() { - public int compare(String obj1, String obj2) { - // 降序排序 - return obj1.compareTo(obj2); - } - }); - return paramMap; - } - /** * md5算法 * @param data @@ -150,7 +135,7 @@ public class TJDCarUtil { String carNum, String carNumColor, String phone, String outCarId) { String service = "parkhub.car.register"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("carNum", carNum); paramMap.put("carNumColor", carNumColor); if (phone != null) { @@ -200,7 +185,7 @@ public class TJDCarUtil { String carId) { String service = "parkhub.car.writeOff"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("carId", carId); paramMap.put("charset", "utf-8"); paramMap.put("partner", partner); @@ -243,7 +228,7 @@ public class TJDCarUtil { String freeMins = "0"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("carNum", carNum); //paramMap.put("carNumColor", ""); //paramMap.put("pmParkId", ""); @@ -311,7 +296,7 @@ public class TJDCarUtil { // 为指定订单抵扣停车费,如果此时车辆已经出场,返回isSuccess错误码为3, // 停简单系统不再接收此笔抵扣信息,对方系统需要给用户发起退款(后续业务中无结算) String service = "parkhub.order.deductionNotSettle"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("tradeId", tradeId); paramMap.put("deductionAmount", deductionAmount); paramMap.put("outTradeNo", outTradeNo); @@ -360,7 +345,7 @@ public class TJDCarUtil { String tradeId, String outTicketNo, String accountId, String prePayType, String minutes, String memo) throws Exception { String service = "parkhub.ticket.bindTime"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("tradeId", tradeId); paramMap.put("outTicketNo", outTicketNo); paramMap.put("accountId", accountId); @@ -414,7 +399,7 @@ public class TJDCarUtil { String startDt, String EndDt, String expireDt, String memo) throws Exception { String service = "parkhub.ticket.bindPeriod"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("tradeId", tradeId); paramMap.put("outTicketNo", outTicketNo); paramMap.put("accountId", accountId); @@ -463,7 +448,7 @@ public class TJDCarUtil { String tradeId, String ticketid) throws Exception { String service = "parkhub.ticket.unbind"; - Map paramMap = getOrderMap(); + Map paramMap = MapUtil.getOrderMap(); paramMap.put("tradeId", tradeId); paramMap.put("ticketid", ticketid); paramMap.put("charset", "utf-8");