alipaysignature.rsacheckv1 返回false

本文解决支付宝支付中异步通知签名验证失败的问题,包括确认公钥正确性和调整代码逻辑。

最近在做支付宝支付对接遇到的问题,就是在支付宝交易完成异步通知的时候调用SDK验证签名无法验证通过,

两个问题需要注意,

1就是支付宝的公钥以及应用的公钥要搞清楚;

这个调用支付宝的公钥;

2就是如果确认无误,就是下面这行代码的问题,注释掉即可

然后就可以验证通过了,接下来就是实现你自己的业务逻辑了。

@Override public boolean updateByBo(FxWithdrawalRequestBo bo) { boolean update = false; LambdaUpdateWrapper fxWithdrawalRequestLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); fxWithdrawalRequestLambdaUpdateWrapper.eq(FxWithdrawalRequest::getUserId, bo.getUserId()); fxWithdrawalRequestLambdaUpdateWrapper.set(FxWithdrawalRequest::getStatus, bo.getStatus()); if (bo.getStatus() == 1) { bo.setAdminId(generateNo()); TransferRequest transferRequest = new TransferRequest(); // !!! 修正这里:传入正确的、已在系统中配置好的支付宝AppId !!! String correctAlipayAppId = "2021005185677740"; // 这个值应该从配置中心、数据库或常量中获取,而不是硬编码。 transferRequest.setAppId(correctAlipayAppId); transferRequest.setOutBizNo(bo.getRemark()); transferRequest.setTransAmount(bo.getAmount()); Participant payeeInfo = new Participant(); payeeInfo.setName(bo.getAlipayName()); payeeInfo.setIdentity(bo.getAlipayAccount()); transferRequest.setPayeeInfo(payeeInfo); // 调用转账接口 aliPayHandler.transferToAlipayAccount(transferRequest); System.out.println("+++=======+++++++" + transferRequest); update = baseMapper.update(fxWithdrawalRequestLambdaUpdateWrapper) > 0; } return update; } @SaIgnore @PostMapping(“/notify”) public String handleTransferNotify(HttpServletRequest request) { try { // 将异步通知中收到的所有参数存储到map中 Map<String, String> params = convertRequestParamsToMap(request); // 验证签名 boolean signVerified = AlipaySignature.rsaCheckV1( params, alipayConfig.getPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType()); if (!signVerified) { LogUtils.warn("支付宝异步通知签名验证失败"); return "failure"; } // 处理业务逻辑 String outBizNo = params.get("out_biz_no"); String status = params.get("status"); if ("SUCCESS".equals(status)) { LogUtils.info("转账成功: {}", outBizNo); // 更新数据库中的转账状态 } else { LogUtils.warn("转账失败: {}, 错误码: {}", outBizNo, params.get("sub_code")); // 处理失败逻辑 } return "success"; } catch (Exception e) { LogUtils.error("处理支付宝异步通知异常", e); return "failure"; } } @Override public boolean updateByBo(FxWithdrawalRequestBo bo) { boolean update = false; LambdaUpdateWrapper fxWithdrawalRequestLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); fxWithdrawalRequestLambdaUpdateWrapper.eq(FxWithdrawalRequest::getUserId, bo.getUserId()); fxWithdrawalRequestLambdaUpdateWrapper.set(FxWithdrawalRequest::getStatus, bo.getStatus()); if (bo.getStatus() == 1) { bo.setAdminId(generateNo()); TransferRequest transferRequest = new TransferRequest(); // !!! 修正这里:传入正确的、已在系统中配置好的支付宝AppId !!! String correctAlipayAppId = "2021005185677740"; // 这个值应该从配置中心、数据库或常量中获取,而不是硬编码。 transferRequest.setAppId(correctAlipayAppId); transferRequest.setOutBizNo(bo.getRemark()); transferRequest.setTransAmount(bo.getAmount()); Participant payeeInfo = new Participant(); payeeInfo.setName(bo.getAlipayName()); payeeInfo.setIdentity(bo.getAlipayAccount()); transferRequest.setPayeeInfo(payeeInfo); // 调用转账接口 aliPayHandler.transferToAlipayAccount(transferRequest); System.out.println("+++=======+++++++" + transferRequest); update = baseMapper.update(fxWithdrawalRequestLambdaUpdateWrapper) > 0; } return update; } http://127.0.0.1:5500/alipay/transfer {“outBizNo”:“f0d2de4f7c104bd3a9383f050dbdd1c17565396598846”, “amount”: “0.11”, “payeeAccount”: “15184747836”, “payeeRealName”: “张雲龙”, “orderTitle”: “ceshi2”, “remark”: “test” } CREATE TABLE fx_withdrawal_request ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’, user_id bigint(20) unsigned NOT NULL COMMENT ‘用户id’, amount decimal(10,2) DEFAULT NULL COMMENT ‘提现金额’, alipay_account varchar(100) NOT NULL COMMENT ‘支付宝账号’, alipay_name varchar(50) NOT NULL COMMENT ‘支付宝实名’, status tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘状态: 0待审核, 1已打款, 2已拒绝’, admin_id varchar(60) DEFAULT NULL COMMENT ‘支付宝转账订单号’, remark varchar(60) DEFAULT NULL COMMENT ‘支付宝转账唯一业务编号’, is_delete tinyint(1) DEFAULT ‘0’ COMMENT ‘是否删除(0-否,1-是)’, create_time datetime DEFAULT NULL COMMENT ‘创建时间’, update_time datetime DEFAULT NULL COMMENT ‘更新时间’, delete_time int(10) unsigned DEFAULT ‘0’ COMMENT ‘删除时间’, tenant_id varchar(20) DEFAULT ‘000000’ COMMENT ‘租户ID’, create_dept bigint(20) DEFAULT NULL COMMENT ‘创建部门’, create_by bigint(20) DEFAULT NULL COMMENT ‘创建人’, update_by bigint(20) DEFAULT NULL COMMENT ‘更新人’, PRIMARY KEY (id) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1962464194940416002 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT=‘用户提现申请表’; 1961695655056982017 1957344311131049985 0.10 15184747836 张雲龙 0 f0d2de4f7c104bd3a9383f050dbdd1c1756539665373 0 2025-08-30 15:41:05 2025-09-03 11:47:11 0 000000 100 1957344311131049985 1 给我依据数据库和postman的提交测试值进行完善,“orderTitle”: “ceshi2”,这个是固定值为“三鉴转账”, “remark”: “test”,理由也是固定为“申请提现” 完善
最新发布
09-07
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值