In-App支付测试及安全性
Last updated
Last updated
ONE store在开发环境(以下称"Sandbox")和商用支付环境(以下称"商用测试")中支持In-App商品的支付测试。 Sandbox不是商用支付环境,而是虚拟支付环境。在支付界面中,如果您在支付失败或成功时选择了您所希望的响应,系统就会发送相应的响应结果。 商用测试是在商用支付环境中进行相应In-App商品的支付,并发送支付结果。 在商用测试环境下进行支付时,如不取消支付,则可能会产生费用,因此在支付测试后一定要取消支付。
所有In-App商品必须在Sandbox里进行1次以上测试,首次注册商品时,如有1个未进行测试的In-App商品,则无法激活验证请求按钮。
为了在Sandbox及商用环境下进行测试,需事先将One store ID注册为测试ID。 如果用未注册的ONE store ID进行测试时,在Sandbox无法进行测试,在商用测试环境下,进行的是实际商用支付,而非测试商用支付,这会产生费用,因此需要注意。
ONE store对通过测试ID支付的订单不负有责任。测试ID的管理及支付测试请在开发公司内部负责人的监管下进行。
在开发者中心>Apps > 商品选择 > In-App信息界面点击"支付测试"按钮,即可出现In-App支付测试界面。 可以在"In-App支付测试"界面里管理测试ID或查询支付测试的历史记录。
为了在开发及商用环境中测试In-App支付,必须事先注册测试ID。
在In-App支付测试界面中选择"注册/管理测试ID"Tab,可转至管理测试ID的界面。
测试ID为ONE store用户ID,可查询在ONE store注册的会员ID进行注册。
如果不是ONE store会员,则可以运行ONE store应用软件,创建一个测试用的ONE store ID后,然后将该ID注册为测试ID即可。
查询要作为测试ID的One store会员ID。
确认查询的One store ID后,用该测试ID选择在哪个支付环境(Sandbox,商用测试)进行支付测试。
必要时输入参考事项,单击注册按钮注册测试ID。
一个测试ID只能选择一个支付环境,而支付环境设置可随时更改。
用已注册的测试ID,可以设置进行支付测试的环境。
更改测试ID的支付环境时,必须点击"保存",保存新的设置。
测试ID不再有效时,可删除测试ID。
可以点击"删除"按钮后删除个别测试ID,也可以选择多个测试ID后点击"删除已选ID"按钮进行批量删除。
如果同一测试ID可以在多个应用软件使用,则可以将测试ID设置复制到其他应用软件。
只有可复制的应用软件才能点击check box,选择好要复制的测试ID设置的对象软件后,点击"复制"。
Sandbox不是商用支付环境,而是虚拟支付环境。在支付界面中,如果您在支付失败或成功时选择了您所希望的响应,系统就会发送相应的响应结果。
在Sandbox支付的订单可以在In-App支付测试界面的"Sandbox"tap上查询,也可以取消支付。
所有In-App商品必须在Sandbox里进行1次以上测试,首次注册商品时,如有1个未进行测试的In-App商品,则无法激活验证请求按钮。
测试环境(商用和Sandbox)信息与One store服务连接期间保存在memory。 如果通过开发者中心变更了测试ID的测试环境,则必须终止应用软件并重新启动。
只有当测试ID设置为Sandbox时,才能进行Sandbox支付测试。 未进行Sandbox支付测试的App商品,In-App商品的测试与否值设置为"N",如果进行测试,则更改为"Y"。
开发订阅型商品时,如果设定与实际时间相同的支付周期,测试就需要很长的时间。 为此,Sandbox环境支持按订阅周期调整所需时间,使测试更加顺利。 根据每个支付周期和功能,Sandbox内的时间流如下。
支付周期
Sandbox内时间
1周
5分
1个月
5分
3个月
10分
6个月
15分
1年
30分
功能
Sandbox 内时间
免费订阅
3分
延期时间
5分
保留账号
10分
反映价格变更 (7天)
5分
价格变更同意期间 (30天)
5分
商用测试是在商用支付环境中进行相应In-App商品的支付,并发送支付结果。 商用测试支付的订单可以在In-App支付测试界面"商用测试"tab查询,也可以取消支付。 在商用测试环境下进行支付时,如不取消支付,则可能会产生费用,因此在支付测试后一定要取消支付。
测试ID设置为商用测试,才能在商用测试环境下进行支付测试。
如果使用未设置成商用测试的测试ID或未注册为测试ID的One store ID进行支付时,将进行实际的商用支付而非测试的商用支付,请注意这会产生费用。 实际发生商用支付时,请立即向One store发送支付信息,请求取消支付。
您可以对In-App支付测试历史记录进行支付状态确认及取消支付。 在Sandbox中支付的记录可以在In-App支付测试画面的"Sandbox"Tab上查询,在商用T测试中支付的记录可以在In-App支付测试画面的"商用测试"Tab上查询。
提供在Sandbox环境下进行的支付测试的历史记录
可以查询已支付的商品信息及支付状态,也可以取消支付。
提供在商用测试环境下进行的支付测试的历史记录。
可以查询已支付的商品信息及支付状态,也可以取消支付。
ONE store In-App支付使用签名(Signature)的有效性认证方法验证数据是否伪造和篡改,以确保安全支付。 由于手机应用软件暴露在许多攻击的威胁下,为了将这种危险降到最低,建议在开发公司应用软件或服务器进行签名认证。 下面是开发公司为了更安全的In-App支付需要进一步准备的事项。
使用开发公司服务器
为了有效避开APK Reverse Engineering等的攻击,体现代码和Public key等可以在服务器中保管并进行认证。 在存储购买信息时,比起存储在智能手机,建议最好存储在开发公司服务器,来确认商品的使用许可。
使用已更改的代码
One store提供的api sample是向很多人开放的代码,比起直接使用原件,建议修改后使用。 如果使用相同的代码,那么就很容易暴露在攻击的危险中。
最好使用Proguard等代码混淆工具保护支付相关代码。
即使是Public Key,在软件代码中加入普通字符串也不是安全的方法。建议例如与其他字符串进行XOR以避免轻易暴露等,使攻击者无法轻易接近,这是安全的。
要求支付时使用"developerPayload"字段
开发公司在要求支付时,可将任意信息放入"developerPayload"字段中,并在完成支付后重新收到信息。
在相应字段中加入组合了timestamp等的附加安全验证的数据,可以使支付结果的验证更加安全。
认证准备
为了认证的Key算法使用RSA方式,采用'SHA512withRSA'作为签名的算法。 签名验证Key请参考应用One store In-App支付的事前准备页面中的"许可证密钥及OAuth认证信息确认"部分。 签名验证Key的值根据智能手机或服务器等认证的位置适当存储并使用。
签名认证api sample
SDK提供"AppSecurity"Utility的Class,可使用"verifyPurchase"Method进行签名认证。 如果开发公司想不使用SDK,直接进行签名认证,则必须直接实现与"AppSecurity"相同功能的代码。 详细的实现内容参考与SDK library一起发放的sample。