문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 : 5.7.0
- 프로젝트명 : 내일의 용사
- 스테이터스 코드 :
- 에러 코드 : 400
- 에러 메시지 : bad token, 잘못된 token 입니다
안녕하세요. IAP관련 영수증 검증 문의를 드립니다.
코드는 문서에 예시로 올려주신 대로 작성해서 사용 중이고,
필요한 설정은 대부분 한 것 같습니다.
구글에 클로즈테스트 버전으로 올려서 핸드폰에 다운받아서 돌리면
구글에서 결재 완료가 넘어오는데, 뒤끝서버에 검증을 보내면 400이 돌아오네요.
어떤 부분이 문제가 있을지 감이 좀 오지 않아서 logcat으로 떠온 디버깅 메시지와
코드를 올려 드리고 도움을 요층 드리고자 합니다 ^^;
확인 부탁 드립니다~
디버깅 로그
2022-10-04 14:11:42.422 10711 10736 Info Unity IAP_receipt : {“Payload”:"{“json”:"{\“orderId\”:\“GPA.3337-4565-9189-61763\”,\“packageName\”:\“com.donkatsu.bot\”,\“productId\”:\“dia_1680\”,\“purchaseTime\”:1664860300553,\“purchaseState\”:0,\“purchaseToken\”:\“ddddeicafjaeofmhnlhdfafn.AO-J1OxN5Al7bSNzJLk9isyhJdKdNI2Q5GgSZM1OpwkZDUZiQRrITJegU8QtroFVHehBI5Gsw6eIAb0F4ECXWLG996NHrSXEqw\”,\“quantity\”:1,\“acknowledged\”:false}",“signature”:“kr8PGWhQsVoeJEfWl1l7MZ2hHaHTxiW57p0rOepQYgoJPW6YRcw7e84KqxB2l4TSehnsyA2RSB11c+1oJrWulEBYM05FEVZeNj7urBO2sH5fBEJXdfLhGHriwKHfnZ1JwQOmxz5mPTGmZ1IvnUu11Ru+NsqPM1ikcY8PITVONgM6t4HwAqVacznG9R2z2nwz+XKYcGRGJIeQ8QUtKyENjMr0dgMkokaYl3q/+7efGe34Dik7b3k61jxT9Px0PWDuDUaFHG5Dw8egqS7/1KBOkXR3pDVTc/hbS/o3qmANaIRtlZOwi1SiMcluXiaSabHi5Ayo671WIA5qTdzdweFe8w==”,“skuDetails”:["{\“productId\”:\“dia_1680\”,\“type\”:\“inapp\”,\“title\”:\"\ub2e4\uc774\uc544X1680 (\ub0b4\uc77c\uc758 \uc6a9\uc0ac - \uad6d\uc0b0 \ubc29\uce58\ud615 \ub3c8\uae4c\uc2a4 RPG)\
2022-10-04 14:11:43.367 10711 10736 Info Unity IAP_Result : 400
2022-10-04 14:11:43.368 10711 10736 Info Unity ProcessPurchase: FAIL. Unrecognized product: ‘dia_1680’
2022-10-04 14:11:43.368 10711 10736 Info Unity bad token, 잘못된 token 입니다
해당 코드
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
Debug.Log(args.purchasedProduct.receipt);
BackendReturnObject validation = Backend.Receipt.IsValidateGooglePurchase(args.purchasedProduct.receipt, “receiptDescription”, false);
Debug.Log($“IAP_Result : {validation.GetStatusCode()}”);
if (validation.IsSuccess()) {
// 구매 성공한 제품에 대한 id 체크하여 그에 맞는 보상
// A consumable product has been purchased by this user.
if (String.Equals(args.purchasedProduct.definition.id, lastRequestedProductId, StringComparison.Ordinal))
{
Debug.Log(string.Format(“ProcessPurchase: PASS. Product: ‘{0}’”, args.purchasedProduct.definition.id));
// The consumable item has been successfully purchased, add 100 coins to the player's in-game score.
// ScoreManager.score += 100;
BackendReturnObject bro = ApplyPurchase(args.purchasedProduct.definition.id);
if (bro.IsSuccess())
return PurchaseProcessingResult.Complete;
else
return PurchaseProcessingResult.Pending;
}
// Or ... an unknown product has been purchased by this user. Fill in additional products here....
else
{
Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
}
} else {
// dOr ... an unknown product has been purchased by this user. Fill in additional products here....
//Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
Debug.Log(validation.GetMessage());
}
// Return a flag indicating whether this product has completely been received, or if the application needs
// to be reminded of this purchase at next app launch. Use PurchaseProcessingResult.Pending when still
// saving purchased products to the cloud, and when that save is delayed.
return PurchaseProcessingResult.Pending;
}