고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.
커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.
문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 :
- 프로젝트명 :
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
현재 인앱 결제크랙을 방지하기위해 영수증 검증 코드를 넣었는데,
내부테스트를 통한 테스트카드로 승인요청을 테스트해보니, bad request, 잘못된 request 입니다. 에러가 발생합니다.
JWT와 보고서 버킷 URL은 정상적으로 완료했으며 구글 클라우드 플랫폼의 두가지 API가 전부 활성화 되어 있는 것을 확인하였습니다.
구글 개발자 콘솔 권한관련도 개발자 문서대로 전부 활성화가 되어있는 것도 확인하였습니다.
그리고 비슷한 문의가 있는 것 같아 인앱상품 설명을 강제로 캐싱하여 (설명 수정) 적용해보았는데도 똑같은 에러가 발생합니다. 코드에 문제가있나요?
구글플레이콘솔에는 정상결제내역이 뜹니다.
프로젝트 명은 DM으로 전송했습니다.
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
string productId = args.purchasedProduct.definition.id;
string receipt_Json = args.purchasedProduct.receipt;
decimal price = args.purchasedProduct.metadata.localizedPrice;
string currency = args.purchasedProduct.metadata.isoCurrencyCode;
// 영수증 검증
decimal iapPrice = args.purchasedProduct.metadata.localizedPrice;
string iapCurrency = args.purchasedProduct.metadata.isoCurrencyCode;
BackendReturnObject validation = Backend.Receipt.IsValidateGooglePurchase(receipt_Json, "receiptDescription", iapPrice, iapCurrency);
if (validation.IsSuccess())
{
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.
Debug.Log($"[결제 검증 성공] - {productId}");
Base_Canvas.instance.Get_MainGame_Error_UI().Initialize($"결제 검증 성공 : {productId}");
if (Enum.TryParse(productId, out IAP_Holder holder))
{
Base_Canvas.instance.Get_UI("UI_Reward");
Utils.UI_Holder.Peek().GetComponent<UI_Reward>().GetIAPReward(holder);
_ = Base_Manager.BACKEND.WriteData();
onPurchaseSuccessCallback?.Invoke();
onPurchaseSuccessCallback = null;
}
else
{
Debug.LogError($"[ERROR] IAP_Holder Enum에 없는 productId: {productId}");
}
}
else
{
Debug.LogError($"[결제 검증 실패] - {productId}, Error: {validation.GetMessage()}");
Base_Manager.BACKEND.Log_Try_Crack_IAP(productId, validation.GetMessage());
Base_Canvas.instance.Get_MainGame_Error_UI().Initialize($"결제 검증에 실패하였습니다 : {validation.GetMessage()}");
}
return PurchaseProcessingResult.Complete;
}