华为支付回调developerPayLoad字段与传入时不一致导致发货异常

问题描述

我们游戏应用接入了华为IAP,在海外支付的时候遇到如下问题:

  1. 玩家角色A启动游戏,选择一个购买项进行支付
  2. 在弹起华为支付界面时,杀掉进程
  3. 玩家角色B(角色A和角色B都关联使用同一个华为帐号)重新启动游戏,继续购买之前的那个购买项,拉起支付时developerPayLoad传入的字段是要给玩家B发货。
  4. 进入华为支付界面,华为会弹出如下提示框,我们选择“继续等待”,支付后的订单回调developerPayLoad字段显示需要给A角色发货,而不是B。如果选择“重新支付”,没有问题,developerPayLoad字段回调给B角色发货。

疑问:我角色A已经杀死进程了,后面其实是B角色想要支付,为啥“继续等待”,华为要给A角色发货呢,不合理。

cke_1072.png

问题分析

联系华为技术支持(工单联系),技术支持分析后,给出原理:

华为这个弹框设计主要是为了优化海外渠道慢导致的支付超时问题,本质上是为了增加我们的流水。

华为支付和华为帐号强关联,当华为账号拉起某个商品的支付后,玩家直接杀死进程并重启应用继续购买该商品、或者在其他设备上登录该华为帐号继续购买该商品,华为会弹出上述提示框,提示用户是“重新支付”还是“继续等待”,如果“重新支付”,那么华为会直接创建新的支付请求,所有的支付请求参数(包括developerPayLoad字段等)全部按照最新订单来;如果“继续等待”,那么华为会使用我们之前未完成的支付请求参数。这也是为什么我们选择“继续等待”后,华为返回的developerPayLoad信息是玩家A角色。

问题解决

针对该情况,华为当前的设计在华为帐号关联多个玩家角色时,确实可能出现我们反馈的情况,设计确实不完善。

华为技术支持反馈,他们当前已经优化该问题,优化后的方案是:

如果在新设备或者重启应用继续购买该商品时,发现新支付请求传入的developerPayLoad字段与上次未完成支付请求的该字段不一致,则不弹“继续等待”的提示框,直接按照创建新订单完成支付。

修改后,我们测试正常了。

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4478396/blog/5513411
今日推荐