영수증 검증관련 질문

문의를 남기실 경우 다음 항목을 작성해 주시면 빠른 답변 처리에 도움이 됩니다.

  • 프로젝트명 : 데드킹
  • 뒤끝SDK 버전 : 5.0.0
  • 에러 코드 :

영수증 검증을 넣었는데 허위 결제로 생각되는 결제들이 발생하고 있습니다.

현상파악 및 수정해야되는 부분을 알려주시면 감사하겠습니다.

아래는 영수증 검증부 코드를 첨부합니다.

public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
PurchaseProcessingResult result;

        // if any receiver consumed this purchase we return the status
        bool consumePurchase = false;
        bool resultProcessed = false;

        foreach (IAPButton button in activeButtons)
        {
            if (button.productId == e.purchasedProduct.definition.id)
            {
                result = button.ProcessPurchase(e);

                if (result == PurchaseProcessingResult.Complete)
                {

                    consumePurchase = true;
                }

                resultProcessed = true;
            }
        }

        foreach (IAPListener listener in activeListeners)
        {
            result = listener.ProcessPurchase(e);

            if (result == PurchaseProcessingResult.Complete)
            {

                consumePurchase = true;
            }

            resultProcessed = true;
        }

        // we expect at least one receiver to get this message
        if (!resultProcessed)
        {

            Debug.LogError("Purchase not correctly processed for product \"" +
                             e.purchasedProduct.definition.id +
                             "\". Add an active IAPButton to process this purchase, or add an IAPListener to receive any unhandled purchase events.");

        }

        //return (consumePurchase) ? PurchaseProcessingResult.Complete : PurchaseProcessingResult.Pending;

        if (consumePurchase)
        {
            //뒤끝 영수증 검증 처리
            BackendReturnObject validation = Backend.Receipt.IsValidateGooglePurchase(e.purchasedProduct.receipt, "receiptDescription", false);

            // 영수증 검증에 성공한 경우
            if (validation.IsSuccess())
            {
                Debug.Log("영수증 검증 성공");
                return PurchaseProcessingResult.Complete;
            }
            // 영수증 검증에 실패한 경우 
            else
            {
                Debug.Log("영수증 검증 실패");
                return PurchaseProcessingResult.Pending;
            }
        }

        return (consumePurchase) ? PurchaseProcessingResult.Complete : PurchaseProcessingResult.Pending;

    }

안녕하세요 개발자님

우선 올려주신 코드에서 뒤끝 영수증 검증하는 부분은 별다른 문제가 없어 보입니다.

다만 결제처리 콜백 함수단을 보니,

정확히 어떤 처리를 하는 함수인지는 모르겠으나, IAPListener와 IAPButton을 순회하면서 어떤 결제인지 확인하시는 것 이신가요??

해당 방법보다는 ProcessPurchase 콜백 함수의 인자값으로 들어있는 PruchaseEventArgs 값을 이용하여 해당 값에 들어있는
(첨부해주신 코드 기준으로)
e.purchasedProduct.definition.type 을 이용하여 consumePurchase인지 확인 후 뒤끝 영수증 검증 함수를 호출하시면 로직이 개선될 수 있을 것 같습니다.

또한 e.purchaseProduct.definition에 포함되어있는 id 등을 이용하여 확인 로직을 추가하거나,

해당 값을 영수증 검증 함수 마지막 인자 값인 description에 추가해주시면 로그 등을 확인하실 때 더욱 편하게 확인하실 수 있으실 것 같습니다


마지막으로 올려주신 함수를 봐서는 어떤 부분에서 허위결제라고 판단되는 부분이 있으신 지 잘모르겠는데요,
해당 부분을 알려주실 수 있으신가요?