java - Android InApp Purchase - 如何处理待定状态?

标签 java android json in-app-purchase android-pay

我正在将 Android 应用内购买与 Android native 应用程序集成。我使用以下代码来启动应用内购买意向!

Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),”product_sku”, "inapp",”Some Developer Payload”);

PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

startIntentSenderForResult(pendingIntent.getIntentSender(),REQUEST_CODE, new Intent(),Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));

以上代码与 Google Play 一起使用并打开 Google Play 以进行应用内购买。我重写了 onActivityResult 以获取应用内购买的结果(以下是代码)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1001) {

        if (resultCode == RESULT_OK) {
            try {
                final JSONObject jo = new JSONObject(purchaseData);
                String orderId = jo.getString("orderId");
                String productId = jo.getString("productId");
                String state = String.valueOf(jo.getInt("purchaseState"));

                //POST purchase result to my server for my record!

                //Finally Consume the product 
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } 

    } 
}

以下是我们从 InApp 购买中收到的回复

'{ 
   "orderId":"12999763169054705758.1371079406387615", 
   "packageName":"com.example.app",
   "productId":"exampleSku",
   "purchaseTime":1345678900000,
   "purchaseState":0,
   "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
   "purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
 }'

我的问题是,如何识别应用内购买交易处于“待处理”状态,因为“purchaseState”(JSON 中的整数值)只有三个值“已购买”、“已取消”和“已退款”。

我来自印度,谷歌钱包在应用内购买完成后立即接受任何交易。

它总是先处于Pending状态,然后最多需要48小时来接受或拒绝交易!

我只想允许我的客户在 Google Waltet 成功付款后使用应用内购买的产品。

我遇到过我的一位客户从我的应用程序购买了 inapp 产品,但不知何故他们的数据没有发布在服务器上。客户告诉我,该购买交易最初处于待处理状态,并在两天后完成,即使我在我的商家帐户中收到了付款,所以我得出结论,Android 没有响应 onActivityResult 中的 resultCode == RESULT_OK is purchase is in pending。

因此,如果有人遇到同样的问题,请向我解释处理待定状态的解决方案或流程!我是否必须将 APN 用于待定状态?但我需要将待定状态订单的详细信息存储在我的服务器上! 提前致谢!

最佳答案

我知道很久以前有人问过这个问题。但我面临着同样的问题(针对巴西市场的应用程序)。

我注意到立即处理的购买,一切正常。

但是,有些购买会进入“待付款”状态,最多可能需要 48 小时才能更改状态。但是,我的服务器永远不会被调用——正如 OP 所述,我怀疑 Google Play 服务器返回了不同的状态(RESULT_OK 除外),而我的应用程序没有捕获到该状态。 然后,我的用户会被收费,但无法访问 PREMIUM 功能 - 因为我的服务器从未收到通知。

因此,截至 2018 年,我读到我们可能有替代方案。以下链接有一些关于如何处理订阅的信息

https://developer.android.com/google/play/billing/billing_subscriptions

.. 并指向以下内容:

https://developer.android.com/google/play/billing/realtime_developer_notifications

实时开发者通知

这允许 Google play 在每次用户订阅状态发生变化时向您的服务器发送通知。因此,如果您的用户付款需要 48 小时才能完成,您的服务器会收到通知,您可以让用户成为高级用户或任何您需要的逻辑。

希望对您有所帮助。

关于java - Android InApp Purchase - 如何处理待定状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17831222/

相关文章:

java - 如何使用JPA(EclipseLink)设置应用程序名称?

java - 如何访问主要 Activity 来获取纬度和经度以便更改 url,以及如何自动更改 url 的语言,

java - Android 与 servlet 或 mysql 数据库的集成

android - Cocos2dx Android : getFileData failed to get . 来自 Assets 的json文件

java初学者递归列表

java - 不转义 Spring WS SOAP 主体中的字符

java - Android:finish() 是否总是调用 onDestroy()?

android - 从android应用程序上传视频到http服务器

ios - 使用 Alamofire 在 Swift 4 中解析 Youtube api

sql - 如何在postgresql中对json类型使用唯一约束