planetarium / NineChronicles

Unity client application for Nine Chronicles, a fully decentralized idle RPG powered by the community.
https://nine-chronicles.com/
GNU Affero General Public License v3.0
359 stars 149 forks source link

[시즌패스] 시즌패스 구매 불가 현상 #5693

Closed QgamesGeonPyoNoh closed 1 day ago

QgamesGeonPyoNoh commented 3 weeks ago

APV version info

v200220

Client version info

v220.0.0

Device

Android, iOS

detailed device info

Android 12, iOS 17

account address info

0x3146FE0E47A1998e14cd8a33640e3648A5A90276

avatar address info

No response

purchase receipt info

No response

What happened?

[내용] 시즌패스 구매 불가 현상

https://github.com/user-attachments/assets/2a071820-b840-47f2-a441-a550727f79ba

How to reproduce the issue

[재현 스텝]

  1. 메인로비 - 시즌패스 클릭
  2. 잠금 해제 버튼 클릭
  3. 시즌패스 가격이 0.00으로 출력되며 구매 불가 현상 확인

[Should be] 시즌패스 금액이 22,000원 / 44,000으로 출력되며 구매가 가능해야 합니다.

Relevant log output

[2024-8-22 05:40:50] [IDetailedStoreListener PurchaseFail] reason: ProductUnavailable, Product: Nekoyume.IAPStore.IAPStoreManager:UnityEngine.Purchasing.IDetailedStoreListener.OnPurchaseFailed(Product, PurchaseFailureDescription) Nekoyume.IAPStore.IAPStoreManager:OnPurchaseClicked(String) NineChronicles.ExternalServices.IAPService.Runtime.d14:MoveNext() System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:SetResult(TResult) NineChronicles.ExternalServices.IAPService.Runtime.d15:MoveNext() System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:SetResult(TResult) NineChronicles.ExternalServices.IAPService.Runtime.d__8:MoveNext() UnityEngine.UnitySynchronizationContext:Exec()

jaeho0103 commented 3 weeks ago

네 시즌패스 10 이후의 상품이 아직 스토어에 등록전입니다. 금일 진행하고 말씀드리겠습니다. (단, IOS는 심사 이슈로 차주 이후에 체크 가능합니다)

jaeho0103 commented 3 weeks ago

안드로이드에서는 구매 체크 가능하실겁니다.

QgamesGeonPyoNoh commented 3 weeks ago

Android K 버전에서 구매 시도 시 결제 진행 후 '구매 실패'가 출력되는 것으로 확인했습니다. 재 구매 시도시에는 '판매 기간이 지난 상품입니다.' 메세지가 출력되고 있습니다. 확인 부탁드립니다.

[테스트 환경] K.Android.v200220-220.0.0

https://github.com/user-attachments/assets/2caa7feb-f7e2-4091-a1e4-4effee29b201

QgamesGeonPyoNoh commented 3 weeks ago

발생한 에러 코드 2개 공유드립니다.

