其他
游戏支付测试分享
写在前面:
本文主要介绍支付测试的通用方法、基础概念和一些容易踩坑的点,包括国内安卓渠道和iOS、海外Google Play和iOS支付,希望通过阅读本文,可以帮助大家顺利完成支付测试;
本文主要站在QA验收的视角介绍,对于一些发行向或研发向的配置,会选择略过或简述,请理解;
本文面向的测试对象,是那些已经接入完成,自测,笔支付订单的游戏,接入过程中遇到的问题,不在本文介绍的范围内;
部分流程图、引用内容文中标注了引用来源,详情可以点击链接了解;
水平有限,不清晰或有误之处,烦请不吝指正。
支付测试的目标
确保支付能力接入正确,可以完整地完成支付流程;
确认各处商品配置正确,所有商品均能正常支付并最后到账。
Google Play支付测试
支付流程图
订阅的首次购买和普通的IAP流程差异不大;
相较于一次性IAP消费,订阅有状态的概念,在订阅状态发生变更时需要通过回调进行状态维护。
测试准备
接入侧研发使用提测包体,完成过一次成功的支付到账流程;
为了确保提测的包体,已经完成了商号申请、参数配置、基本的商品配置、服务器的支付回调等一系列的前置步骤,避免出现提测包体本身不满足测试条件的乌龙。
QA准备测试账号,主要有以下几步: 和发行确认当前游戏选择的上架区域,在公用测试账号池中借用对应地区有真实支付能力谷歌账号,建议借到账号后,先根据下方测试流程中的步骤3,验证当前测试机和测试账号付费能力正常(配置为目标国家的网络环境,创建当地的GP账号,付费建议绑定有海外支付能力的信用卡,使用礼品卡可能出现奇怪的问题); 联系商店账号管理同学将该测试账号加入测试计划(同时需要注意包体需要在 alpha/beta轨道
上),并且提供一个测试邀请链接;使用测试账号登录浏览器(手机或者PC均可,注意清除浏览器cookie,保证登录的是测试账号),接受该测试邀请,这样一个账号就成功加入了测试计划。
请商店账号管理同学将测试账号加入应用的许可测试人员,这样这个账号之后支付就不需要支付真实货币了,而是直接走 谷歌沙盒支付
,支付拉起时的弹窗中会如下显示,需要注意的是:这里的沙盒支付指的是谷歌这边的,和SDK的沙箱环境无关,换种表达方式是:SDK沙箱环境和正式环境都可以进行谷歌的沙盒支付和真钱支付,但对SDK正式环境而言,想跑通沙盒支付需要在SDK管理端配置沙盒支付白名单。
alpha/beta轨道
:详情可通过谷歌官方链接了解,一般内部小规模测试alpha轨道即可,对外开放的测试一般放在beta轨道上,是否已提审or过审alpha/beta轨道,询问商店管理的同学或者通过发行询问即可。谷歌沙盒支付
:谷歌自身提供沙盒支付能力(在后台设置里这个能力叫“许可测试”),与GSDK的沙箱环境无关,配置路径为:打开 Play 管理中心 --> 依次点击设置 > 许可测试 --> 在“添加许可测试人员”框中,输入测试人员的 Gmail 地址 --> 在屏幕右下角,选择保存更改。使用沙盒支付有几点好处:
不需要付真钱, 线上的计费点可以按实际价格直接配置,我们验收所有计费点时的结论也更准确;
官方说法:
翻译一下,意思是来说我们上传到GP的包体是会带签名+versionCode的,在真钱支付的场景下,使用GP的支付能力会验证这个签名,如果签名验证失败,则会提示“该版本的应用未配置商品”之类的错误。支付调试过程中,往往我们的包体也在不断升级,包体的签名信息是在变化的,而上传到商店的操作却不会有那么频繁,所以实际测试时用的包体会和GP的包有签名差异,最终导致支付走不通,这里推荐两个测试的姿势:
沙盒账号支付:打包时,包体versionCode与最后一次上传的包设置成一致,使用沙盒账号支付,绕过签名检查; 真钱支付:完全使用上传的包体进行安装,或者直接从GP商店进行下载安装,支付时,使用对应地区的GP账号+配置为目标国家的网络环境,直接进行支付,但建议只支付一笔;
测试订阅很方便,一个月的续订周期,沙盒账号只要5分钟就可以触发续订逻辑,详情可以参考:https://developer.android.com/google/play/billing/test 沙盒支付白名单
: GSDK为了避免沙盒测试账号流出到正式环境,造成安全风险(你懂的,无限购买),特意在SDK正式环境的后台增加了沙盒支付白名单的功能,只有给沙盒支付订单对应的游戏角色/设备加了白名单,才能完成支付。
准备好网络环境和设备环境,并确认测试手机和该账号付费能力可用,具体操作为: 选择一台支付框架可用的海外手机(推荐三星、pixel这种机器); 退出Google Play上所有账号,并清除Google Play应用的所有数据; 配置为目标国家的网络环境,确认网络正常后打开Google Play登录测试账号; 打开Google Play商店 --> 点击付费tab --> 查看是否有内容(如果有,则表示支付环境ok)。
如果需要测试游戏内所有的付费点,不要忘了找发行要一份游戏内所有计费点的清单文档,放心,他会有的,毕竟商品配置都需要走发行同学这边。
测试流程
普通商品
游戏内显示的货币与价格,符合预期 默认情况下,游戏商品的定价显示会按发行配置时使用币种由GP管理后台根据汇率和税率实时换算成当地的价格,此时可以根据计费点中的价格大致换算一下对应的上即可; GP支持根据不同国家,指定商品的价格,此时应需要发行提供测试账号所在国家的价格配置; 支付流程能正常完成,商品也成功到账(到账不仅要查看购买成功的弹窗,也要实际去背包中查看或使用,确保是东西是真的进背包了); 游戏币
的充值,不仅要关注游戏内游戏币的数量和到账情况,同时需要关注管理后台上角色信息中的游戏币变化情况,具体有:充值游戏币后,查询角色信息,游戏币数量增加符合预期; 消费游戏币后,查询角色信息,游戏币数量增加符合预期; 游戏玩法赠送游戏币后,查询角色信息,游戏币数量增加符合预期;
验证发行提供的所有计费点的实际支付和到账情况;
游戏内的限购、随机直购等逻辑要根据游戏设定自己写case;
正常来说,支付测试不太需要使用真钱支付,沙盒支付全量验收后其实就可以保证游戏真钱支付能力无问题,但一般咱们为了做最后的确认,还是在最终包上会使用真钱支付一次,验证最终包的真钱支付能力,一般会买计费点里最便宜的那个。
游戏币
:对应游戏内充值可以直接获得的代币,在游戏里是点券、钻石这类充值才能获得的珍贵货币,目前接入GSDK支付能力的游戏,基本都会接入游戏币托管。游戏支付提供游戏币托管服务,托管指用户的游戏币账户余额记录在游戏支付提供的托管服务,用户购买游戏币商品后,由托管服务增加账户余额;同时游戏内的赠予、消费游戏币行为,需要调用托管服务的接口完成。游戏币托管服务具有如下特点:
保障用户支付权益,防止发生用户支付完成但未获得游戏币的场景; 复用数据、营销等相关能力,无需各项目单独开发; 满足财务审计的递延结算合规要求。
订阅
和普通商品类似,需要验证所有的价格显示、支付流程、到账流程、涉及游戏币的变化等通用case;
根据游戏内订阅商品的实际配置,如是否有免费试用、是否有首次购买折扣等,参考官方用例,完成游戏自己的测试用例。
常见问题
提示“支付成功”,但实际没有到账
点击购买商品,无法拉起支付界面
Google Play返回错误提示“Item unavailable”或者提示“该版本的应用商品信息未配置
Google play是否登录了多个账号,如果是,将其他账号删除; 检查支付的账号是否是测试账号(打开手机Google play,可以查看当前账号); 测试账号是否加入到了测试计划(点击邀请链接后,需要手动点击成为测试人员);
Apk是否上传到了开发者后台,并使用alpha/beta通道;
Apk在开发者后台不应该是Draft(草稿)模式;
Apk的VersionCode与VersionName与开发者后台配置的是否一致;
开发者后台配置的商品是否有效;
其他报错信息,如无法完成支付:
部分账号真钱支付失败,提示付款拒绝or更换支付方式,同时有账号可以使用真钱支付成功
iOS支付测试
支付流程图
测试注意事项
首先和GP支付一致,接入侧研发使用提测包体,完成过一次成功的支付到账流程。 准备 iOS沙盒支付账号
,测试机无限制,一般来说iPhone6以上均可,但注意不能使用越狱机器,也不能使用模拟器。
iOS沙盒支付账号
:和GP不同的是,iOS的沙盒支付账号是在Apple后台生成一个账号,具体路径为,登录苹果开发者后台--App Store Connect--用户和访问--沙盒--测试员--添加,注意生成的账号的地区与最终上线地区一致,这个测试账号只能用于测试支付,无法实际登录(当然,你也可以拿一个实际能登录的AppleID和密码去创建这个账号,但这样比较容易让别人误解)。
已经登录的沙盒测试账号,在iOS设备的 设置--App Store--沙盒 一栏中可以看到,如果一台设备上之前登录过其他沙盒账号,可以在这里退出。
测试机退出原来登录的Apple账号,注意哦,这里只需要退出账号,退出之后,不需要在这里登录沙盒账号,因为你压根就登录不了,如果强行登陆,会出现以下报错提示(或者要求输入短信验证码)。
dev证书和adhoc证书
的包为测试包,只能用沙盒账号进行支付。
iOS证书
:iOS证书如下图所示,主要分为dev、App Store、inhouse、adhoc这几种,其中dev的包主要用于前期测试,使用的是开发证书,需要打包时加入测试机的udid才能安装;与dev包不同,adhoc和inhouse证书使用了发布证书,它们自己的区别在于adhoc是个人签,打包时也需要加入udid才能安装,但inhouse证书为企业签,随便一台手机就可以安装了;App Store的包是上传至App Store时需要选择的。一般我们用的都是gameflow重签后的企业签包,对支付测试而言:dev:仅能使用沙盒支付; adhoc和inhouse:仅能使用沙盒支付; App store:仅用于正式包体上传,正式上架后,才可以使用真实AppleID进行支付,需要注意,并且该正式线上包是无法使用沙盒账号支付的(也就是商店里下载的包,无法使用沙盒支付); 可以看到,iOS的特点就是,没有正式上线之前,我们都无法使用真实的AppleID进行真钱支付,不过不用担心,我们测试时只需要验证沙盒支付即可,苹果会保证正式包支付可用的。
在游戏内购买商品,系统会让你进行登录,这里点击“使用现有的AppleID”就可以输入刚才创建好的沙盒测试账号进行登录(当然也可以在设置->AppStore->沙盒账号处先登录好)。
和GP类似,想要在SDK正式环境和正式服,使用iOS的沙盒支付测试,也需要在SDK管理端进行白名单配置,配置地址如下。 iOS端的订阅支付测试和GP类似,使用沙盒账号即可快速验证订阅续订,对应关系可以参考:https://help.apple.com/app-store-connect/?lang=zh-cn#/dev7e89e149d
国内渠道支付测试
测试注意事项
由于国内各个渠道没有像GP和iOS的沙盒支付账号,只能使用真钱支付,所以测试前建议联系发行将商品价格都改成1分钱,验证所有商品的配置和到账情况;
验证商品配置和到账情况后,还需要将价格恢复,并拉起支付验证价格配置,这一步在正式上线前必须完成,并确保线上价格配置符合预期;
订阅商品一般国内比较少,大部分常见的月卡、通行证等,都是不带自动续费的,这种商品需要配置成道具,并在财经侧配置成可消耗商品,才能完成支付流程;
华为、酷派、联想这3个渠道,由于其渠道侧还需要完整配置商品信息,所以对这3个渠道,需要完整验证所有支付点,其他渠道,在字节官包已完整验证支付点的情况下,只需要验证道具、游戏币、订阅这几种类型的商品各一次即可;
商品信息的变更,需要及时同步,并在变更后及时完成对应商品的购买验证。
一点补充经验
支付测试虽然从用例设计和执行上看,更偏向于黑盒测试,但了解支付接入时实际的实现细节,也有助于我们发现问题。举一个例子,如果我们足够了解游戏币的几个接口的调用时机,在发现游戏内游戏币和管理后台上查询到的不一致时,就可以通过游戏币的变更信息,定位到不一致发生的具体原因,可以有效推动问题的解决;
使用在正式服(可以理解为玩家使用的服务器)上最好不要进行沙箱支付,避免业务方记录的消费数据和中台侧对不上(因为对业务侧而言,可能无法通过支付回调判断订单是沙盒还是正式的); 除了发现问题,作为QA,更好的是能够帮助定位到问题发生在哪个环节,或给技术同学提供更多准确的背景信息,这需要QA同学对支付流程有一个清晰的了解,能看懂流程中各个节点的日志信息,并熟练掌握各个信息查询工具的使用。