API nạp tiền APK Android

Quá trình nạp tiền có thể diễn ra trong 3 môi trường khác nhau:

  • Ứng dụng Android của nhà tích hợp thanh toán
  • Trang web dành cho thiết bị di động của nhà tích hợp thanh toán
  • Trang web dành cho máy tính của nhà tích hợp thanh toán

Bất kể quy trình nào, Google sẽ chuyển giao tương tác của người dùng cho phần mềm của Nhà tích hợp thanh toán. Trình tích hợp thanh toán sẽ triển khai một giao diện người dùng quen thuộc với người dùng, nhưng quy trình này phải dành riêng cho việc nạp tiền vào số dư của người dùng, nghĩa là người dùng phải được chuyển đến một quy trình nạp tiền thay vì chuyển sang một giao diện người dùng có mục đích chung mà họ cần chuyển sang quy trình nạp tiền.

Tất cả các luồng đều dẫn đến việc trình tích hợp tạo ra một TopUpRedirectResponse. Phản hồi này được ký và gửi lại cho Google.

Trang web dành cho thiết bị di động và máy tính phải tuân thủ Quy cách của API Web Top Up, trong khi luồng ứng dụng Android phải tuân thủ Quy cách của Android Top Up API.

Các trình tích hợp nên triển khai giải pháp APK Android để xác thực người dùng, sau đó hướng dẫn họ thông qua một luồng để nạp tiền vào số dư của mình. Phương thức nạp tiền này là một phương thức khác, nhưng có cùng mục đích với việc nạp tiền do tính năng Nạp tiền trên web cung cấp.

Người dùng tham gia quy trình trên ứng dụng tích hợp thanh toán thông qua Hoạt động trên Android. Ý định nạp tiền có thể được gọi trực tiếp từ ứng dụng Play mà người dùng đang dự định mua hàng. Để ngăn Android chấm dứt hoạt động Phát ở chế độ nền trong khi nạp tiền, trình tích hợp cần đưa nội dung sau đây vào chủ đề hoạt động.

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

Định nghĩa phương thức

Ý định cần có các thuộc tính sau:

Thuộc tính phương thức
Hành động com.google.android.payments.standard.TOPUP_V1
Danh mục android.intent.category.DEFAULT

Yêu cầu

Các trường
gspTopUpRequest TopUpRedirectRequest

Yêu cầu nạp tiền.

gspAssociationId string

Chứa giá trị nhận dạng mà trình tích hợp sử dụng để tra cứu thông tin xác thực cho tài khoản mà người dùng đang nạp tiền. Đây là mã liên kết được gửi trong quá trình liên kết tài khoản trong LinkedAccountRequest.

Phản hồi

Sau khi người dùng hoàn tất quy trình nạp tiền, ứng dụng của bạn cần gửi ý định kết quả cho Google. Nếu nạp tiền thành công, hãy tạo một ý định và thêm gspTopUpResponse được mã hoá và RedirectRequestId làm phần bổ sung. Tiếp theo, đặt kết quả hoạt động thành mã kết quả thích hợp.

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

Kết quả

Các trường
kết quả int

Activity.RESULT_OK
Đã nạp tiền thành công.
Activity.RESULT_CANCELED Người dùng đã huỷ quy trình này theo cách thủ công và quy trình này cần bị huỷ.
Activity.RESULT_FIRST_USER Không nạp tiền được vì lý do nghiêm trọng và quy trình này cần bị huỷ. Máy chủ IE đã trả về phản hồi HTTP 500 khi đăng nhập.

Phần bổ sung

Các trường
gspTopUpResponse TopUpRedirectResponse

BẮT BUỘC: Phản hồi nạp tiền. Giá trị được mã hoá này không được vượt quá 1KB.
redirectRequestId string

BẮT BUỘC: requestId được gửi trong yêu cầu thanh toán chuyển hướng ban đầu/bắt đầu yêu cầu chuyển hướng. Google sẽ xác minh rằng URL này khớp với requestId đã gửi. Quy trình Chuyển hướng hoàn chỉnh sẽ không thành công nếu không khớp.

Các yêu cầu khác về hoạt động

Hoạt động hỗ trợ thao tác TOPUP_V1 nêu trên cũng phải kiểm tra để đảm bảo rằng các phương thức gọi của API chỉ đến từ các ứng dụng do Google ký. Điều này sẽ giúp ngăn các ứng dụng khác gọi hoạt động của bạn và truy xuất dữ liệu người dùng. Bạn có thể thực hiện việc này bằng cách sử dụng StandardPaymentUtils.verifyCallingActivityIsGoogleSigned được cung cấp ngay sau super.onCreate trong quá trình triển khai Hoạt động.

Dưới đây là ví dụ:


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

  ....
}

Tất cả hoạt động được gọi trong quy trình nạp tiền phải cung cấp một giao diện hoạt động có windowIsTranslucent=true. Bạn phải thực hiện việc này bằng thuộc tính android:theme của AndroidManifest và không sử dụng Context.setTheme(). Về mặt lập trình, việc đặt giao diện không hoạt động chính xác đối với độ mờ của cửa sổ. Google sẽ thực thi việc hoạt động đầu tiên được khởi chạy tuân theo mẫu này, nhưng mọi hoạt động phụ cũng được khởi chạy cũng phải tuân theo mẫu này. Nếu không, thì các giao dịch mua từ nhà phát triển bên thứ ba có thể không hoạt động.