HttpRequestException: 500 (Internal Server Error) System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () (at <00000000000000000000000000000000>:0) NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.ProcessResponseAsync (System.Net.Http.HttpResponseMessage res) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[TResult].Start[TStateMachine] (TStateMachine& stateMachine) (at <00000000000000000000000000000000>:0) NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.ProcessResponseAsync (System.Net.Http.HttpResponseMessage res) (at <00000000000000000000000000000000>:0) NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.PurchaseRequestAsync (NineChronicles.ExternalServices.IAPService.Runtime.Models.Store store, System.String receipt, System.String agentAddr, System.String avatarAddr, System.String planetId, System.String transactionId, System.String appleOriginalTransactionID) (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext.Exec () (at <00000000000000000000000000000000>:0) NineChronicles.ExternalServices.IAPService.Runtime.<ProcessResponseAsync>d__14:MoveNext() System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:Start(TStateMachine&) NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient:ProcessResponseAsync(HttpResponseMessage) NineChronicles.ExternalServices.IAPService.Runtime.d__9:MoveNext() UnityEngine.UnitySynchronizationContext:Exec()

QgamesGeonPyoNoh commented 3 weeks ago

Purchase failed: InternalServerError, {"Payload":"{\"json\":\"{\\"orderId\\":\\"GPA.3397-4079-8872-62895\\",\\"packageName\\":\\"com.planetariumlabs.ninechroniclesmobilek\\",\\"productId\\":\\"g_pkg_seasonpassall10\\",\\"purchaseTime\\":1724389245423,\\"purchaseState\\":0,\\"purchaseToken\\":\\"idcahiibnppbjafekmkmcnnk.AO-J1Owu9eGFLTQtRQ5W1Nfw4b7rY9CzPr2NlodYmxL-wch1lKzW4myI4Irdp2CwwD7Kk4WNNDETDmcGStSmqnhuajd_JC34733yl31hDOQtVc8K475FebkgZ39WCzdrPH7-V3xMcD\\",\\"quantity\\":1,\\"acknowledged\\":false}\",\"signature\":\"VCQoFzEAw8yFYO9ovW5HNfsaZOSzBdnxkYQkYUYQwlLpUe9WwdlIuAn9Va2RqQTb7TXMQ89X6giMkd6E2Ml98Dm7PGImq6sl/HgjwVEYswnfq09U9IdrSuAqihciyI6ZHi3CnUHkYjATYRT1fhcqR2qaV+KO3iuRIheaQ+m8E/jIGR7Sfl6OOqB8Q6GLv3mWdIs/nh7oOm9yEMDQFHiCG2RaGpFWaJidTmPPI5LOcHMN3PETNMoLpGvpXPA2fhU9SB3LiSBsJu2gLWp88d76cRTA1v+wMBc7M10na9w+hFMh9T56Lb4z1qOsGNrRAlMK120UbjYYdSmiTVamDx4CRg==\",\"skuDetails\":[\"{\\"productId\\":\\"g_pkg_seasonpassall10\\",\\"type\\":\\"inapp\\",\\"title\\":\\"SeasonPass10PremiumAll (\\ub098\\uc778 \\ud06c\\ub85c\\ub2c8\\ud074 K)\\",\\"name\\":\\"SeasonPass10PremiumAll\\",\\"description\\":\\"SeasonPass10PremiumAll\\",\\"price\\":\\"\\u20a944,000\\",\\"price_amount_micros\\":44000000000,\\"price_currency_code\\":\\"KRW\\"}\"]}","Store":"GooglePlay","TransactionID":"idcahiibnppbjafekmkmcnnk.AO-J1Owu9eGFLTQtRQ5W1Nfw4b7rY9CzPr2NlodYmxL-wch1lKzW4myI4Irdp2CwwD7Kk4WNNDETDmcGStSmqnhuajd_JC34733yl31hDOQtVc8K475FebkgZ39WCzdrPH7-V3xMcD"}, 500 (Internal Server Error) at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () [0x00000] in <00000000000000000000000000000000>:0 at NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.ProcessResponseAsync (System.Net.Http.HttpResponseMessage res) [0x00000] in <00000000000000000000000000000000>:0 at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[TResult].Start[TStateMachine] (TStateMachine& stateMachine) [0x00000] in <00000000000000000000000000000000>:0 at NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.ProcessResponseAsync (System.Net.Http.HttpResponseMessage res) [0x00000] in <00000000000000000000000000000000>:0 at NineChronicles.ExternalServices.IAPService.Runtime.IAPServiceClient.PurchaseRequestAsync (NineChronicles.ExternalServices.IAPService.Runtime.Models.Store store, System.String receipt, System.String agentAddr, System.String avatarAddr, System.String planetId, System.String transactionId, System.String appleOriginalTransactionID) [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.UnitySynchronizationContext.Exec () [0x00000] in <00000000000000000000000000000000>:0 , , NineChronicles.ExternalServices.IAPService.Runtime.<PurchaseRequestAsync>d__16:MoveNext() System.Runtime.CompilerServices.AsyncTaskMethodBuilder1:SetResult(TResult) NineChronicles.ExternalServices.IAPService.Runtime.d__9:MoveNext() UnityEngine.UnitySynchronizationContext:Exec()

U-lis commented 3 weeks ago

안녕하세요 @QgamesGeonPyoNoh 해당 이슈 확인해봤고, IAP > SeasonPass 로 업데이트 요청을 할 때 시즌 정보를 정상적으로 넘기지 못하는 이슈가 있었습니다. 현재 이슈 해결해 internal 에 반영했고, 제 계정으로 테스트해서 잘 구매되는 것 확인했습니다.

QgamesGeonPyoNoh commented 3 weeks ago

수정 내용 확인 완료되었습니다.

[테스트 환경] K.Android.v200220-220.0.1

https://github.com/user-attachments/assets/a879baf9-d9b7-493a-9c47-ca172755a94d

QgamesGeonPyoNoh commented 2 weeks ago

시즌 패스 프리미엄 구매 시 '구매 실패' 메세지 출력 현상 발생 확인했습니다. 구매 실패 출력 후 '판매 기한이 지난 상품입니다.' 메세지가 출력되고 있어 캐릭터 별 구매 제한도 확인 부탁드립니다.

[테스트 환경] K.Android.v200220-220.0.1

https://github.com/user-attachments/assets/14b4c262-4adc-4859-b1f3-2a69350867e0

U-lis commented 2 weeks ago

테스트 계정에 있는 기존 구매기록도 전부 삭제했습니다. 테스트 부탁드립니다. :pray:

QgamesGeonPyoNoh commented 2 weeks ago

시즌패스 프리미엄+ 구매 시 '이미 보유하고 있는 아이템입니다.' 메세지가 현재 출력되고 있습니다. 확인 부탁드립니다.

대상 구글 계정 : dacaciz777@gmail.com

Image

U-lis commented 2 weeks ago

구매 관련 에러가 났을 때 해당 상품에 대한 소비 처리가 정상적으로 되지 않아 그런 것으로 파악됩니다. 해당 상품에 대한 소비 처리를 완료했습니다. :pray:

QgamesGeonPyoNoh commented 2 weeks ago

구매 에러가 발생하지 않았으나 해당 메세지가 재 출력되었습니다. 확인 부탁드립니다.

[재현 스텝]

  1. A 캐릭터 시즌패스 프리미엄 구매
  2. A 캐릭터 시즌패스 프리미엄 플러스 구매
  3. B 캐릭터로 캐릭터 변경
  4. B 캐릭터로 시즌패스 프리미엄 구매 시도
  5. '이미 보유하고 있는 아이템입니다.' 메세지 출력
    • B 캐릭터로 시즌패스 프리미엄 플러스 구매 시도 시에는 출력되지 않았습니다.

테스트 구글 계정 : dacaciz777@gmail.com A 캐릭터 시즌패스 프리미엄 주문 번호 : GPA.3308-0043-8881-87208

Image

U-lis commented 2 weeks ago

해당 이슈는 접속 후 shop 에 들어가지 않고 season pass 를 바로 구매하는 경우 상품 목록 처리를 정상적으로 할 수 없어서 발생하는 이슈로 확인했습니다. 수정 PR 을 만들었으며, 다음 빌드에 추가될 예정입니다. 220.0.3 버전 빌드가 나오면 체크 부탁드리겠습니다.

테스트 포인트

  1. 로그인 후 메인 화면에서 상점에 들어가지 마시고 곧바로 season pass 상품을 구매 부탁드립니다. (구매가 정상적으로 되어야 합니다)
  2. 다른 캐릭터로 변경 후 상점에 들어가지 마시고 곧바로 이전과 동일한 season pass 상품을 구매 부탁드립니다. (이전에는 에러가 났지만 220.0.3 버전에서는 구매가 정상적으로 되어야 합니다.)

fyi : 테스트 계정(0x3146fe0e47a1998e14cd8a33640e3648a5a90276) 으로 구매한 모든 season pass 상품은 수동으로 소비 처리 후 internal DB 에서 구매 기록과 season pass 상태를 초기화해두었습니다. 다음에 테스트할 때는 season pass 상품을 아무것도 구매하지 않은 것과 동일한 상태에서 테스트하실 수 있습니다.

QgamesGeonPyoNoh commented 2 weeks ago

수정 내용 확인 완료되었습니다.

[테스트 환경] K.Android.v200220-220.0.3

https://github.com/user-attachments/assets/48519f91-33d4-4b44-bb0b-ce00de6e5820

QgamesGeonPyoNoh commented 2 weeks ago

iOS K 버전에서 '구매 실패' 팝업이 출력되는 현상 발생했습니다. 헤임달 체인 / 어드레스 0x2a848B90f0A17370610915A99C7153ceE8b96013 확인 부탁드립니다.

Image

QgamesGeonPyoNoh commented 2 weeks ago

Android K, iOS M 버전에서도 프리미엄 / 프리미엄+ 구매 시 '구매 실패' 메세지가 출력되고 있습니다. 확인 부탁드립니다.

[테스트 환경] K.Android.v200220-220.0.3 iOS.v220.0.3(104) K.iOS.v220.0.3(47)

https://github.com/user-attachments/assets/f819061b-c727-4139-bb3a-813bd1b020ff

U-lis commented 2 weeks ago

네 이거 release merge PR 을 만들면서 이전 코드가 들어가서 생긴 이슈로, IAP service 에 코드 업데이트를 한번 해주면 됩니다. 얼른 새 코드 올리고 이전 구매 기록 지워서 테스트 가능하게 하고 말씀드리겠습니다