当前位置: 首页 > news >正文

微信支付开发避坑指南

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 发布!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • uboot 常用命令汇总
  • 6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)
  • ROS2 Nav2 - 模型预测路径积分控制器(MPPI)
  • 华为手机找不到wifi调试?不急,没有wifi调试一样可以进行局域网模式调试
  • 基于单片机的人脸识别的智能门禁系统设计
  • 小而强大!零一万物 Yi-Coder 模型震撼发布!
  • three.js使用3DTilesRendererJS加载3d tiles数据
  • 传统CV算法——基于 SIFT 特征点检测与匹配实现全景图像拼接
  • C++:入门篇(补充C语言中的不足)
  • TestCraft - GPT支持的测试想法生成器和自动化测试生成器
  • 【论文阅读】01-Survey on Temporal Knowledge Graph
  • PhpStorm 下调试功能配置
  • 粉丝+1,马斯克点赞《黑神话:悟空》
  • PHP一站式解决方案高级房产系统小程序源码
  • 【在Unity完成三维场景多人在线同时操作的实现方式】
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • golang中接口赋值与方法集
  • Swoft 源码剖析 - 代码自动更新机制
  • windows下如何用phpstorm同步测试服务器
  • 阿里云应用高可用服务公测发布
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 工作中总结前端开发流程--vue项目
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 十年未变!安全,谁之责?(下)
  • 什么是Javascript函数节流?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用parted解决大于2T的磁盘分区
  • 因为阿里,他们成了“杭漂”
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​2020 年大前端技术趋势解读
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • %check_box% in rails :coditions={:has_many , :through}
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (苍穹外卖)day03菜品管理
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .net core 6 redis操作类
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net 怎么循环得到数组里的值_关于js数组
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @Autowired和@Resource的区别
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BZOJ 3282] Tree 【LCT】