혹시 첫 출시가 안되면 프로모션 기능 테스트가 안되나요?

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

질문 / 문제 해결

내용을 설명해주세요

혹시 첫 출시가 안되면 프로모션 기능 테스트가 안되나요?
현재 첫 검수 올라가 있는 중인데요.
프로모션 코드를 보내도 응답이 오지 않습니다.
정확히는 TEST 코드나 실제 코드를 보내면 지급이 되었다고는 뜨는데
콜백이 오지 않아서 계속 중복지급이 되고 있습니다.
콜백이 SUCCESS로 와야 지급완료 처리를 하고 다시 안보낼 수 있는데 그게 안되고 있습니다.

appName (선택)

circleleap

지금 프로모션 관련된게 계속 문의글 올라오는거 보면 뭔가 문제가 있는거 같은데 빠른 조치지금 프로모션 관련된게 계속 문의글 올라오는거 보면 뭔가 문제가 있는거 같은데 빠른 조치 부탁드립니다.

@seonjeong

이거 저 같은 경우에는 프로모션을 달성하고 요청을 보냈는데 아예 응답이 안오고 있습니다.

PENDING 상태가 아니고 응답이 안옵니다.

그런데 토스측의 상단 토스트 메시지로는 지급이 되었다고 뜹니다.

제쪽에서는 아예 응답이 안오니까 지급처리를 못하고 있고요.

안녕하세요 :slight_smile:
프로모션 검토가 완료된 이후, 테스트 프로모션 코드로 지급 확인 API를 호출해주셨을까요 ?

프로모션 검토가 완료된 이후, 테스트 프로모션 코드로 지급 확인 API를 호출해주셨을까요 ?


호출 했습니다.

테스트 이후에 실제 프로모션 코드를 넣고 api 호출 시에 응답이 안왔습니다.
토스에서 나오는 토스트박스로 지급됐다고는 출력됐었고요.

grantPromotionReward 이 api 응답이 오지 않으신걸까요 ?
관련 로그를 찾을 수 없어, 자세한 정보를 공유주시면 다시 찾아보겠습니다 :cry:

// 5. 프로모션 지급 요청 (Unity → JS → React)async grantPromotionReward(promotionCode, amount) {if (!window.ReactAPI?.grantPromotionReward) {this.sendResultToUnity(“OnGrantPromotionRewardResult”, { status: “ERROR”, message: “ReactAPI not found” });return;}    
const result = await window.ReactAPI.grantPromotionReward(promotionCode, amount);
    
    // result는 { key: string } 또는 { errorCode: string, message: string } 또는 'ERROR' 또는 undefined
    if (!result) {
         this.sendResultToUnity("OnGrantPromotionRewardResult", { status: "NOT_SUPPORTED" });
         return;
    }

    if (result === 'ERROR') {
         this.sendResultToUnity("OnGrantPromotionRewardResult", { status: "ERROR" });
         return;
    }

    if (result.key) {
         this.sendResultToUnity("OnGrantPromotionRewardResult", { status: "SUCCESS", key: result.key });
    } else if (result.errorCode) {
         this.sendResultToUnity("OnGrantPromotionRewardResult", { status: "FAIL", errorCode: result.errorCode, message: result.message });
    }
}

제 UnityBridge.js 함수 일부입니다.

이 코드는 제가 다른 토스앱 런칭 했을 때 쓰던 코드 그대로인데 다른 앱들은 여기에 값이 잘 들어와서

실제 유니티에서 선언된

public void OnGrantPromotionRewardResult(string jsonResult)
{

    Debug.Log($"Promotion Result Received: {jsonResult}");

    try

    {

        var result = JsonUtility.FromJson<PromotionResult>(jsonResult);            

        switch (result.status)

        {

            case "SUCCESS":

                Debug.Log($"Point Grant Success: {result.key}");

                GameManager.Instance.PromotionGrantedStatus = 1;

                break;

            case "FAIL":

                Debug.LogError($"Point Grant Failed: {result.message} (Code: {result.errorCode})");

                break;

            case "NOT_SUPPORTED":

                Debug.LogError("Toss App Version is too old. Not Supported.");  

                break;

            case "ERROR":

            default:

                Debug.LogError("System Error Occurred");

                break;

        }

    }

    catch (System.Exception e)

    {

        Debug.LogError($"JSON parsing error: {e.Message}");

    }

}

이쪽으로 잘 들어오고
Debug.Log($“Promotion Result Received: {jsonResult}”);
여기에 로그도 잘 남습니다.

circleleap 앱만 Debug.Log($“Promotion Result Received: {jsonResult}”); 이 로그에 아무것도 남지 않습니다.

토스에서 처리는 된거 같은데 왜 응답을 안주는지 모르겠어요.

오후 2시 50분 전후로 다시 프로모션을 테스트 했을 때도 계속 중복해서 지급이 되고 있습니다.

확인 좀 부탁드립니다.

중복지급 관련 처리는 개발사에서 직접 작업 해서 처리 해야하는걸로 알고 있긴 합니다. 그래서 토스에서 지급 키를 통한 지급 여부등을 찾을수 있는 API 를 개발해주신걸로 알고 있고요.

중복처리 문제가 아니고 응답이 안와서 중복처리를 못하는게 문제입니다.

grantPromotionRewardForGame 호출 시 result가 아예 안온다는 말씀이시죠..? 신기하네요. 로그를 심어서 확인을 해보셨나요? 왜냐하면, 저흰 출시를 안했는데도 테스트 프로모션이 호출되고 반환되었었거든요..

01KE... 로 프로모션 지급 시도하신 로그 확인하였습니다! 프로모션이 실행중이 아니에요 라는 메시지가 반환되었었네요.

방금 3:44 분에 프로모션 실제로 켜고 다른 유저 기기 빌려서 테스트 했습니다.

이때도 똑같이 문제가 발생했어요.

지금은 문제가 생겨서 다시 프로모션을 껐는데

이때도 똑같이 응답 메시지가 안왔습니다.

혹시 이 로그도 확인가능할까요?

제가 같은 코드로 지금 4개째 토스에 출시 했는데요. 이 앱만 안되고 있습니다. 그래서 미치겠어요.

그런데 이것도 이상합니다. 위에 2시 50분에 나온 로그도 이상한데요.

프로모션 실행중이 아니라고 떴는데

왜 토스측의 토스트메시지가 “x원이 지급되었습니다.” 이게 뜨는건가요?

실행중이 아니면 토스 메시지도 안떠야 되는거 아닌가요?

2026-01-14 15:43:15.000에 {"resultType":"SUCCESS","success":{"key":"Znzkgs..."}}와 같이 응답이 나간 것으로 확인됩니다!

그럼 토스에서는 제대로 success로 주는데 제가 수신을 못하고 있는 상태로 보면 되겠네요?

일단 제쪽에서 원인을 찾아보고 다른 방법으로 처리해보겠습니다.

1개의 좋아요