Подтвердить что ты не робот

В расходных квитанциях Mac App Store есть пустой хэш-код in_app на стороне сервера

Я проверяю получение покупок в приложениях (так называемых расходных материалов) для Mac App Store на стороне сервера. Ответ от серверов Apple обычно выглядит следующим образом:

    { 
      "status"=>0, 
      "environment"=>"Production", 
      "receipt" => 
        { 
          "receipt_type" => "Production", 
          "adam_id"=>410628904, 
          "bundle_id" => "com.company.product", 
          "application_version"=>"1.0.0", 
          "download_id"=>002141541230420, 
          "request_date"=>"2013-10-22 07:53:11 Etc/GMT", 
          "request_date_ms"=>"1382428391914", 
          "request_date_pst"=>"2013-10-22 00:53:11 America/Los_Angeles", 
          "original_purchase_date"=>"2011-08-22 06:05:47 Etc/GMT", 
          "original_purchase_date_ms"=>"1313993147000", 
          "original_purchase_date_pst"=>"2011-08-21 23:05:47 America/Los_Angeles", 
          "original_application_version"=>"1.0.0", 
          "in_app"=> [
            {
              "quantity"=>"1", 
              "product_id"=>"com.company.product.mac_consumable", 
              "transaction_id"=>"9123912391231", 
              "original_transaction_id"=>"51881235936908", 
              "purchase_date"=>"2013-10-22 07:52:06 Etc/GMT", 
              "purchase_date_ms"=>"1382428326000", 
              "purchase_date_pst"=>"2013-10-22 00:52:06 America/Los_Angeles", 
              "original_purchase_date"=>"2013-10-22 07:52:06 Etc/GMT", 
              "original_purchase_date_ms"=>"1382428326000", 
              "original_purchase_date_pst"=>"2013-10-22 00:52:06 America/Los_Angeles", 
              "bundle_id"=>"com.company.product"
              }
         ]
      }
    }

Но иногда мы возвращаем информацию без хэш-функции in_app:

    { 
      "status"=>0, 
      "environment"=>"Production", 
      "receipt" => 
        { 
          "receipt_type" => "Production", 
          "adam_id"=>312621904, 
          "bundle_id" => "com.company.product", 
          "application_version"=>"1.0.0", 
          "download_id"=>002141541230420, 
          "request_date"=>"2013-10-22 07:53:11 Etc/GMT", 
          "request_date_ms"=>"1382428391914", 
          "request_date_pst"=>"2013-10-22 00:53:11 America/Los_Angeles", 
          "original_purchase_date"=>"2011-08-22 06:05:47 Etc/GMT", 
          "original_purchase_date_ms"=>"1313993147000", 
          "original_purchase_date_pst"=>"2011-08-21 23:05:47 America/Los_Angeles", 
          "original_application_version"=>"1.0.0", 
          "in_app"=> []
      }
    }

Означает ли это, что квитанции недействительны? Должно ли поле in_app всегда заполняться? Или должны ли эти квитанции считаться действительными, и почему информация in_app пуста, то?

4b9b3361

Ответ 1

Означает ли это, что квитанции недействительны?

Нет, значение status 0, которое согласно документам означает, что квитанция действительна. Он просто не содержит никаких "подкатегорий" покупки в приложении.

Должно ли поле in_app всегда заполняться?

Нет, возможно, что квитанция не содержит никаких покупок в приложении.


По-видимому, ваша проблема в том, что по какой-то причине квитанция, которую ваше приложение отправляет на ваш сервер, не содержит информации о покупке в приложении, даже если вы ожидаете ее.

Когда транзакция покупки внутри приложения входит в "купленное" состояние, квитанция должна быть обновлена ​​на клиентском устройстве - вы должны убедиться, что не пытаетесь отправить квитанцию ​​на свой сервер, прежде чем это произойдет.

Еще одна вещь, которую следует рассмотреть, - это SKReceiptRefreshRequest (доступно только с 10.9, хотя) - в некоторых краевых условиях квитанция может быть не актуальной, и вам нужно будет дождаться ее обновления до отправки квитанции выкуп на ваш сервер.