Android APK Top Up API

충전은 세 가지 환경에서 발생할 수 있습니다.

  • 결제 통합업체의 Android 앱
  • 결제 통합업체의 모바일 웹사이트
  • 결제 통합업체의 데스크톱 웹사이트

흐름에 관계없이 Google은 사용자 상호작용을 결제 통합업체의 소프트웨어에 전달합니다. 결제 통합업체는 사용자에게 친숙한 UI를 구현하지만 흐름은 사용자의 잔액 충전에만 중점을 두어야 합니다. 즉, 사용자가 충전 흐름으로 추가적으로 이동해야 하는 범용 UI에 빠지지 않고 충전 프로세스를 통해 사용자를 안내해야 합니다.

모든 흐름에서 통합업체는 TopUpRedirectResponse를 생성합니다. 이 응답은 서명되어 Google로 다시 전송됩니다.

모바일 및 데스크톱 웹사이트는 Web Top Up API 사양을 따라야 하고 Android 앱 흐름은 Android Top Up API 사양을 따라야 합니다.

통합자는 Android APK 솔루션을 구현하여 사용자를 인증한 다음 잔액을 충전할 수 있는 흐름을 통해 사용자를 안내해야 합니다. 이 충전은 다른 형식이지만 웹 충전에서 제공하는 충전과 용도는 동일합니다.

사용자가 Android 활동을 통해 결제 통합업체 앱의 흐름을 시작합니다. 충전 인텐트는 사용자가 구매하려는 Play 앱에서 직접 호출할 수 있습니다. 충전 중에 Android가 백그라운드에서 Play를 종료하지 않도록 하려면 통합자는 활동 테마에 다음을 포함해야 합니다.

<item name="android:windowIsTranslucent">true</item>

메서드 정의

인텐트에는 다음 속성이 있어야 합니다.

메서드 속성
작업 com.google.android.payments.standard.TOPUP_V1
카테고리 android.intent.category.DEFAULT

요청

필드
gspTopUpRequest TopUpRedirectRequest

충전 요청

gspAssociationId string

사용자가 충전하는 계정의 사용자 인증 정보를 조회하는 데 사용하는 식별자가 포함됩니다. AssociateAccountRequest에서 계정을 연결하는 동안 전송되는 연결 ID입니다.

응답

사용자가 충전 흐름을 완료한 후 애플리케이션은 결과 인텐트를 Google로 다시 전송해야 합니다. 충전에 성공하면 인텐트를 만들고 암호화된 인코딩된 gspTopUpResponse 및 redirectRequestId를 추가 항목으로 추가합니다. 그런 다음, 적절한 결과 코드로 활동 결과를 설정합니다.

...
result.setExtra("gspTopUpResponse", gspTopUpResponse);
result.setExtra("redirectRequestId", redirectRequestId);
setResult(Activity.RESULT_OK, result);
...
finish();

결과

필드
결과 int

Activity.RESULT_OK
충전이 완료되었습니다.
Activity.RESULT_CANCELED 사용자가 흐름을 수동으로 취소했으며 흐름이 중단되어야 합니다.
Activity.RESULT_FIRST_USER 치명적인 이유로 충전에 실패했으며 흐름을 중단해야 합니다. IE 서버가 로그인 시 HTTP 500 응답을 반환했습니다.

Extras

필드
gspTopUpResponse TopUpRedirectResponse

필수: 충전 응답입니다. 인코딩된 값은 1KB를 초과할 수 없습니다.
redirectRequestId string

필수: 원래/시작 리디렉션 결제 요청에서 전송된 requestId입니다. Google에서는 이 URL이 전송된 requestId과 일치하는지 확인하며, 일치하지 않으면 리디렉션 완료 플로우가 실패합니다.

기타 활동 요구사항

위에서 언급한 TOPUP_V1 작업을 지원하는 활동은 API 호출자가 Google이 서명한 애플리케이션에서만 발생하는지도 확인해야 합니다. 이렇게 하면 다른 앱이 내 활동을 호출하고 사용자 데이터를 검색하지 못하도록 할 수 있습니다. Activity 구현 내에서 super.onCreate 바로 뒤에 제공된 StandardPaymentUtils.verifyCallingActivityIsGoogleSigned를 사용하면 됩니다.

다음은 샘플입니다.


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);

  ....
}

충전 흐름 내에서 호출된 모든 활동은 windowIsTranslucent=true가 있는 활동 테마를 제공해야 합니다. 이 작업은 AndroidManifest android:theme 속성을 사용하여 완료해야 하며 Context.setTheme()을 사용하면 안 됩니다. 프로그래매틱 방식으로 테마 설정이 창 반투명도에 올바르게 작동하지 않습니다. Google은 첫 번째로 실행된 활동이 이 패턴을 따르도록 강제하지만 마찬가지로 실행되는 모든 하위 활동도 이 패턴을 따라야 합니다. 그렇지 않은 경우 서드 파티 개발자의 구매가 작동하지 않을 수 있습니다.