2016-05-29 30 views
0

我正在嘗試爲我的應用實施購買驗證。我發現我可以將購買收據發送到我的服務器以與Apple進行驗證。但是,我無法找出將NSData發佈到我的URL進行驗證的正確方法。像這樣的:使用iOS Xamarin解析應用內購買收據的示例?

public void CompleteTransaction (SKPaymentTransaction transaction) { 
    var productId = transaction.Payment.ProductIdentifier; 
    NSUrl receiptURL = NSBundle.MainBundle.AppStoreReceiptUrl; 
    NSData theData = NSData.FromUrl (receiptURL); 

    RestRequest request = new RestRequest(validationURL, Method.POST); 
    request.AddBody(theData); // ?? 
    restClient.ExecuteAsync<bool>((response) => 
     { 
      FinishTransaction(transaction, response.Data); 
     }); 
} 

有沒有人有一個例子?我正在使用RestSharp。

謝謝!

  • davevr

回答

1

OK,找到如何做到這一點。訣竅是將收據解析爲字典,然後將密鑰從中抽出。示例代碼:

public void CompleteTransaction (SKPaymentTransaction transaction) { 
    var productId = transaction.Payment.ProductIdentifier; 
    NSUrl receiptURL = NSBundle.MainBundle.AppStoreReceiptUrl; 
    NSData receipt = NSData.FromUrl (receiptURL); 

    // here is the code I was missing 
    NSDictionary requestContents = NSDictionary.FromObjectAndKey((NSString)receipt.GetBase64EncodedString(
       NSDataBase64EncodingOptions.None), 
       (NSString)"receipt-data"); 

    string receiptData = (requestContents["receipt-data"] as NSString).ToString(); 

    RestRequest request = new RestRequest(<url to your server>, Method.POST); 

    request.AddParameter ("receipt-data", receiptData); 

    apiClient.ExecuteAsync<bool>(request, (response) => 
     { 
      FinishTransaction (transaction, response.Data); 
     }); 

一旦完成,您可以在Apple服務器上進行驗證。網絡上有很多示例代碼。

+0

嗨戴夫, 我能夠從我的iOS xamarin項目生成收據數據。但是當我嘗試在蘋果上進行驗證時,它給我提供了2100的狀態。 這意味着令牌無效。 你能告訴我這裏有什麼問題嗎? – Hetal

+0

你的意思是,在你的服務器端? –