【问题标题】:Ios Server-to-Server NotificationsIos 服务器到服务器通知
【发布时间】:2019-11-27 11:00:06
【问题描述】:

我正在尝试为 IOS 订阅实施服务器到服务器通知。我已经阅读了Server-to-Server Notifications 文档并遵循了所有必要的步骤。我的服务器在 GCM 中。

现在,当我在应用程序中进行购买时,我在服务器中收到通知,但响应与上述链接中定义的完全不同。

我得到的响应只包含一个字段 latest_receipt 。但是在文档中他们提到了各种参数。所以,我想我必须通过向endpoint 发送邮件来验证收据。现在我得到一个包含大量信息的 json 正文,但我仍然没有得到文档中提到的 json。

验证购买后我收到的响应正文 (https://sandbox.itunes.apple.com/verifyReceipt)

{
  "auto_renew_status": 1,
  "status": 0,
  "auto_renew_product_id": " ",
  "receipt": {
    "original_purchase_date_pst": "2019-01-09 01:26:35 America/Los_Angeles",
    "quantity": "1",
    "unique_vendor_identifier": " ",
    "bvrs": "56",
    "expires_date_formatted": "2019-07-18 06:19:17 Etc/GMT",
    "is_in_intro_offer_period": "false",
    "purchase_date_ms": "1563430577000",
    "expires_date_formatted_pst": "2019-07-17 23:19:17 America/Los_Angeles",
    "is_trial_period": "false",
    "item_id": "1298435177",
    "unique_identifier": " ",
    "original_transaction_id": "1000000492823158",
    "expires_date": "1563430757000",
    "transaction_id": "1000000548145129",
    "web_order_line_item_id": "1000000045717939",
    "version_external_identifier": "0",
    "bid": " ",
    "product_id": " ",
    "purchase_date": "2019-07-18 06:16:17 Etc/GMT",
    "original_purchase_date": "2019-01-09 09:26:35 Etc/GMT",
    "purchase_date_pst": "2019-07-17 23:16:17 America/Los_Angeles",
    "original_purchase_date_ms": "1547025995000"
  },
  "latest_receipt_info": {
    "original_purchase_date_pst": "2019-01-09 01:26:35 America/Los_Angeles",
    "unique_identifier": " ",
    "original_transaction_id": "1000000492823158",
    "expires_date": "1563430757000",
    "transaction_id": "1000000548145129",
    "quantity": "1",
    "product_id": " ",
    "bvrs": "56",
    "bid": " ",
    "unique_vendor_identifier": " ",
    "web_order_line_item_id": "1000000045717939",
    "original_purchase_date_ms": "1547025995000",
    "expires_date_formatted": "2019-07-18 06:19:17 Etc/GMT",
    "purchase_date": "2019-07-18 06:16:17 Etc/GMT",
    "is_in_intro_offer_period": "false",
    "purchase_date_ms": "1563430577000",
    "expires_date_formatted_pst": "2019-07-17 23:19:17 America/Los_Angeles",
    "is_trial_period": "false",
    "purchase_date_pst": "2019-07-17 23:16:17 America/Los_Angeles",
    "original_purchase_date": "2019-01-09 09:26:35 Etc/GMT",
    "item_id": "1298435177"
  }
}

但是在他们提到的文档中:

 environment
 notification_type
 password
 cancellation_date
 cancellation_date_pst
 cancellation_date_ms
 web_order_line_item_id
 latest_receipt
 latest_receipt_info
 latest_expired_receipt
 latest_expired_receipt_info
 auto_renew_status
 auto_renew_product_id
 auto_renew_status_change_date
 auto_renew_status_change_date_pst
 auto_renew_status_change_date_ms

我没有得到environment和notification_type等主要字段。

这有什么问题?

这是我第一次得到这样的回应

{ latest_receipt: 'ewoJInNpZ25hdHVyZ'}

我从服务器 2 服务器通知得到的响应是第二次(一旦更新):

{ environment: 'Sandbox',
  auto_renew_status: 'false',
  latest_expired_receipt: 'ewoJIn'
}

【问题讨论】:

  • 您好,我想知道您如何处理和测试后端的 S2S 通知。我正在尝试在不续订订阅的情况下实施相同的操作。我在应用商店中提供了用于通知的 url,但是当我尝试使用沙盒进行测试购买时没有得到任何响应。
  • @VinayN S2S 通知仅适用于自动续订订阅。请参阅本文档。 developer.apple.com/documentation/storekit/in-app_purchase/…

标签: ios json iphone app-store-connect receipt-validation


【解决方案1】:

设置服务器 2 服务器通知时获得的参数与查询 verifyReceipt 时的格式不完全相同(或包含相同的字段)。

例如 environment 和 notification_type 仅在服务器 2 服务器通知中可用,而在 verifyReceipt 中不可用。

这是当苹果向您发送带有服务器 2 服务器通知的通知时获得的完整参数的示例 -

    {
    "latest_receipt": "ewoXXXXX",
    "latest_receipt_info": {
        "original_purchase_date_pst": "2019-07-29 21:13:18 America/Los_Angeles",
        "quantity": "1",
        "unique_vendor_identifier": "XXX",
        "original_purchase_date_ms": "1564459998000",
        "expires_date_formatted": "2019-08-06 04:13:17 Etc/GMT",
        "is_in_intro_offer_period": "false",
        "purchase_date_ms": "1564459997000",
        "expires_date_formatted_pst": "2019-08-05 21:13:17 America/Los_Angeles",
        "is_trial_period": "true",
        "item_id": "1452171111",
        "unique_identifier": "00000",
        "original_transaction_id": "0000000",
        "expires_date": "00000000",
        "app_item_id": "0000000",
        "transaction_id": "00000000",
        "bvrs": "00000",
        "web_order_line_item_id": "00000000",
        "version_external_identifier": "000000",
        "bid": "com.XXX",
        "product_id": "XXXXX",
        "purchase_date": "2019-07-30 04:13:17 Etc/GMT",
        "purchase_date_pst": "2019-07-29 21:13:17 America/Los_Angeles",
        "original_purchase_date": "2019-07-30 04:13:18 Etc/GMT"
    },
    "environment": "PROD",
    "auto_renew_status": "true",
    "password": "*****",
    "auto_renew_product_id": "com.XXXX",
    "notification_type": "INITIAL_BUY"
}

您的示例来自 verifyReceipt 响应。

关于服务器 2 服务器通知的文档不是很好,但最新的 wwdc 视频很棒 - https://developer.apple.com/videos/play/wwdc2019/302/

请注意,此有效负载中的许多字段现在已被视为已弃用。

【讨论】:

  • 我明白这一点,但我没有得到你提到的上述回复。我已编辑问题以显示我在服务器 2 服务器通知中得到的响应
  • 所以您确实在 S2S 通知中获得了环境。您是否尝试过查看无沙盒响应?
  • 不,一旦续订,我也会收到此回复。起初,当我购买订阅时,我只会得到最新的收据。
  • 我不明白,你清楚地说“我从服务器 2 服务器通知得到的响应是:”然后你有一个包含环境的响应那么你为什么说你不'没有看到 s2s 通知的环境字段?
  • 对此我深表歉意,续订后我第二次收到回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2019-10-14
  • 2023-02-18
  • 2023-04-08
  • 2020-06-08
  • 2016-04-19
  • 1970-01-01
相关资源
最近更新 更多