jjzjj

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

华为开发者论坛 2023-03-28 原文

问题描述

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

1. 玩家角色A启动游戏,选择一个购买项进行支付

2. 在弹起华为支付界面时,杀掉进程

3. 玩家角色B(角色A和角色B都关联使用同一个华为帐号)重新启动游戏,继续购买之前的那个购买项,拉起支付时developerPayLoad传入的字段是要给玩家B发货。

4. 进入华为支付界面,华为会弹出如下提示框,我们选择“继续等待”,支付后的订单回调developerPayLoad字段显示需要给A角色发货,而不是B。如果选择“重新支付”,没有问题,developerPayLoad字段回调给B角色发货。

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

问题分析

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

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

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

问题解决

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

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

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

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

有关华为支付回调developerPayLoad字段与传入时不一致导致发货异常的更多相关文章

  1. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  2. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  3. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  4. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  5. ruby - Ruby gsub 替换中的行为不一致? - 2

    两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio

  6. ruby - attr_accessor 在写入时将 nil 转换为字符串 - 2

    我有一个数据对象,其中包含许多用于各种输入的attr_accessor字段。我可以以某种方式定义类,以便所有字段的所有setter都将例如将值设置为空字符串而不是尝试的nil? 最佳答案 这里有一个小模块可以做到这一点:moduleNilToBlankAttrAccessordefnil_to_blank_attr_accessor(attr)attr_readerattrdefine_method"#{attr}="do|value|value=''ifvalue.nil?instance_variable_set"@#{attr

  7. ruby-on-rails - 与 ActiveMerchant 一起使用的最佳支付网关是什么? - 2

    我需要使用ActiveMerchant库在我们的一个Rails应用程序中设置支付解决方案。尽管这个问题非常主观,但人们对主要网关(BrainTree、Authorize.net等)的体验如何?它必须:处理定期付款。有能力记入个人帐户。能够取消付款。有办法存储用户的付款详细信息(例如Authotize.netsCIM)。干杯 最佳答案 ActiveMerchant很棒,但在过去一年左右的时间里,我在使用它时发现了一些问题。首先,虽然某些网关可能会得到“支持”——但并非所有功能都包含在内。查看功能矩阵以确保完全支持您选择的网关-http

  8. ruby-on-rails - 将保存回调添加到单个 ActiveRecord 实例,可以吗? - 2

    是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立

  9. ruby-on-rails - Ruby method_added 回调不触发包括模块 - 2

    我想写一点“Deprecate-It”库并经常使用“method_added”回调。但是现在我注意到在包含模块时不会触发此回调。是否有任何回调或变通方法,以便在某些内容包含到自身时通知类“Foobar”?用于演示的小Demo:#IncludingModulswon'ttriggermethod_addedcallbackmoduleInvisibleMethoddefinvisible"Youwon'tgetacallbackfromme"endendclassFoobardefself.method_added(m)puts"InstanceMethod:'#{m}'addedto'

  10. ruby-on-rails - 使用 before_save 回调或自定义验证器添加验证错误? - 2

    我有一个模型Listingbelongs_to:user。或者,Userhas_many:listings。每个列表都有一个对其进行分类的类别字段(狗、猫等)。User还有一个名为is_premium的bool字段。这是我验证类别的方式...validates_format_of:category,:with=>/(dogs|cats|birds|tigers|lions|rhinos)/,:message=>'isincorrect'假设我只想让高级用户能够添加老虎、狮子和犀牛。我该怎么做?最好在before_save方法中执行此操作吗?before_save:premium_che

随机推荐