1 微信支付的坑
1.1 不能用前端传递过来的金额
订单的商品金额要从数据库获取,前端只传商品 id。
1.2 交易类型trade type字段不要传错
v2版API,不同交易类型,要调用的支付方式也不同。
1.3 二次签名
下单时,在拿到预支付交易会话标识时,要进行二次签名操作。二次签名后的值,才能返回给前端使用。
1.4 小程序可绑定到其它公司的商户下
可同时关联到多个商户号:
1.5 微信支付的单位是分,最小金额是0.01元
支付宝是元。
1.6 做避免重复消费的处理
处理成功之后不要再进行二次处理了,那首先是有事务操作。
第一次处理成功后,需要更新对应订单的状态。更新完成后,下次再处理时,直接返回成功,不再进行实际业务处理。
也可以拿这个订单号加分布式锁,保证对同一个用户,同时只能处理一个订单。
1.7 支付结果验签
对支付结果通知,一定要拿配置的私钥进行验签处理。
// 处理内部业务逻辑
try {
// 支付结果验签
boolean valid = WXPayUtil.isSignatureValid(map1, weixinpaypartner);
if (valid == false) {
log.info("签名不一致" + outTradeNo);
return "ERROR";
} else {
//1、更新订单状态
dealAfterSuccess(basOrder, time_end, transaction_id, result_code);
log.info("验签成功" + outTradeNo);
result = CommUtils.setXml("SUCCESS", "OK");
log.info("收到异步通知返回微信的内容--" + result);
return result;
}
} catch (Exception e) {
e.printStackTrace();
return "ERROR";
}
不验签也可以继续执行,但支付结果页容易被伪造哦!
1.8 对支付结果通知处理逻辑中的非事务性操作做操作记录
可能在支付通知后,通过小程序给用户发送模板消息通知或公众号消息通知触达。若这时事务处理失败,但结果发送成功了,会造成啥结果?那你下次是否要重新处理这个订单流程,在重新处理订单时难道再发一次推送吗?肯定不可以。
所以最好拿订单号作为标识,判断记录这个订单是否已经有过啥事务性、非事务性操作,下次或者是订单补偿时,就只处理事务性操作,不再处理非事务性操作。
1.9 v2的统一下单的接口
服务号、H5下单和小程序下单都可调用,甚至app下单都可以调用。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
- 大数据开发挖掘经验
- 推荐系统项目
目前主攻市级软件项目设计、构建服务全社会的应用系统。
参考:
本文由博客一文多发平台 OpenWrite 发布!
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容