diff --git a/src/main/java/com/sqx/modules/pay/controller/app/ApiWeiXinPayController.java b/src/main/java/com/sqx/modules/pay/controller/app/ApiWeiXinPayController.java index 0f0e234..babaa8e 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/ApiWeiXinPayController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/ApiWeiXinPayController.java @@ -154,7 +154,8 @@ public class ApiWeiXinPayController { out = resp.getWriter(); out.write(result); } catch (Exception e) { - log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}", e.getMessage()); + log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}, {}", e.getMessage()); + e.printStackTrace(); } finally { if(out != null){ out.flush(); @@ -207,6 +208,7 @@ public class ApiWeiXinPayController { out.write(result); } catch (Exception e) { log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}", e.getMessage()); + e.printStackTrace(); } finally { out.flush(); out.close(); diff --git a/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java index 8f91d2e..4468c2c 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java @@ -140,6 +140,7 @@ public class WxServiceImpl implements WxService { payDetails.setState(0); payDetails.setCreateTime(sdf.format(new Date())); payDetails.setOrderId(bean.getOrdersNo()); + payDetails.setOutTradeNo(bean.getOrdersNo()); payDetails.setUserId(bean.getUserId()); payDetails.setMoney(bean.getPayMoney().doubleValue()); payDetails.setClassify(classify); @@ -819,6 +820,8 @@ public class WxServiceImpl implements WxService { // 注意特殊情况:微信服务端同样的通知可能会多次发送给商户系统,所以数据持久化之前需要检查是否已经处理过了,处理了直接返回成功标志 //业务数据持久化 PayDetails payDetails = payDetailsDao.selectOne(new QueryWrapper().lambda().eq(PayDetails::getOutTradeNo, out_trade_no)); + if(payDetails == null) + payDetails = payDetailsDao.selectOne(new QueryWrapper().lambda().isNull(PayDetails::getOutTradeNo).eq(PayDetails::getOrderId, out_trade_no)); if (payDetails.getState() == 0) { payDetails.setState(1); payDetails.setPayTime(DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN)); @@ -1084,26 +1087,25 @@ public class WxServiceImpl implements WxService { } private boolean icbcCheckSign(Map reqParams, String path) { - return true; -// Map params = new HashMap<>(); -// String sign = reqParams.get("sign"); -// params.put("from", reqParams.get("from")); -// params.put("api", reqParams.get("api")); -// params.put("app_id", reqParams.get("app_id")); -// params.put("charset", reqParams.get("charset")); -// params.put("format", reqParams.get("format")); -// params.put("timestamp", reqParams.get("timestamp")); -// params.put("biz_content", reqParams.get("biz_content")); -// //目前上行网关签名暂时仅支持RSA -// params.put("sign_type", reqParams.get("sign_type")); -// -// String signStr= WebUtils.buildOrderedSignStr(path, params); -// try { -// //注意:此次用的是RSA,和下单时不一样 -// return IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.get("charset"), sign); -// } catch (IcbcApiException e) { -// return false; -// } + Map params = new HashMap<>(); + String sign = reqParams.get("sign"); + params.put("from", reqParams.get("from")); + params.put("api", reqParams.get("api")); + params.put("app_id", reqParams.get("app_id")); + params.put("charset", reqParams.get("charset")); + params.put("format", reqParams.get("format")); + params.put("timestamp", reqParams.get("timestamp")); + params.put("biz_content", reqParams.get("biz_content")); + //目前上行网关签名暂时仅支持RSA + params.put("sign_type", reqParams.get("sign_type")); + + String signStr= WebUtils.buildOrderedSignStr(path, params); + try { + //注意:此次用的是RSA,和下单时不一样 + return IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.get("charset"), sign); + } catch (IcbcApiException e) { + return false; + } } public String getGeneralOrder() { @@ -1246,29 +1248,29 @@ public class WxServiceImpl implements WxService { } public static void main(String[] args) throws IcbcApiException { - String notifyUrl = (true ? "/sqx_fast/app/wxPay/notifyJsApi" : "/sqx_fast/app/wxPay/notifyJsApiShop"); - - String jsonStr = "{\"api\":\"/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1\",\"app_id\":\"11000000000000051225\",\"biz_content\":\"{\\\"access_type\\\":\\\"9\\\",\\\"attach\\\":\\\"\\\",\\\"bank_disc_amt\\\":\\\"0\\\",\\\"card_flag\\\":\\\"\\\",\\\"card_kind\\\":\\\"\\\",\\\"card_no\\\":\\\"\\\",\\\"coupon_amt\\\":\\\"0\\\",\\\"cust_id\\\":\\\"\\\",\\\"decr_flag\\\":\\\"\\\",\\\"ecoupon_amt\\\":\\\"0\\\",\\\"mer_disc_amt\\\":\\\"0\\\",\\\"mer_id\\\":\\\"150537540003\\\",\\\"msg_id\\\":\\\"050200155087883006188152791\\\",\\\"open_id\\\":\\\"ow8NuxGas0u7FrZkg-DWi-F1ABwM\\\",\\\"order_id\\\":\\\"150537540003000522503280002157\\\",\\\"out_trade_no\\\":\\\"1000001823360698\\\",\\\"pay_time\\\":\\\"20250328150403\\\",\\\"pay_type\\\":\\\"9\\\",\\\"payment_amt\\\":\\\"10\\\",\\\"point_amt\\\":\\\"0\\\",\\\"return_code\\\":\\\"0\\\",\\\"return_msg\\\":\\\"交易成功\\\",\\\"third_party_coupon_amt\\\":\\\"0\\\",\\\"third_party_discount_amt\\\":\\\"0\\\",\\\"third_trade_no\\\":\\\"4200002667202503283423055973\\\",\\\"total_amt\\\":\\\"10\\\",\\\"total_disc_amt\\\":\\\"0\\\"}\",\"charset\":\"UTF-8\",\"format\":\"json\",\"from\":\"icbc-api\",\"sign\":\"H1wXn/2399BQr3FOpbqdGkNCpiSbi3njGdXsWV5x8nGEzMR+CTuO8ynB+KbsVivmeHX3UERZe0Z1mAtwibIZsJ1S7Li3Hl+XwdjHbBDi7Nkpj/ZHN0iEY7NK4X+b87ZuA2edXjr5Fo2btj7yjPNwr9c5C0C7madncHRziWidjFg=\",\"sign_type\":\"RSA\",\"timestamp\":\"2025-03-28 15:05:56\"}"; - JSONObject reqParams = JSONObject.parseObject(jsonStr); -// System.out.println(jsonObject.getJSONObject("biz_content")); - Map params = new HashMap<>(); - String sign = reqParams.getString("sign"); - params.put("from", reqParams.getString("from")); - params.put("api", reqParams.getString("api")); - params.put("app_id", reqParams.getString("app_id")); - params.put("charset", reqParams.getString("charset")); - params.put("format", reqParams.getString("format")); - params.put("timestamp", reqParams.getString("timestamp")); - params.put("biz_content", reqParams.getString("biz_content")); -// //目前上行网关签名暂时仅支持RSA - params.put("sign_type", reqParams.getString("sign_type")); - - System.out.println(params); +// String notifyUrl = (true ? "/sqx_fast/app/wxPay/notifyJsApi" : "/sqx_fast/app/wxPay/notifyJsApiShop"); // - String signStr= WebUtils.buildOrderedSignStr(notifyUrl, params); - System.out.println(signStr); - Boolean flag = IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.getString("charset"), sign); - System.out.println(flag); - +// String jsonStr = "{\"api\":\"/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1\",\"app_id\":\"11000000000000051225\",\"biz_content\":\"{\\\"access_type\\\":\\\"9\\\",\\\"attach\\\":\\\"\\\",\\\"bank_disc_amt\\\":\\\"0\\\",\\\"card_flag\\\":\\\"\\\",\\\"card_kind\\\":\\\"\\\",\\\"card_no\\\":\\\"\\\",\\\"coupon_amt\\\":\\\"0\\\",\\\"cust_id\\\":\\\"\\\",\\\"decr_flag\\\":\\\"\\\",\\\"ecoupon_amt\\\":\\\"0\\\",\\\"mer_disc_amt\\\":\\\"0\\\",\\\"mer_id\\\":\\\"150537540003\\\",\\\"msg_id\\\":\\\"050200155087883006188152791\\\",\\\"open_id\\\":\\\"ow8NuxGas0u7FrZkg-DWi-F1ABwM\\\",\\\"order_id\\\":\\\"150537540003000522503280002157\\\",\\\"out_trade_no\\\":\\\"1000001823360698\\\",\\\"pay_time\\\":\\\"20250328150403\\\",\\\"pay_type\\\":\\\"9\\\",\\\"payment_amt\\\":\\\"10\\\",\\\"point_amt\\\":\\\"0\\\",\\\"return_code\\\":\\\"0\\\",\\\"return_msg\\\":\\\"交易成功\\\",\\\"third_party_coupon_amt\\\":\\\"0\\\",\\\"third_party_discount_amt\\\":\\\"0\\\",\\\"third_trade_no\\\":\\\"4200002667202503283423055973\\\",\\\"total_amt\\\":\\\"10\\\",\\\"total_disc_amt\\\":\\\"0\\\"}\",\"charset\":\"UTF-8\",\"format\":\"json\",\"from\":\"icbc-api\",\"sign\":\"H1wXn/2399BQr3FOpbqdGkNCpiSbi3njGdXsWV5x8nGEzMR+CTuO8ynB+KbsVivmeHX3UERZe0Z1mAtwibIZsJ1S7Li3Hl+XwdjHbBDi7Nkpj/ZHN0iEY7NK4X+b87ZuA2edXjr5Fo2btj7yjPNwr9c5C0C7madncHRziWidjFg=\",\"sign_type\":\"RSA\",\"timestamp\":\"2025-03-28 15:05:56\"}"; +// JSONObject reqParams = JSONObject.parseObject(jsonStr); +//// System.out.println(jsonObject.getJSONObject("biz_content")); +// Map params = new HashMap<>(); +// String sign = reqParams.getString("sign"); +// params.put("from", reqParams.getString("from")); +// params.put("api", reqParams.getString("api")); +// params.put("app_id", reqParams.getString("app_id")); +// params.put("charset", reqParams.getString("charset")); +// params.put("format", reqParams.getString("format")); +// params.put("timestamp", reqParams.getString("timestamp")); +// params.put("biz_content", reqParams.getString("biz_content")); +//// //目前上行网关签名暂时仅支持RSA +// params.put("sign_type", reqParams.getString("sign_type")); +// +// System.out.println(params); +//// +// String signStr= WebUtils.buildOrderedSignStr(notifyUrl, params); +// System.out.println(signStr); +// Boolean flag = IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.getString("charset"), sign); +// System.out.println(flag); + System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } } \ No newline at end of file