一、问题描述
        微信小游戏的内购支付,接入的是米大师支付。先简单介绍下通用逻辑:

1)、用户点击游戏内下单

2)、客户端构造订单物品等参数并发给服务端

3)、服务端接收后,生成唯一订单号等内部逻辑处理后,返回客户端下单需要的参数

4)、客户端调用微信下单接口,wx.requestMidasPayment(Object object) | 微信开放文档,并将结果上报给服务端

5)、服务端根据客户端的支付上报结果,分时轮询对应订单的用户余额

6)、对用户余额进行扣款,并修改对应订单状态

7)、通知游戏服务端订单状态,并发货给用户

初看,逻辑很清晰,没啥问题,但是第4步经常会返回错误的结果(客户端),比如没有返回(比较多出现)或者说用户支付了但返回支付失败(相对比较少)。这样就导致部分用户支付后没有得到应有的物品,掉单。

二、旧解决方案

1)通过上面问题描述,知道靠客户端返回的结果不可靠,那为了用户不掉单,就只能自己想办法了,曲线救国。首先就是服务端不依赖于客户端的返回结果才去请求验证用户余额,或者说没收到返回的时候依然去请求验证用户余额(失败的如果压力不大,订单少也可以请求验证,成)。这样就保证了订单都有轮询到去验证。这样虽然解决了掉单问题,但是衍生出了新的麻烦。

2) 麻烦就是,所有订单都轮询了,这样就包含很多用户实际没支付的订单,这样就容易出现串单问题了。串单原因就是,微信是通过用户查询余额的,并没有订单啥事。那假如用户查询到余额有12块钱,用户有两笔6块和一笔12块的订单。那查询到的这12块钱,到底算2笔6块身上,还是12块订单身上呢。要知道用户支付到轮询结果是有时间差的,并不是即时结果。这样甚至会出现先扣了小金额的,比如先扣了1笔6块,后面的12块订单也不够余额扣款了。

3)为了减少串单问题,之前我们这边的做法就是如果余额不等于订单金额,就先记录下来,等用户所有订单查询完,再先扣大金额订单后扣小金额订单。这样虽然能减少部分串单情况,但依然没彻底解决问题,偶尔也会跑出一两笔串单的,这时候就得手动折腾处理了,很是麻烦

4)这个问题由来已久,最开始18年接入时候询问的,至今没找到啥好办法,一度怀疑是只有我们遇到而已

小游戏米大师支付串单 | 微信开放社区

三、新方案

1)串单解决思路,就是无法确定哪笔订单是有实际支付的,以前一直停留在这个思路上,一直没找到合适方案。后面经同事提醒转变了思路,不能区分订单,就区分订单金额,手动给订单区分,比如6块钱的一类,12块钱的一类,这样至少6块不会串到12块的来,就是剩下可能的串单也是同金额的串,就问题不大了。

2)重新查看【wx.requestMidasPayment(Object object) | 微信开放文档】这个接口说明,看到里面有一个zoneId分区的参数,我们的解决方式就通过这个参数。我们先按照游戏内可能的金额挡位配置分区,或者将微信里面所有挡位都配置上。然后用户下单请求接口的时候,根据订单金额,带上对应的分区。这样相当于用户钱包人为区分成多个小钱包,每个小钱包对应不同的订金额,6块的就只去6块的钱包查询余额,如此就解决了不同金额串单的问题了。

