728x90
반응형
결제 Flow
1. 인증
구글 클라우드 플랫폼에서 서비스 계정 우측의 서비스 계정 관리를 누른 후 키 관리 > 키 추가 > 새 키 만들기
GoogleCredentials credentials = GoogleCredentials
.fromStream(new FileInputStream("C:\\study\\inapp\\src\\main\\resources\\credentials.json"))
.createScoped(AndroidPublisherScopes.ANDROIDPUBLISHER);
credentials.refreshIfExpired();
AccessToken token = credentials.refreshAccessToken();
System.out.println(token.toString());
인증 결과
AccessToken{tokenValue=ya29, expirationTimeMillis=1651537806287}
2. 영수증 검증
https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products/get
AndroidPublisher publisher = new AndroidPublisher.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
GsonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(credentials)
).setApplicationName("example").build();
AndroidPublisher.Purchases.Products.Get get = publisher.purchases().products().get(packageName, productId, purchaseToken);
ProductPurchase productPurchase = get.execute();
System.out.println(productPurchase.toPrettyString());
// 인앱 상품의 소비 상태. 0 아직 소비 안됨(Yet to be consumed) / 1 소비됨(Consumed)
Integer consumptionState = productPurchase.getConsumptionState();
// 개발자가 지정한 임의 문자열 정보
String developerPayload = productPurchase.getDeveloperPayload();
// 구매 상태. 0 구매완료 / 1 취소됨
Integer purchaseState = productPurchase.getPurchaseState();
// 상품이 구매된 시각. 타임스탬프 형태
Long purchaseTimeMillis = productPurchase.getPurchaseTimeMillis();
검증 결과
{
"acknowledgementState": 1,
"consumptionState": 1,
"developerPayload": "",
"kind": "androidpublisher#productPurchase",
"orderId": "GPA.3338-0568-9500-67910",
"purchaseState": 1,
"purchaseTimeMillis": "1650347811376",
"purchaseType": 0,
"regionCode": "KR"
}
3. 결재 취소
https://developers.google.com/android-publisher/api-ref/rest/v3/orders/refund
Void refund = publisher.orders().refund(packageName, "GPA.3338-0568-9500-67910").execute();
System.out.println(refund);
4. 무효화된 결재내역
https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.voidedpurchases/list
VoidedPurchasesListResponse voidedPurchasesListResponse = publisher.purchases()
.voidedpurchases()
.list(packageName)
.execute();
System.out.println(voidedPurchasesListResponse.toPrettyString());
무효화된 결재내역 결과
{
"voidedPurchases": [
{
"kind": "androidpublisher#voidedPurchase",
"orderId": "GPA.3308-4116-2515-42303",
"purchaseTimeMillis": "1651123458478",
"purchaseToken": "kakeidmecebghakcdjbihlfe.AO-J1OzI-2qmFvN78_QxyYuRWRhyoq0NAwIMDvET3nk9hGm-bqPZMmkVmckRc5OvQ5M7dGv5TXOaJEMU5UNcNrtSTgageabDImZyp1OyTccceCldPf5X2ow",
"voidedReason": 1,
"voidedSource": 1,
"voidedTimeMillis": "1651124870903"
}
]
}
Google Play 결제 시스템 주요 기능 소개 및 도입 가이드
- Play Console 고객센터: 결제 프로필 만들기
- Play Console 고객센터: 인앱 결제 테스트하기
- Android 개발자 YouTube 채널: Subscription 101 - Real Time Developer Notification
- Google Play Medium 블로그: Future proof your subscription business
- Android Developers Medium 블로그: Subscriptions 101 for Android apps
- Google Play Medium 블로그: Working with Google Play Billing
- Android 개발자 사이트: Google Play 결제 시스템
- Github: Google Play 결제 시스템 적용 예시
개발자 제공 결제 시스템 시작 가이드
- Google 개발자 블로그: 대한민국 이용자를 위한 개발자 제공 결제 시스템 적용
- Play Console 고객센터: Google Play 결제 요구사항 관련 변경
- Play Console 고객센터: 추가 인앱 결제 시스템 확인 양식
- Android 개발자 사이트: 개발자 제공 인앱 결제 시스템 임시 UX 가이드라인
- Play Console 고객센터: Google Play 결제 정책 이해
- Play 미디어 경험 프로그램
Google Play 커머스 세미나 영상 다시보기
- Session 1 : Google Play 결제 시스템 주요 기능 소개 및 도입 가이드
- Session 2 : 개발자 제공 결제 시스템 시작 가이드
- 실시간 Q&A
728x90
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[IntellJ] Error running 'Application': Command line is too long. Shorten command line for Application or also for Spring Boot default configuration? (0) | 2022.03.17 |
---|---|
Nginx CORS 처리 (0) | 2021.10.08 |
[IntelliJ IDEA] 단축키 (1) | 2021.03.19 |
[인프런] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0) | 2021.02.26 |
[프로그래머스] 자바 입문 강의 (0) | 2021.02.26 |
Animated GIF (3) | 2020.11.10 |
구글 번역 API 무제한 (0) | 2020.09.21 |
SSL 인증서 JAVA CA 인증서에 추가 (0) | 2020.09.21 |