2013-10-22 5 views
13

서버 측 Mac App Store에 대한 인앱 구매 (소위 소모품)의 영수증을 확인합니다.Mac App Store 소모품 영수증에 서버 측 유효성 검사에서 비어있는 in_app 해시가 있습니다.

{ 
     "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 정보가 비어있는 이유는 무엇입니까?

+0

동일한 문제가 있습니다. 무슨 일이 있었는지 알아야 해! 사과 거래가 거부 당했을 수 있습니까? 메시지를 보여줘야할까요? 이 경우 계정에 크레딧이 적용되지 않는 것 같습니다. – Steeve17

답변

3

영수증이 유효하지 않다는 의미입니까?

아니요 statusthe docs 값에 따라 수신이 유효하다는 것을 의미하는 0이다. 인앱 구매 "하위 영수증"을 포함하지 않습니다.

in_app 필드에 항상 값을 입력해야합니까?

아니요, 영수증에는 인앱 구매가 포함되어 있지 않을 수 있습니다.


그래서 분명히 문제는 어떤 이유로 영수증에 대한 귀하의 앱이 백엔드에 보내는 것은 당신이에 기대에도 불구하고, 응용 프로그램 내 구입에 대한 정보를 포함하지 않습니다.

인앱 구매 거래가 '구매 됨'상태가되면 영수증이 클라이언트 기기에서 최신 상태 여야합니다. 이렇게되기 전에 영수증을 서버에 보내지 않도록해야합니다.

또 하나의 시도는 SKReceiptRefreshRequest입니다 (10.9 이후에만 사용 가능). 일부 가장자리 조건에서는 영수증이 최신 상태가 아니므로 영수증 사용을 보내기 전에 업데이트가 기다리는 것이 좋습니다. 백엔드에 요청하십시오.

+0

우리는 사과에서 이러한 빈 영수증에 대한 현금을받지 않습니다, 그래서 분명히 이러한 명령은 사과쪽으로 가지 않았다. 나는이 사건을 재현 할 수 있기를 바랍니다. 우리가 추적하는 것이 흥미로울 수도 있습니다. 유효하지 않은 신용 카드 정보 또는 불충분 한 금액 일 수 있습니까? – Steeve17

+2

@ Steeve17 우리는 같은 문제가 있습니다. "in_app \": []을 할 때 정확히 무슨 일이 일어 났는지 이해할 수 있었습니까? 어떤 힌트에도 매우 감사 할 것입니다. – tyrex