This commit is contained in:
彭勇平 2025-04-23 18:06:52 +08:00
parent cbfed2e429
commit 00a190ce31
2 changed files with 48 additions and 44 deletions

View file

@ -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();

View file

@ -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<PayDetails>().lambda().eq(PayDetails::getOutTradeNo, out_trade_no));
if(payDetails == null)
payDetails = payDetailsDao.selectOne(new QueryWrapper<PayDetails>().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<String, String> reqParams, String path) {
return true;
// Map<String, String> 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<String, String> 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<String, String> 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<String, String> 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()));
}
}