From 7c7f2e0f2cbb426a53bcfd3795ede51801652e28 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 21 Mar 2024 19:35:53 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B5=AC=EA=B8=80=20=EC=9D=B8=20=EC=95=B1=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=EA=B2=80=EC=A6=9D=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=20oauth=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=B4=20android=20publisher=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=BD=94=EB=93=9C=20chargeservice=20?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=80=EC=A0=B8=EC=98=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/can/charge/ChargeService.kt | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt index 294ee97..8e7c901 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt @@ -1,7 +1,12 @@ package kr.co.vividnext.sodalive.can.charge import com.fasterxml.jackson.databind.ObjectMapper +import com.google.api.client.http.javanet.NetHttpTransport +import com.google.api.client.json.gson.GsonFactory import com.google.api.services.androidpublisher.AndroidPublisher +import com.google.api.services.androidpublisher.AndroidPublisherScopes +import com.google.auth.http.HttpCredentialsAdapter +import com.google.auth.oauth2.GoogleCredentials import kr.co.bootpay.Bootpay import kr.co.vividnext.sodalive.can.CanRepository import kr.co.vividnext.sodalive.can.charge.event.ChargeSpringEvent @@ -24,6 +29,7 @@ import org.springframework.http.HttpHeaders import org.springframework.security.core.userdetails.User import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import java.io.FileInputStream @Service @Transactional(readOnly = true) @@ -37,8 +43,6 @@ class ChargeService( private val okHttpClient: OkHttpClient, private val applicationEventPublisher: ApplicationEventPublisher, - private val androidPublisher: AndroidPublisher, - @Value("\${bootpay.application-id}") private val bootpayApplicationId: String, @Value("\${bootpay.private-key}") @@ -46,7 +50,9 @@ class ChargeService( @Value("\${apple.iap-verify-sandbox-url}") private val appleInAppVerifySandBoxUrl: String, @Value("\${apple.iap-verify-url}") - private val appleInAppVerifyUrl: String + private val appleInAppVerifyUrl: String, + @Value("\${firebase.secret-key-path}") + private val secretKeyPath: String ) { @Transactional @@ -209,11 +215,11 @@ class ChargeService( ?: throw SodaException("로그인 정보를 확인해주세요.") if (charge.payment!!.paymentGateway == PaymentGateway.GOOGLE_IAP) { - val response = androidPublisher.purchases().products() + val response = getAndroidPublisher().purchases().products() .get("kr.co.vividnext.sodalive", request.productId, request.purchaseToken) - .execute() + .execute() ?: throw SodaException("결제정보에 오류가 있습니다.") - if (response.purchaseState == 0) { + if (response.purchaseState == 0 && charge.payment?.status == PaymentStatus.REQUEST) { charge.payment?.receiptId = response.purchaseToken charge.payment?.method = "구글(인 앱 결제)" charge.payment?.status = PaymentStatus.COMPLETE @@ -298,4 +304,16 @@ class ChargeService( throw SodaException("결제를 완료하지 못했습니다.") } } + + private fun getAndroidPublisher(): AndroidPublisher { + val jsonFactory = GsonFactory.getDefaultInstance() + val httpTransport = NetHttpTransport() + + val credential = GoogleCredentials.fromStream(FileInputStream(secretKeyPath)) + .createScoped(listOf(AndroidPublisherScopes.ANDROIDPUBLISHER)) + + return AndroidPublisher.Builder(httpTransport, jsonFactory, HttpCredentialsAdapter(credential)) + .setApplicationName("소다라이브") + .build() + } }