Android APK Top Up API

充值可在三种不同的环境中进行:

  • 付款集成商的 Android 应用
  • 付款集成商的移动网站
  • 付款集成商的桌面版网站

无论使用何种流程,Google 都会将用户互动交给付款集成商的软件。付款集成商会实现一个让用户感到熟悉的界面,但该流程必须专门用于为用户余额充值,这意味着用户应被引导完成充值流程,而不是进入一个通用界面,用户需要在此界面中进一步进入充值流程。

所有流程都会导致集成商生成 TopUpRedirectResponse。此响应会被签名并发送回 Google。

移动网站和桌面版网站必须遵循 Web Top Up API 规范,而 Android 应用流程必须遵循 Android Top Up API 规范。

集成商应实现 Android APK 解决方案来验证用户身份,然后引导他们完成充值流程。充值是一种不同的模态,但用途与 Web 充值提供的充值方式相同。

用户通过 Android Activity 进入付款集成商应用中的流程。充值 intent 可以直接从用户打算购买的 Play 应用中调用。为防止 Android 在充值期间在后台终止 Play,集成器需要在 activity 主题中添加以下代码。

<item name="android:windowIsTranslucent">true</item>

方法定义

intent 需要具有以下属性:

方法属性
操作 com.google.android.payments.standard.TOPUP_V1
类别 android.intent.category.DEFAULT

请求

字段
gspTopUpRequest TopUpRedirectRequest

充值请求。

gspAssociationId string

包含集成商用来查找用户充值帐号凭据的标识符。这是在帐号关联期间在 AssociateAccountRequest 中发送的关联 ID。

响应

用户完成充值流程后,您的应用需要将结果 intent 发送回 Google。如果充值成功,请创建一个 intent,并将经过加密的 gspTopUpResponse 和 redirectRequestId 添加为 extra。接下来,将 activity 结果设置为相应的结果代码。

...
result.setExtra("gspTopUpResponse", gspTopUpResponse);
result.setExtra("redirectRequestId", redirectRequestId);
setResult(Activity.RESULT_OK, result);
...
finish();

结果

字段
结果 int

Activity.RESULT_OK
充值成功。
Activity.RESULT_CANCELED 用户手动取消了该流程,并且应取消该流程。
Activity.RESULT_FIRST_USER 由于严重原因而充值失败,相应流程应取消。IE 服务器在登录时返回 HTTP 500 响应。

花絮

字段
gspTopUpResponse TopUpRedirectResponse

必需:充值响应。此编码值不得超过 1KB。
redirectRequestId string

必需:在原始/发起重定向付款请求中发送的 requestId。Google 会验证这是否与发送的 requestId 匹配,如果不匹配,“完整重定向”流程将失败。

其他活动要求

支持上述 TOPUP_V1 操作的 activity 还必须检查该 API 的调用方是否仅来自由 Google 签名的应用。这有助于防止其他应用尝试调用您的 activity 并检索用户数据。为此,您可在 Activity 实现中的 super.onCreate 之后立即使用所提供的 StandardPaymentUtils.verifyCallingActivityIsGoogleSigned

示例如下:


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);

  ....
}

充值流程中调用的所有 activity 都必须提供具有 windowIsTranslucent=true 的 activity 主题。必须使用 AndroidManifest android:theme 属性(而不是 Context.setTheme())完成此操作。以编程方式设置主题无法针对窗口半透明性正确设置。Google 会强制使第一个启动的 activity 遵循此模式,但也启动的所有子 activity 也必须遵循此模式。如果不是,就可能无法正常向第三方开发者购买。