결제 미처리 주문 복구 프로세스 처리에 대한 질문이 있습니다

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

유니티로 개발중이고 SDK버전은 2.4.7버전입니다.
전에 결제 미처리 주문 복구 프로세스에 대해 질문을 드렸었는데 오늘 다른 프로젝트에서 동일한 문제가 발생이 되어 다시 질문을 드립니다.
이번에는 정상적인 결제를 2건 했었고 결제할 때에는 주문 복구에 대한 코드가 없었습니다.
그리고나서 주문 복구에 대한 코드를 아래와 같이 추가하였고 다시 테스트를 했을 때는 첨부이미지와 같이 주문 복구가 성공했습니다.
첨부 이미지 좌측 상단에 기록 된 로그는 아래 코드 중 ‘NGUIDebug.Log($“order {order.OrderId} / {order.Status} Recover {(success ? “success” : “fail”)}”);’ 에 대한 로그이며
해당 주문 ID에 대한 결제 정보도 첨부이미지로 같이 추가했습니다.

제가 잘못처리한 부분이 있는지 아니면 어떤 문제인지 질문을 드립니다.

private async void RecoverPendingOrdersAsync()
{
try
{
var result = await AIT.IAPGetCompletedOrRefundedOrders();

    if (result.Orders == null || result.Orders.Length == 0)
    {
        // NGUIDebug.Log("No RecoverPendingOrders");
        return;
    }

    foreach (var order in result.Orders)
    {
        if (order.Status == CompletedOrRefundedOrdersResultOrderStatus.REFUNDED)
            continue;

        GrantProduct_recovery(order.Sku);

        var args = new IAPCompleteProductGrantArgs_0
        {
            Params = new IAPCompleteProductGrantArgs_0Params
            {
                OrderId = order.OrderId
            }
        };

        bool success = await AIT.IAPCompleteProductGrant(args);
        NGUIDebug.Log($"order {order.OrderId} / {order.Status} Recover {(success ? "success" : "fail")}");
    }
}
catch (AITException ex)
{
    Debug.LogError($"order Recover fail: {ex.ErrorCode} - {ex.Message}");
}
catch (System.Exception ex)
{
    Debug.LogError($"order Recover fail ex: {ex.Message}");
}

}

appName (선택)

2048arena

이미지 첨부

이게 출시하기 전일 경우에 발생이 될 수 있는 건가요?

이 질문글 때문에 테스트 결제에 대해서 환불처리를 아직 못하고 있는 상태입니다.

답변 부탁드립니다.

안녕하세요 :slight_smile:
테스트 결제에 대한 환불 처리는 별도의 프로세스로 진행되며, sdk 사용과는 관련이 없습니다.
관련 가이드를 전달드립니다.

결제 미처리 주문은 결제는 되었으나 상품 지급이 안된 케이스를 말씀하시는걸까요 ?
GrantProduct 를 호출해주셨는지요 ?!

using AppsInToss;
using UnityEngine;

public class IAPRecovery : MonoBehaviour
{
async void Start()
{
await RecoverPendingOrders();
}

private async System.Threading.Tasks.Task RecoverPendingOrders()
{
    try
    {
        // 미처리 완료 주문 조회
        var result = await AIT.IAPGetCompletedOrRefundedOrders();

        if (result.Orders == null || result.Orders.Length == 0)
        {
            Debug.Log("복구할 주문이 없어요");
            return;
        }

        foreach (var order in result.Orders)
        {
            if (order.Status == CompletedOrRefundedOrdersResultOrderStatus.REFUNDED)
                continue;

            // 상품 지급
            GrantProduct(order.Sku);

            // 지급 완료 처리
            var args = new IAPCompleteProductGrantArgs_0
            {
                Params = new IAPCompleteProductGrantArgs_0Params
                {
                    OrderId = order.OrderId
                }
            };

            bool success = await AIT.IAPCompleteProductGrant(args);
            Debug.Log($"주문 {order.OrderId} 복구 {(success ? "성공" : "실패")}");
        }
    }
    catch (AITException ex)
    {
        Debug.LogError($"주문 복구 실패: {ex.ErrorCode} - {ex.Message}");
    }
}

private void GrantProduct(string sku)
{
    // SKU에 따른 상품 지급 로직
    Debug.Log($"상품 지급: {sku}");
}

}

결제를 진행하고 도중에 강제로 프로세스를 중단하면 미처리 코드가 실행이 되는 건 문제없었습니다.

그러나 해당 미처리 코드가 매번 앱을 실행할때마다 같이 실행이 되는게 잘못된거 같아서 질문을 드렸었습니다.

공식 가이드에 대하여 제가 이해했을 때는 상품을 지급하는 GrantProduct(order.Sku); 코드에 상관없이 미처리 된 결제가 있었으면 1번만 실행이 되어야 하지 않았나 한건데 GrantProduct(order.Sku)이 실행이 되어야지만 더이상 미처리 주문 코드가 실행되지 않는건가요?