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 = resp.getWriter();
out.write(result); out.write(result);
} catch (Exception e) { } catch (Exception e) {
log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}", e.getMessage()); log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}, {}", e.getMessage());
e.printStackTrace();
} finally { } finally {
if(out != null){ if(out != null){
out.flush(); out.flush();
@ -207,6 +208,7 @@ public class ApiWeiXinPayController {
out.write(result); out.write(result);
} catch (Exception e) { } catch (Exception e) {
log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}", e.getMessage()); log.error("【工商银行】微信支付回调处理失败,请检查原因!!!,{}", e.getMessage());
e.printStackTrace();
} finally { } finally {
out.flush(); out.flush();
out.close(); out.close();

View file

@ -140,6 +140,7 @@ public class WxServiceImpl implements WxService {
payDetails.setState(0); payDetails.setState(0);
payDetails.setCreateTime(sdf.format(new Date())); payDetails.setCreateTime(sdf.format(new Date()));
payDetails.setOrderId(bean.getOrdersNo()); payDetails.setOrderId(bean.getOrdersNo());
payDetails.setOutTradeNo(bean.getOrdersNo());
payDetails.setUserId(bean.getUserId()); payDetails.setUserId(bean.getUserId());
payDetails.setMoney(bean.getPayMoney().doubleValue()); payDetails.setMoney(bean.getPayMoney().doubleValue());
payDetails.setClassify(classify); 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)); 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) { if (payDetails.getState() == 0) {
payDetails.setState(1); payDetails.setState(1);
payDetails.setPayTime(DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN)); 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) { private boolean icbcCheckSign(Map<String, String> reqParams, String path) {
return true; Map<String, String> params = new HashMap<>();
// Map<String, String> params = new HashMap<>(); String sign = reqParams.get("sign");
// String sign = reqParams.get("sign"); params.put("from", reqParams.get("from"));
// params.put("from", reqParams.get("from")); params.put("api", reqParams.get("api"));
// params.put("api", reqParams.get("api")); params.put("app_id", reqParams.get("app_id"));
// params.put("app_id", reqParams.get("app_id")); params.put("charset", reqParams.get("charset"));
// params.put("charset", reqParams.get("charset")); params.put("format", reqParams.get("format"));
// params.put("format", reqParams.get("format")); params.put("timestamp", reqParams.get("timestamp"));
// params.put("timestamp", reqParams.get("timestamp")); params.put("biz_content", reqParams.get("biz_content"));
// params.put("biz_content", reqParams.get("biz_content")); //目前上行网关签名暂时仅支持RSA
// //目前上行网关签名暂时仅支持RSA params.put("sign_type", reqParams.get("sign_type"));
// params.put("sign_type", reqParams.get("sign_type"));
// String signStr= WebUtils.buildOrderedSignStr(path, params);
// String signStr= WebUtils.buildOrderedSignStr(path, params); try {
// try { //注意此次用的是RSA和下单时不一样
// //注意此次用的是RSA和下单时不一样 return IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.get("charset"), sign);
// return IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.get("charset"), sign); } catch (IcbcApiException e) {
// } catch (IcbcApiException e) { return false;
// return false; }
// }
} }
public String getGeneralOrder() { public String getGeneralOrder() {
@ -1246,29 +1248,29 @@ public class WxServiceImpl implements WxService {
} }
public static void main(String[] args) throws IcbcApiException { public static void main(String[] args) throws IcbcApiException {
String notifyUrl = (true ? "/sqx_fast/app/wxPay/notifyJsApi" : "/sqx_fast/app/wxPay/notifyJsApiShop"); // 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 signStr= WebUtils.buildOrderedSignStr(notifyUrl, params); // 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\"}";
System.out.println(signStr); // JSONObject reqParams = JSONObject.parseObject(jsonStr);
Boolean flag = IcbcSignature.verify(signStr, IcbcConstants.SIGN_TYPE_RSA, APIGW_PUBLIC_KEY, reqParams.getString("charset"), sign); //// System.out.println(jsonObject.getJSONObject("biz_content"));
System.out.println(flag); // 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()));
} }
} }