Android 收据验证
验证 Android 应用内购买的收据信息。
调用信息
// Unity IAP를 사용하는 경우
IAP.Android(string receipt, PlayNANOODelegate callback) {}
IAP.Android(string receipt, bool duplicateAllow, PlayNANOODelegate callback) {}
// Unity IAP를 사용하지 않는 경우
IAP.Android(string receipt, string skuDetails, string signature, PlayNANOODelegate callback) {}
IAP.Android(string receipt, string skuDetails, string signature, bool duplicateAllow, PlayNANOODelegate callback) {}
调用详细信息
| 参数 | 说明 | 类型 |
|---|---|---|
| receipt | 表代码 | string |
| skuDetails | Android 商品信息 | string |
| signature | Android Signature | string |
| duplicateAllow | 是否允许重复收据验证 | boolean |
| callback | 通信结果 | PlayNANOODelegate |
源代码
using PlayNANOO;
public class PlayNANOOExample : MonoBehaviour
{
Plugin plugin;
void Awake()
{
plugin = Plugin.GetInstance();
}
// Unity IAP를 사용하는 경우
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
plugin.IAP.Android(args.purchasedProduct.receipt, (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"]);
Debug.Log(values["PurchaseState"]);
}
else
{
Debug.Log("Fail");
}
});
}
// Unity IAP를 사용하지 않는 경우
public void AndroidValidate()
{
string receipt = "string";
string skuDetails = "string";
string signature = "string";
plugin.IAP.Android(receipt, skuDetails, signature, (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"]);
Debug.Log(values["PurchaseState"]);
}
else
{
Debug.Log("Fail");
}
});
}
}
通信结果
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"UserID" : "String",
"PackageName" : "String",
"OrderID" : "String",
"ProductID" : "String",
"Currency" : "String",
"Quantity" : "Integer",
"Price" : "String",
"PurchaseState" : "String"
}
结果详细信息
| 数据键 | 说明 | 类型 |
|---|---|---|
| UserID | 用户识别 ID | String |
| PackageName | 应用包名 | String |
| ProductID | 支付商品 ID | String |
| OrderID | 订单 ID | String |
| Currency | 支付货币代码 | String |
| Quantity | 购买数量 | integer |
| Price | 支付商品金额 | integer |
| PurchaseState | 验证结果purchase : 正常支付wait : 处理中cancel : 验证失败 | String |
wait 状态处理
如果状态为 wait,请重新发送验证请求。
错误信息
收据验证失败的情况 ErrorCode : 20000 ErrorMessage : ValidationFailException
应用程序包名不匹配的情况 ErrorCode : 20002 ErrorMessage : NotMatchPackageNameException
收据已被使用的情况 ErrorCode : 20005 ErrorMessage : ExistsReceiptException