API Nhà phát triển Google Play hiện bao gồm các tính năng bổ sung chức năng báo cáo các giao dịch thực hiện qua hệ thống thanh toán thay thế hoặc chương trình ưu đãi bên ngoài. Hướng dẫn này mô tả cách báo cáo các lựa chọn thay thế giao dịch thanh toán hoặc giao dịch chào bán bên ngoài.
Trong phần phụ trợ có thể có một vài thành phần cần thiết để xử lý các giao dịch mua hàng trong ứng dụng. Để tạo các thành phần như vậy, bạn cần thiết lập quy trình tích hợp phần phụ trợ theo chỉ dẫn trong phần Định cấu hình API Nhà phát triển Google Play. Cho tất cả chức năng phụ trợ dành cho nhà phát triển không dành riêng cho hệ thống thanh toán thay thế hoặc API chào bán bên ngoài, hướng dẫn của Có áp dụng tài liệu về hệ thống thanh toán của Google Play.
Báo cáo giao dịch mới bên ngoài cho Google Play
Tích hợp với Externaltransactions APIs
để báo cáo giao dịch diễn ra bên ngoài hệ thống thanh toán của Google Play trong
quốc gia được hỗ trợ, kể cả giao dịch 0 đồng khi dùng thử miễn phí
mua hàng. Giao dịch trên hệ thống thanh toán thay thế hoặc chào bán bên ngoài
chỉ được bắt đầu và báo cáo cho các quốc gia có người dùng đủ điều kiện khi được cho phép
theo hệ thống thanh toán thay thế hoặc
chương trình ưu đãi bên ngoài, nếu không lệnh gọi API sẽ
bị từ chối. Quy định này áp dụng cho tất cả các giao dịch, bao gồm cả giao dịch mua mới, gia hạn,
nạp tiền, nâng cấp, hạ cấp và nhiều cách khác.
Báo cáo giao dịch bên ngoài
Bạn nên gọi Externaltransactions API
để báo cáo giao dịch bên ngoài
sau khi khoản thanh toán được uỷ quyền thông qua hệ thống thanh toán thay thế hoặc
hệ thống chào bán bên ngoài. Điều này áp dụng cho tất cả các giao dịch, bao gồm cả giao dịch ban đầu
phí, gia hạn, hoàn tiền, v.v. Tất cả giao dịch đều bắt buộc phải
được báo cáo trong vòng 24 giờ kể từ khi phát sinh giao dịch.
Mỗi giao dịch bên ngoài sẽ được báo cáo bằng một mã giao dịch bên ngoài. Đối với các giao dịch mua định kỳ (chẳng hạn như các gói thuê bao tự động gia hạn), bạn cần gửi mã giao dịch bên ngoài liên kết với giao dịch đầu tiên trong giao dịch mua định kỳ dưới dạng tham số cho mọi giao dịch tiếp theo (kể cả giao dịch hoàn tiền). Việc này sẽ ghi lại chuỗi giao dịch của giao dịch mua ban đầu đó. Khi sản phẩm thay đổi (chẳng hạn như khi nâng cấp/hạ cấp) hoặc nếu giao dịch mua định kỳ bị huỷ hay hết hạn và sau đó, người dùng mua lại cùng một sản phẩm, thì bạn sẽ gửi một mã giao dịch bên ngoài mới cho những giao dịch mua như vậy. Bạn không được cung cấp bất kỳ thông tin nhận dạng cá nhân nào thông tin, thông tin độc quyền hoặc thông tin mật như một phần của mã giao dịch.
Báo cáo giao dịch mua mới
Mỗi khi thực hiện thành công một giao dịch mua mới thông qua hệ thống thanh toán thay thế
hoặc hệ thống chào bán bên ngoài, thì lệnh gọi đến API Externaltransactions
sẽ là
là bắt buộc. Đối với các giao dịch mua mới này, bạn cần cung cấp duy nhất
externalTransactionId
được liên kết với giao dịch mua trong phần phụ trợ của bạn dưới dạng truy vấn
. Bạn không thể sử dụng lại externalTransactionId
này trong cùng một ứng dụng
mã gói.
externalTransactionToken
mà ứng dụng nhận được qua
UserChoiceBillingListener
, AlternativeBillingOnlyReportingDetailsListener
hoặc lệnh gọi lại ExternalOfferReportingDetailsListener
cũng là một phần của
đối với các giao dịch mua hàng một lần và giao dịch lần đầu tiên trong
giao dịch mua định kỳ (chẳng hạn như gói thuê bao). Trong cả hai trường hợp, phương thức này được gọi là
giao dịch ban đầu. Sau giao dịch ban đầu,
externalTransactionToken
không còn cần thiết và bạn sẽ báo cáo
các giao dịch (chẳng hạn như gia hạn gói thuê bao) bằng cách cung cấp một giá trị mới
externalTransactionId
Xem phần Báo cáo các giao dịch tiếp theo của một giao dịch mua
để biết thêm chi tiết về cách báo cáo các giao dịch tiếp theo.
Ví dụ:
- Nhà phát triển định cấu hình và bật hệ thống thanh toán thay thế trong ứng dụng của mình.
- Người dùng 1 ở Hàn Quốc (một quốc gia được hỗ trợ) đang tìm cách mua
product1
với giá 12634,1 KRW/tháng, với ưu đãi dùng thử miễn phí một tháng. - Ứng dụng sẽ bắt đầu quy trình mua bằng
ProductDetails
choproduct1
và ưu đãi mà người dùng đã chọn. - Người dùng 1 chọn hệ thống thanh toán thay thế của nhà phát triển.
UserChoiceBillingListener
nhận giá trịmy_token
dưới dạngexternalTransactionToken
.- Sau đó, nhà phát triển sẽ gửi thông tin liên quan đến phần phụ trợ của họ (giá trị
externalTransactionToken
và sản phẩm đang được mua). Sau đó, họ sẽ bắt đầu quy trình mua đối vớiproduct1
trong hệ thống thanh toán thay thế. Giao dịch này sẽ được gán một mã giao dịch duy nhất ở phía nhà phát triển, dùng để báo cáo cho Google Play: 123-456-789. Mã giao dịch là bắt buộc, mặc dù người dùng sẽ nhận được một bản dùng thử miễn phí. - Sau khi giao dịch mua được thực hiện trong hệ thống thanh toán thay thế, nhà phát triển sẽ báo cáo giao dịch này cho Google Play bằng yêu cầu sau đây. Ban đầu, giá trị này được báo cáo là giao dịch trị giá 0 đồng vì người dùng được sử dụng miễn phí một tháng.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789
Body
{
"originalPreTaxAmount" : {
"priceMicros": "0",
"currency": "KRW"
},
"originalTaxAmount" : {
"priceMicros": "0",
"currency": "KRW"
},
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"externalTransactionToken": "my_token",
"externalSubscription" {
"subscriptionType": "RECURRING"
}
},
"userTaxAddress" : {
"regionCode": "KR"
}
}
Nếu giao dịch với một người dùng cư trú ở Ấn Độ nơi có mức thuế thay đổi theo khu vực hành chính (chẳng hạn như tiểu bang hoặc tỉnh), hãy nhớ đưa khu vực đó vào bên dưới userTaxAddress. Tham khảo danh sách các chuỗi được xác định trước trong hướng dẫn tham chiếu API cho khu vực hành chính áp dụng.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789
Body
{
"originalPreTaxAmount" : {
"priceMicros": "0",
"currency": "INR"
},
"originalTaxAmount" : {
"priceMicros": "0",
"currency": "INR"
},
"transactionTime" : "2023-11-01T12:45:00Z",
"recurringTransaction" : {
"externalTransactionToken": "my_token",
"externalSubscription" {
"subscriptionType": "RECURRING"
}
},
"userTaxAddress" : {
# Tax varies in India based on state, so include that information in
# administrativeArea
"regionCode": "IN"
"administrativeArea": "KERALA"
}
}
Báo cáo các giao dịch tiếp theo của một giao dịch mua
Trong một số trường hợp, người dùng thực hiện nhiều khoản thanh toán được liên kết với cùng một giao dịch mua bên ngoài (ví dụ: gia hạn gói thuê bao hoặc nạp tiền gói trả trước).
Bạn có thể báo cáo các giao dịch tiếp theo bằng cách sử dụng cùng một API trong Externaltransactions
. Như mô tả trong phần Báo cáo giao dịch mua mới, bạn không cần externalTransactionToken
cho các giao dịch tiếp theo. Thay vào đó, một externalTransactionId
mới duy nhất sẽ được gửi dưới dạng tham số truy vấn cho mỗi giao dịch gia hạn hoặc nạp tiền, kèm theo mã của giao dịch ban đầu có trong trường initialExternalTransactionId
.
Tiếp nối ví dụ trước:
- Lần gia hạn đầu tiên của người dùng 1 diễn ra trên hệ thống thanh toán thay thế. Mã giao dịch ban đầu là 123-456-789.
- Đối với giao dịch mới này, nhà phát triển sẽ báo cáo việc lặp lại giao dịch trong tham số truy vấn URL ở dạng mã giao dịch bên ngoài, đồng thời tham chiếu đến mã giao dịch bên ngoài của giao dịch ban đầu trong trường
initialExternalTransactionId
.
Ví dụ về yêu cầu:
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi
Body
{
"originalPreTaxAmount" : {
"priceMicros": "12634000000",
"currency": "KRW"
},
"originalTaxAmount" : {
"priceMicros": "1263000000",
"currency": "KRW"
},
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"initialExternalTransactionId": "123-456-789",
"externalSubscription" {
"subscriptionType": "RECURRING"
}
},
"userTaxAddress" : {
"regionCode": "KR"
}
}
Báo cáo giao dịch nâng cấp hoặc hạ cấp
Khi người dùng có một gói thuê bao, để báo cáo một giao dịch nâng cấp hoặc hạ cấp trong hệ thống thanh toán thay thế, hãy sử dụng cùng một điểm cuối và hàm trong Externaltransactions
API, qua đó gửi externalTransactionToken
được cung cấp cho ứng dụng để thực hiện giao dịch nâng cấp hoặc hạ cấp đó. Phương thức này hoạt động tương tự như cách báo cáo giao dịch mua mới.
Chuyển từ tính năng báo cáo thủ công về giao dịch qua hệ thống thanh toán thay thế
Để di chuyển các gói thuê bao đang hoạt động được bắt đầu khi bạn cung cấp hệ thống thanh toán thay thế (không có tính năng báo cáo tự động), hãy tạo một giao dịch mới có mức phí bằng 0 thông qua trường migratedTransactionProgram
thay vì chỉ định initialExternalTransactionId
hoặc externalTransactionToken
. Đặt transactionTime
thành thời điểm khi người dùng bắt đầu đăng ký cho mỗi gói thuê bao đang hoạt động. Sau đó, hãy báo cáo từng giao dịch tiếp theo của các gói thuê bao này như bình thường thông qua API, cung cấp initialExternalTransactionId
đã dùng ở trên để tạo giao dịch gia hạn.
Sau khi di chuyển gói thuê bao, bạn sẽ không cần báo cáo các giao dịch tiếp theo của gói thuê bao này theo cách thủ công nữa, miễn là các giao dịch đó được báo cáo thông qua các phương thức tự động được mô tả trên trang này.
Trong khi di chuyển gói thuê bao, hãy lưu ý đến các giới hạn về hạn mức được áp dụng để đảm bảo việc di chuyển không làm vượt quá hạn mức. Nếu cần nhiều gói thuê bao để được di chuyển, trải rộng trong nhiều ngày hoặc yêu cầu tăng hạn mức của Google.
Bạn chỉ có thể sử dụng trường migratedTransactionProgram
khi di chuyển từ báo cáo thủ công. Tính năng báo cáo thủ công sẽ không được dùng nữa khi không còn được hỗ trợ.
Ví dụ về yêu cầu:
# Note that the externalTransactionId specified here will used to report subsequent
# transactions.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi
Body
{
# Be sure to set the price to 0 for this transaction since it does not reflect
# an actual subscription renewal.
"originalPreTaxAmount" : {
"priceMicros": "0",
"currency": "KRW"
},
"originalTaxAmount" : {
"priceMicros": "0",
"currency": "KRW"
},
# The transaction time should be set to when the user signed up for this
# subscription.
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"migratedTransactionProgram": "USER_CHOICE_BILLING",
"externalSubscription" {
"subscriptionType": "RECURRING"
}
},
"userTaxAddress" : {
"regionCode": "KR"
}
}
Báo cáo Chương trình đối tác của Play
Nhà phát triển tham gia các chương trình đối tác như
Chương trình trải nghiệm nội dung đa phương tiện của Play phải cung cấp
transaction_program_code
khi báo cáo giao dịch bên ngoài. Nếu bạn
nhà phát triển đủ điều kiện, hãy liên hệ với Nhà quản lý phát triển kinh doanh của bạn để biết thêm
thông tin về cách đặt trường này.
Báo cáo hoàn tiền cho giao dịch mua trên Google Play
Hãy tích hợp với API Externaltransactions
để báo cáo các giao dịch được hoàn tiền cho người dùng bên ngoài hệ thống thanh toán của Google Play. Để Play xác định chính xác giao dịch nào được hoàn tiền, bạn phải thêm externalTransactionId
tương ứng của giao dịch đã báo cáo trước đó trong các tham số URL.
Khi báo cáo các giao dịch hoàn tiền cho giao dịch mua gói thuê bao, hãy tham chiếu đến externalTransactionId
của giao dịch định kỳ cụ thể của gói thuê bao đang được hoàn tiền.
Ví dụ: Giả sử một gói thuê bao có các giao dịch sau:
- Giao dịch ban đầu có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567
- Giao dịch định kỳ đầu tiên có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567..0
- Giao dịch định kỳ thứ hai có mã giao dịch bên ngoài là ABC.1234-5678-9012-34567..1
Để báo cáo về việc hoàn tiền cho tất cả các giao dịch của gói thuê bao đó, bạn cần thực hiện 3 yêu cầu hoàn tiền riêng biệt: 1 yêu cầu cho giao dịch ban đầu và 2 yêu cầu cho các giao dịch tiếp theo.
Phương thức này chấp nhận cả giao dịch hoàn tiền toàn bộ (trong đó số tiền giống với số tiền mà người dùng đã thanh toán trong gói thuê bao bên ngoài ban đầu giao dịch) và hoàn tiền một phần (số tiền này nhỏ hơn số tiền mà người dùng đã thanh toán trong gói thuê bao bên ngoài ban đầu giao dịch). Đối với giao dịch hoàn tiền một phần, bạn cần chỉ định số tiền trước thuế được hoàn lại.
Hạn mức API
API Externaltransactions
phải tuân theo hạn mức API hằng ngày
cho tất cả lệnh gọi, giống như mọi điểm cuối khác trong API Nhà phát triển Google Play.
Ngoài ra, Externaltransactions
API có giới hạn là 1.200 truy vấn mỗi phút (QPM) trên các lệnh gọi đến Externaltransactions.createexternaltransaction
hoặc Externaltransactions.refundexternaltransaction
. Các lệnh gọi đến Externaltransactions.getexternaltransaction
sẽ không được tính vào giới hạn 1.200 QPM này.