iOS Receipt Validation
Validates receipt information for iOS in-app purchases.
When using Unity IAP 5.0 (StoreKit 2)
This method validates Base64 receipts from Unity IAP 4.x (StoreKit 1). If you have migrated to Unity IAP 5.0 (StoreKit 2), use iOS Receipt Validation (StoreKit 2) which validates the signed transaction (JWS).
Call Information
IAP.IOS(string receipt, string productId, string currency, double price, PlayNANOODelegate callback) {}
IAP.IOS(string receipt, string productId, string currency, double price, bool duplicateAllow, PlayNANOODelegate callback) {}
Call Details
| Parameter | Description | Type |
|---|---|---|
| receipt | Receipt information | string |
| productId | Payment product ID | string |
| currency | Currency code (KRW, JPY, USD, CNY...). | string |
| price | Payment amount | double |
| duplicateAllow | Allow duplicate receipt validation | boolean |
| callback | Communication result | PlayNANOODelegate |
Example
When using Unity IAP Service
using PlayNANOO;
public class PlayNANOOExample : MonoBehaviour
{
Plugin plugin;
void Awake()
{
plugin = Plugin.GetInstance();
}
// Unity IAP Service
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
plugin.IAP.IOS(args.purchasedProduct.receipt, "PRODUCT_ID", "CURRENCY", 100, (status, errorMessage, jsonString, values) => {
if (status.Equals(Configure.PN_API_STATE_SUCCESS))
{
Debug.Log(values["UserID"]);
Debug.Log(values["PackageName"]);
Debug.Log(values["OrderID"]);
Debug.Log(values["ProductID"]);
Debug.Log(values["Currency"]);
Debug.Log(values["Quantity"]);
Debug.Log(values["Price"]);
}
else
{
Debug.Log("Fail");
}
});
}
}
When not using Unity IAP Service
using PlayNANOO;
public class PlayNANOOExample : MonoBehaviour
{
Plugin plugin;
void Awake()
{
plugin = Plugin.GetInstance();
plugin.IAP.IOS("RECEIPT", "PRODUCT_ID", "CURRENCY", 100, (status, errorMessage, jsonString, values) => {
if (status.Equals(Configure.PN_API_STATE_SUCCESS))
{
Debug.Log(values["UserID"]);
Debug.Log(values["PackageName"]);
Debug.Log(values["OrderID"]);
Debug.Log(values["ProductID"]);
Debug.Log(values["Currency"]);
Debug.Log(values["Quantity"]);
Debug.Log(values["Price"]);
}
else
{
Debug.Log("Fail");
}
});
}
}
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"UserID" : "String",
"PackageName" : "String",
"OrderID" : "String",
"ProductID" : "String",
"Currency" : "String",
"Price" : "String"
}
Response Details
| Data Key | Description | Type |
|---|---|---|
| UserID | User identifier ID | string |
| PackageName | App package name | string |
| ProductID | Payment product ID | string |
| OrderID | Order ID | string |
| Currency | Payment currency code | string |
| Quantity | Purchase quantity | integer |
| Price | Product price | integer |
Error Information
When receipt validation fails ErrorCode : 20000 ErrorMessage : ValidationFailException
When the application package name does not match ErrorCode : 20002 ErrorMessage : NotMatchPackageNameException
When the receipt has already been used ErrorCode : 20005 ErrorMessage : ExistsReceiptException