微信小游戏内购米大师支付,不同金额创单问题处理相关推荐

  1. 全面了解H5重要入口“微信小游戏”,LayaAir引擎支持一键发布!

    12月28日,微信小游戏在6.6.1的版本中上线.通过微信小程序入口的微信小游戏平台,可以看到首批推出的15款游戏产品,其中4款采用LayaAir引擎开发,通过Layabox提供的小程序适配库一键发布 ...

  2. layaair发布html5,全面了解H5微信小游戏 LayaAir引擎支持一键发布

    12月28日,微信小游戏在6.6.1的版本中上线.通过微信小程序入口的微信小游戏平台,可以看到首批推出的15款游戏产品,其中4款采用LayaAir引擎开发,通过Layabox提供的小程序适配库一键发布 ...

  3. 微信小游戏转发、分享等功能实现

    本文将介绍开发微信小游戏四种常用功能的实现方法,这四种功能分别是: **获取头像功能 微信转发功能 微信分享功能 游戏圈** 在Egret Wing和微信开发者工具里的配置 为实现以上四个功能,我们需 ...

  4. 微信小游戏本地解析二维码

    最近公司需要在为微信小游戏内解析一个二维码,从而获取二维码的数据来做相关处理,但是二维码处理方面,小游戏是不支持,为了开发只能自己来解决这个问题.解决方案有两种,第一种是将二维码上传到服务器,后台解析 ...

  5. Cocos Creator发布微信小游戏包内体积过大问题

    1.初识 设置微信开发工具和js编辑器 3.5.2 :Cocos Creator perferences 2.Cocos Creator发布微信小游戏包内体积过大问题 2.1 已不可取:搭建本机服务器 ...

  6. 微信小游戏虚拟支付{“errcode“:40013,“errmsg“:“invalid appid rid: xxxxxxxxxxxx“}报错

    问题情况 最近在接入微信小游戏虚拟支付的时候,遇到一个很容易让人误解的40013错误,记录一下. 出现问题的原因 第一种情况:就是微信的appid弄错了,这个问题很容易解决,我确认了很多次appid是 ...

  7. 微信小游戏API (doing)

    微信小游戏API (doing) 1. 登录 wx.login({success: function(response) {if (response.code) {wx.request({url: ' ...

  8. 帧同步_微信小游戏接入“熊孩子噩梦”健康系统 帧同步能力上线

    3月31日,微信小游戏官方公众号"做个小游戏"发文宣布全新面向未成年人保护的健康系统已经上线,该系统联动"成长守护平台"的功能,可以更好助力家长群体对于未成年人 ...

  9. 微信小游戏凭什么拿走开发者 70% 的日流水?

    作者 | 屠   敏 责编 | 唐小引 一年多前,张小龙在微信公开课 PRO 上正式宣布小程序的到来,彼时大批的创业者开始在 O2O 服务.电商.制作平台.周边服务等运营模式中探索小程序的红利场景.经 ...

最新文章

  1. C语言如何实现随机打印24个母,菜鸟求助,写一个随机输出26个英文字母的程序...
  2. git show查看本地文件的修改部分,git diff 如何比较文件,git grep 搜索
  3. 设计模式 - 创建型模式_ 单例模式 Singleton Pattern
  4. 【转:SAP学习篇】Fiori 的开发工具
  5. 第四章:手机平板要兼顾-探究碎片
  6. oracle9i解密rewrap,oracle 9i 的加密解密用法之dbms_obfuscation_toolkit(一)
  7. java重绘table_java – 与JTable交互,使用新行快速更新
  8. log4j slf4j实现_日志那点事儿——slf4j源码剖析
  9. Jmeter新手频犯错误之一(登录)
  10. android冻结命令,在Android上使用冻结tensorflow图中的变量
  11. 深入内核:Oracle数据提交与事务隔离的深度解析
  12. 【英语天天读】Develop Your Own Helping Rituals
  13. windows开启远程桌面命令
  14. UNIX环境高级编程
  15. 电子沙盘 数字沙盘 开发教程
  16. Tornado使用模板
  17. 肿瘤异质性:精准医学需要解决的难题
  18. 象棋( Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589)
  19. SLG变现强劲,却易遭黑产侵袭,如何破局?SLG游戏安全方案定制做到出奇制胜!
  20. Helm 创建一个NOTES.txt文件

热门文章

  1. 为什么酒店业需要背景调查
  2. LeetCode+剑指 链表相关
  3. 罗斯蒙特变送器怎么恢复出厂设置?
  4. RK3588平台开发系列讲解(系统篇)A/B System的介绍
  5. 大数据让商家“很懂你”
  6. 机器人恶意刷接口?加个验证码几分钟搞定!
  7. RFA-Net: Residual feature attention network for fine-grained image inpainting 论文阅读笔记
  8. celery变量共享
  9. hive 重启后台hive服务
  10. C# 调用系统声音 嘀~