In-App支付测试及安全性

概要

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的管理及支付测试请在开发公司内部负责人的监管下进行。

In-App支付测试流程

In-App支付测试界面

在开发者中心>Apps > 商品选择 > In-App信息界面点击"支付测试"按钮,即可出现In-App支付测试界面。 可以在"In-App支付测试"界面里管理测试ID或查询支付测试的历史记录。

注册及管理测试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

  • 查询要作为测试ID的One store会员ID。

  • 确认查询的One store ID后,用该测试ID选择在哪个支付环境(Sandbox,商用测试)进行支付测试。

  • 必要时输入参考事项,单击注册按钮注册测试ID。

一个测试ID只能选择一个支付环境,而支付环境设置可随时更改。

  • 用已注册的测试ID,可以设置进行支付测试的环境。

  • 更改测试ID的支付环境时,必须点击"保存",保存新的设置。

删除测试ID(个别删除,批量删除)

  • 测试ID不再有效时,可删除测试ID。

  • 可以点击"删除"按钮后删除个别测试ID,也可以选择多个测试ID后点击"删除已选ID"按钮进行批量删除。

复制测试ID设置

  • 如果同一测试ID可以在多个应用软件使用,则可以将测试ID设置复制到其他应用软件。

  • 只有可复制的应用软件才能点击check box,选择好要复制的测试ID设置的对象软件后,点击"复制"。

Sandbox环境下的支付测试(必选)

Sandbox支付测试及验证

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内的时间流如下。

支付周期

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支付测试的支付结果确认及取消支付

您可以对In-App支付测试历史记录进行支付状态确认及取消支付。 在Sandbox中支付的记录可以在In-App支付测试画面的"Sandbox"Tab上查询,在商用T测试中支付的记录可以在In-App支付测试画面的"商用测试"Tab上查询。

Sandbox环境

  • 提供在Sandbox环境下进行的支付测试的历史记录

  • 可以查询已支付的商品信息及支付状态,也可以取消支付。

商用测试环境·

  • 提供在商用测试环境下进行的支付测试的历史记录。

  • 可以查询已支付的商品信息及支付状态,也可以取消支付。

安全性和认证

In-App支付的安全性

  • ONE store In-App支付使用签名(Signature)的有效性认证方法验证数据是否伪造和篡改,以确保安全支付。 由于手机应用软件暴露在许多攻击的威胁下,为了将这种危险降到最低,建议在开发公司应用软件或服务器进行签名认证。 下面是开发公司为了更安全的In-App支付需要进一步准备的事项。

  • 使用开发公司服务器

    • 为了有效避开APK Reverse Engineering等的攻击,体现代码和Public key等可以在服务器中保管并进行认证。 在存储购买信息时,比起存储在智能手机,建议最好存储在开发公司服务器,来确认商品的使用许可。

  • 使用已更改的代码

    • One store提供的api sample是向很多人开放的代码,比起直接使用原件,建议修改后使用。 如果使用相同的代码,那么就很容易暴露在攻击的危险中。

    • 最好使用Proguard等代码混淆工具保护支付相关代码。

    • 即使是Public Key,在软件代码中加入普通字符串也不是安全的方法。建议例如与其他字符串进行XOR以避免轻易暴露等,使攻击者无法轻易接近,这是安全的。

  • 要求支付时使用"developerPayload"字段

    • 开发公司在要求支付时,可将任意信息放入"developerPayload"字段中,并在完成支付后重新收到信息。

    • 在相应字段中加入组合了timestamp等的附加安全验证的数据,可以使支付结果的验证更加安全。

ONE store In-App支付认证方法

  • 认证准备

    • 为了认证的Key算法使用RSA方式,采用'SHA512withRSA'作为签名的算法。 签名验证Key请参考应用One store In-App支付的事前准备页面中的"许可证密钥及OAuth认证信息确认"部分。 签名验证Key的值根据智能手机或服务器等认证的位置适当存储并使用。

  • 签名认证api sample

    • SDK提供"AppSecurity"Utility的Class,可使用"verifyPurchase"Method进行签名认证。 如果开发公司想不使用SDK,直接进行签名认证,则必须直接实现与"AppSecurity"相同功能的代码。 详细的实现内容参考与SDK library一起发放的sample。

Last updated