近期所参与的商城项目在上线后遇到了这样一个问题:

业务背景是这样的:用户在商城下单后,选择使用微信支付(注意,我们系统的逻辑是客户下单选择支付方式后,后台直接会在第三方支付平台下订单,唤起第三方支付)。客户和客服经过沟通,客服需要对该订单进行改价后用户再行支付。但是修改订单金额后,客户再去支付时,弹出上图提示。

产生该问题时,我还不清楚客户和客服之间进行了这么一波砍价的骚操作,然后修改了订单金额(不过微信支付这个错误提醒也是真心坑爹,实际问题是同一个订单号在金额不变的情况下可以多次下单,同一个订单号在金额变了的情况下就会报错)。当时排查时按照正常流程测试微信支付是ok的,但就是这个客户的订单有问题。后来通过与客服的沟通才了解到他们对订单进行了改价操作。这个问题在支付宝支付中不存在(不得不承阿里的技术是真的强大,没有对比就没有伤害。当时对接微信支付和阿里支付时就可以看出来,支付宝demo拉下来很容易就对接成功了,微信支付的各种配置简直让人绝望,各种文档和demo不匹配等等问题,说多了都是泪)。

因此,对微信支付这个问题,要重新调整整个系统的支付流程。老规矩,还是先在网上看看有没有前辈有什么好的处理方案。

参考:开源中国问答

里面的几位老哥说的挺有道理的,最终我选择采用解耦支付和订单的方案(当初在开发系统时,已经对订单和支付进行了解耦,熟悉的开发都会明白,支付不单单只针对订单。支付模块解耦出来可以在很多地方复用),让系统中支付单和订单的对应关系由1:1变为N:1。

但是这样会引入一些新的问题:

1.重复支付。这个想必各位读者都能想到如何在支付流程中避免。

2.用户不刷新订单就支付的问题。这真的是个比较大的问题,做程序员应该都深有体会,用户是一个你永远不知道他会如何操作的群体。我们只能努力提高自己代码的健壮性,以应对各种情况。上面提到过,为了支付单的复用性,唤起第三方支付所用的标识是支付单号。因此,用户在不刷新订单的情况下继续支付,会支付老的支付单(各位同僚可以想象一下这种情况会导致什么后果,嘿嘿嘿)。所以支付接口中需要增加校验当前支付单是否是订单所关联的支付单(我们系统中订单有一个支付单号字段),如果校验不成功,就提示用户“请刷新订单后再支付”。

以上就是微信支付订单改价的采坑实录,希望对有疑问的朋友能有所帮助。

第三方支付订单修改金额的踩坑经历相关推荐

  1. 记一次成功把Vue2后台项目改造成Vite2的踩坑经历

    文章目录 前言 一.项目背景 1.1.为什么要选择Vite 二.迁移前的准备 2.1.补全.vue后缀 2.2.移动public/index.html的位置 2.2.1.通过vite-plugin-h ...

  2. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  3. GPCC安装以及踩坑经历

    gpcc安装以及踩坑经历 官方下载地址文档 https://network.pivotal.io/products/pivotal-gpdb#/releases/29190 安装开始之前 chown ...

  4. 一次kvm嵌套虚拟化踩坑经历

    女主宣言 嵌套虚拟化就是虚拟化环境里再次进行虚拟化,简单的说就是虚拟机里运行虚拟机,听起来有点递归的感觉.那是不是可以无限嵌套下去呢?递归有终结条件,否则无限递归下去资源耗尽,嵌套虚拟化嵌套层次越深复 ...

  5. springCloud项目不能向EurekaServer 注册多个EurekaClient时(端口不一致)方法及踩坑经历

    spring cloud 问题说明:springCloud项目不能向EurekaServer 注册多个EurekaClient时(端口不一致)方法及踩坑经历: 前提--->已经能够通过Eurek ...

  6. uniapp 引入阿里矢量图标库的详细步骤及踩坑经历

    uniapp 引入阿里矢量图标库的详细步骤及踩坑经历 首先在阿里矢量图标库选择自己喜欢的图标 加购物车如下图 点击右上角的购物车 添加到项目 这里有坑 首先你不选中在线链接 你是看不到 @font-f ...

  7. yolov5-4.0环境搭建,零基础小白都能看得懂的教程。YOLOv5搭建的最快搭建方式,踩坑经历详谈)yolov5/yolov4/yolov3/yolov3通>>>>>>>>>>>>>>>>>第一章

    第一章:python最新YOLOv5-4.0环境搭建,零基础小白都能看得懂的教程.YOLOv5搭建的最快搭建方式,踩坑经历详谈 环境准备: yolov5-4.0环境搭建整体说明 2,anaconda的 ...

  8. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历

    2013年给1个大学的小客户部署过一个小型的Asp.NET网站,非常小,用的sqlite数据库,今年人家说要换台服务器,要重新部署一下,好吧,虽然早就过了服务时间,但无奈谁叫人家是客户了,二话不说,上 ...

  9. 从零开始搞起 Disney BRDF源码编译(含踩坑经历)

    前情背景资料: 项目在Github上的源码地址:BRDF 1. 读官网的readme介绍 readme 里介绍了编译方式: How to compile BRDF Explorer for Windo ...

  10. 一次关于 Dubbo 服务 IP 注册错误的踩坑经历

    大家好,我是鸭血粉丝,一位经常踩坑的程序员.今天我给大家说一下我踩的 Dubbo 的坑.所谓 bug 如风,常伴吾身,hasaki ~ 这不最近又遇到个问题,Dubbo 服务 IP 注册错误,好了,下 ...

最新文章

  1. leetcode题解236-二叉树的最近公共祖先
  2. mvc创建连接mysql_五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
  3. 2012年托福听力真题词汇总结
  4. 大学生应该懂得。。。葡萄酒知识
  5. java中innerhtml_js中innerHTML与innerText的用法与区别 | 学步园
  6. python大鱼吃小鱼程序代码_写一个小游戏程序(大鱼吃小鱼)
  7. element中的横线,element的tab,下划线不显示的问题
  8. PHP_微信小程序(2)
  9. Qt例子学习笔记 - Examples/Qt-6.2.0/charts/callout
  10. 须知!在职考研10个复习经验分享!
  11. SM敏捷实践经验总结
  12. 主机开机主板cpu灯和dram灯轮流亮的问题解决
  13. cuDNN免官网创建账户登陆迅雷下载网址
  14. 物理隔离与数据交换-网闸的设计原理
  15. el-input输入字母转化大写字母
  16. 未来计算机的应用方向,计算机应用现状及未来方向
  17. 合肥火车站为乌鲁木齐疼痛男孩开辟绿色通道
  18. WORD分栏后左右都能编辑
  19. mysql从库有张表不同步_mysql主从数据库不同步的2种解决方法
  20. 在线测试屏幕软件康佳,硬件配置强大 不是说说而已

热门文章

  1. 华硕重装后进入bios_华硕笔记本重装系统后直接进入bios,怎么处理
  2. 【洛谷八连测R5】whzzt-Warmth
  3. 麦森数 OpenJ_Bailian - 2706
  4. idea 查看源码 /* compiled code*/
  5. android+os+1.5,Remix OS 1.5操作系统正式上线
  6. 【绘图】python 配色表
  7. Python数据可视化Part 5-Matplotlib 3D图片与投影教学-代码详解
  8. c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...
  9. 2021-2026年中国畜牧业发展环境分析及投资前景预测报告
  10. 桌面运维之CMD命令