영수증 검증 실패

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.11.7
  • 프로젝트명 : 원소전쟁
  • 스테이터스 코드 : 400
  • 에러 코드 : BadParameterException
  • 에러 메시지 : bad request. 잘못된 request 입니다

jwt 36시간 이후에도 똑같은 증상이 반복되어 jwt를 재발급 받아 수정한지 12시간 경과한 상태이고 같은 에러가 반복해서 뜹니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BackEnd;
using UnityEngine.UI;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Security;
using TMPro;

public class FlaskStore : MonoBehaviour,IStoreListener
{
    public GameObject adRemove;
    private string productId;
    private IStoreController storeController;
    public Text owendTBC;

    void Start()
    {
        InitIAP();
    }
    private void InitIAP()
    {
        // var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
        var module = StandardPurchasingModule.Instance();

        ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
        
        builder.AddProduct("flask30", ProductType.Consumable);

        UnityPurchasing.Initialize(this, builder);
    }
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        storeController = controller;
        // CheckNonConsumable(adRemove)
    }
    public void OnInitializeFailed(InitializationFailureReason error) // 초기화 실패시
    {
        Debug.Log("IAP 초기화 실패" + error);
    }
    public void OnInitializeFailed(InitializationFailureReason error, string message) // 초기화 실패시 + 메시지
    {
        Debug.Log("IAP 초기화 실패" + error + message);
    }
    public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) //구매 실패시
    {
        throw new System.NotImplementedException();
    }
    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) // 결제 성공시
    {
        
        //Message2의 inputfield에 영수증을 출력
        GameObject.Find("Message2").GetComponent<InputField>().text = args.purchasedProduct.receipt;
        Backend.Receipt.IsValidateGooglePurchase(args.purchasedProduct.receipt , "receiptDescription", false, (callback) =>
        {
            if(callback.IsSuccess())
            {
                Backend.TBC.ChargeTBC(args.purchasedProduct.receipt, "ChargeTBC 테스트", (callback) =>
                    {
                        if (callback.IsSuccess())
                        {
                            Debug.Log("구매 성공 " + args.purchasedProduct.definition.id);
                        }
                        else 
                        {
                            Debug.LogError("구매 실패. 오류 코드: " + callback.GetErrorCode() + "\n 오류 메시지: " + callback.GetMessage() + "\n GetStatusCode: " + callback.GetStatusCode());
                            Debug.Log(args.purchasedProduct.receipt);
                            GameObject.Find("Message").GetComponent<TextMeshProUGUI>().text = args.purchasedProduct.receipt;
                            
                        }
                    });
            }
            else //이부분으로 빠집니다
            {
                Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
                GameObject.Find("Message").GetComponent<TextMeshProUGUI>().text = callback.GetStatusCode() + "\n" + callback.GetErrorCode() + "\n" +  callback.GetMessage();
            }
        });
    
        return PurchaseProcessingResult.Complete;
    }
    public void Purchase(string productID)
    {
        //버튼 이벤트 연결
        Product p = storeController.products.WithID(productId);

        storeController.InitiatePurchase(p);
    }
이하생략

Message2에 들어가는 정보는 아래와 같습니다

{"Payload":"{\"json\":\"{\\\"orderId\\\":\\\"GPA.3337-3442-8035-75595\\\",\\\"packageName\\\":\\\"com.FTN_Soft.ElementalWar\\\",\\\"productId\\\":\\\"flask50\\\",\\\"purchaseTime\\\":1716433099080,\\\"purchaseState\\\":0,\\\"purchaseToken\\\":\\\"khkhafkhnpfeockiacnpbocb.AO-J1OxXJwFiHZ2wTX0w1lgOo1i8Pt3jGJHRsMOlUcH-HXdd3XweNeFK-xJreABEnAi4M6A97rnFvhL-9muO2vtSY0SC5g2ozbv5DcRgzhnow407Ngsafus\\\",\\\"quantity\\\":1,\\\"acknowledged\\\":false}\",\"signature\":\"bKmSXtUYx/JoahDaFF7aO8t/k8DgCQKoLhiXL322g/HmxOsNcGBZc/taR3zMDQlxlFZOmgAquVqYx65XN6dgvIoawQh8nhT6SfYdPhE/MY3zVL+ZX+VaE8ol5R0bNKbZoQVg3EldE/qbIyIuKQhhYZjr6cwosasqJiZQFMVC8542PktELyiJTOYGIIsdWDOEhh2Nuf3ZS0FSJCFtJ5ARNTBTE+SUuucDvkzfjyLvTdLSCCSp6E65FxIuWdEewoIfR+kXqKpPsJm/WB2XYdnonnKJlCtKKfI0uGLpiRdCsr1SOGenm4Q/Q8quIl59xOb1gV2ZuhMaO5GszEqh8gESQA==\",\"skuDetails\":[\"{\\\"productId\\\":\\\"flask50\\\",\\\"type\\\":\\\"inapp\\\",\\\"title\\\":\\\"\\ud50c\\ub77c\\uc2a4\\ud06c50 (\\uc6d0\\uc18c\\uc804\\uc7c1)\\\",\\\"name\\\":\\\"\\ud50c\\ub77c\\uc2a4\\ud06c50\\\",\\\"iconUrl\\\":\\\"https:\\\\/\\\\/lh3.googleusercontent.com\\\\/AmhFsteiQ2RAeuUHnWTy0NhNRQTxxqX5O5_fU7XNIPydT03rtcDYm0NDUcylzJSu-w\\\",\\\"description\\\":\\\"\\uae30\\ubcf8 \\ud50c\\ub77c\\uc2a4\\ud06c 50\\uac1c\\\",\\\"price\\\":\\\"\\u20a94,900\\\",\\\"price_amount_micros\\\":4900000000,\\\"price_currency_code\\\":\\\"KRW\\\",\\\"skuDetailsToken\\\":\\\"AEuhp4LKp2pdRwe87ThtrAGfVbnsQ3VxYyTiHC-zhbCR54n0vwcwA60iXN4kOlDwtRwizwckQgaQSY7MoqQ_m6cgTXurIipkoHswC4DPXqhNJjKPBQ0=\\\"}\"]}","Store":"GooglePlay","TransactionID":"khkhafkhnpfeockiacnpbocb.AO-J1OxXJwFiHZ2wTX0w1lgOo1i8Pt3jGJHRsMOlUcH-HXdd3XweNeFK-xJreABEnAi4M6A97rnFvhL-9muO2vtSY0SC5g2ozbv5DcRgzhnow407Ngsafus"}

구매토큰 복사

khkhafkhnpfeockiacnpbocb.AO-J1OxXJwFiHZ2wTX0w1lgOo1i8Pt3jGJHRsMOlUcH-HXdd3XweNeFK-xJreABEnAi4M6A97rnFvhL-9muO2vtSY0SC5g2ozbv5DcRgzhnow407Ngsafus

토큰은 일치하는 것 같은데, 어떤 부분이 잘못 된 걸까요?

안녕하세요 개발자님.

확인해본 결과, Google Play Android Developer API가 활성화 되지 않아 발생하는 것으로 추측되는데, 해당 기능을 '사용’으로 되어있는지 확인해주시면 감사하겠습니다. 아래 링크를 참고해주세요.