【问题标题】:Google Play Developer API defer request error - The desired expiry time for the subscription is not validGoogle Play Developer API 延迟请求错误 - 订阅的预期到期时间无效
【发布时间】:2024-04-21 00:30:02
【问题描述】:

我正在尝试在我的应用中推迟应用内购买的结算。但是每次我收到以下错误

    Exception was thrown while updating 
    listingcom.google.api.client.googleapis.json.GoogleJsonResponseException: 
    400 Bad Request
     {
       "code" : 400,
       "errors" : [ {
       "domain" : "androidpublisher",
       "message" : "The desired expiry time for the subscription is not 
       valid.",
       "reason" : "subscriptionDeferInvalidTime"
       } ],
      "message" : "The desired expiry time for the subscription is not valid."
     }

我为请求编写了以下代码。我确信包名称 subscriptionID 和 subscriptionToken 等变量是正确的,因为 purchase.get 调用有效。 变量过期时间是从之前的 get 调用响应中保存的。

class DeferBilling extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... urls) {
        try {
            Preconditions.checkArgument(!Strings.isNullOrEmpty(ApplicationConfig.PACKAGE_NAME),
                    "ApplicationConfig.PACKAGE_NAME cannot be null or empty!");

            // Create the API service.
            final AndroidPublisher service = AndroidPublisherHelper.init(
                    ApplicationConfig.APPLICATION_NAME, ApplicationConfig.SERVICE_ACCOUNT_EMAIL, getBaseContext());
            final AndroidPublisher.Purchases purchases = service.purchases();
            SubscriptionPurchasesDeferRequest request = new SubscriptionPurchasesDeferRequest();
            SubscriptionDeferralInfo info = new SubscriptionDeferralInfo();
            long desiredTime = expiryTime + 10*60*1000;
            long expectedTime = expiryTime;
            info.setDesiredExpiryTimeMillis(desiredTime);
            info.setExpectedExpiryTimeMillis(expectedTime);
            request.setDeferralInfo(sdi);
            SubscriptionPurchasesDeferResponse response = purchases.subscriptions().defer(ApplicationConfig.PACKAGE_NAME,GlobalClass.subscriptionID,
                    GlobalClass.subscriptionToken,request).execute();
            System.out.println(response);
            return response.toString();
        } catch (Exception e) {
            System.out.println("Exception thrown" + e.toString());
            return "";
        }
    }

    protected void onPostExecute(String feed) {
    }
}

【问题讨论】:

    标签: google-api-java-client android-inapp-purchase


    【解决方案1】:

    问题是我只通过增加 10 分钟来计算desiredTime,而有必要将计费推迟几天。当我将账单推迟 30 天后,它奏效了。

    【讨论】:

    • 谢谢。这很奇怪,仅在 Google 文档中没有关于此的信息:“分配给订阅的所需下一个到期时间,以 Epoch 以来的毫秒数为单位。给定时间必须晚于/大于订阅的当前到期时间。”跨度>