Skip to main content

iOS Receipt Validation

Validates receipt information for iOS in-app purchases.

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 Information Details

ParameterDescriptionType
receiptReceipt informationstring
productIdProduct IDstring
currencyCurrency code (KRW, JPY, USD, CNY, etc.).string
priceItem pricedouble
duplicateAllowAllow duplicate receipt validationboolean
callbackCommunication resultPlayNANOODelegate

Example

If 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");
}
});
}
}

If 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");
}
});
}
}

Communication Result

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"UserID" : "String",
"PackageName" : "String",
"OrderID" : "String",
"ProductID" : "String",
"Currency" : "String",
"Price" : "String"
}

Communication Result

Data KeyDescriptionType
UserIDUser IDstring
PackageNameApp package namestring
ProductIDProduct IDstring
OrderIDOrder IDstring
CurrencyPayment Currency Codestring
QuantityPurchase quantityinteger
PriceItem priceinteger

Error Information

Receipt validation failed
ErrorCode : 20000
ErrorMessage : ValidationFailException

App package name does not match
ErrorCode : 20002
ErrorMessage : NotMatchPackageNameException

Receipt has already been used
ErrorCode : 20005
ErrorMessage : ExistsReceiptException