Google Play Developer API 現已提供 回報其他結帳系統的交易,或是 「外部優惠」系統。本指南說明如何回報替代做法 帳單或外部優惠交易
您可能需要幾個元件,才能從後端處理應用程式內購交易。如要建構這些元件,請按照「設定 Google Play Developer API」的說明,設定後端整合作業。適用對象 非專屬於其他結帳系統的所有開發人員後端功能 或外部優惠 API 適用 Google Play 結帳系統說明文件。
向 Google Play 回報新的外部交易
與 Externaltransactions APIs
整合
回報在 Google Play 結帳系統以外進行的交易,
支援的國家/地區 (包括免費試用期產生的 $0 美元交易金額)
購買。透過其他結帳系統或外部優惠系統進行的交易
只能在符合資格的使用者國家/地區啟動並回報
其他結帳系統
外部優惠計畫,否則 API 呼叫將
遭到拒絕。這項規定適用於所有交易,包括新交易、續訂、
儲值、升級、降級等等
回報外部交易
您應呼叫 Externaltransactions API
回報外部交易
透過其他結帳系統授權付款後
外部優惠系統這適用於所有交易,包括初始
包括支付、續訂和退款等等所有交易都必須為
且會在交易發生後 24 小時內回報。
每筆外部交易在回報時都應附上外部交易 ID。如果是週期性消費 (例如可自動續訂的訂閱項目),您需要傳送與這類消費中第一筆交易相關聯的外部交易 ID,做為退款等所有後續交易的參數。如此一來,就能記錄該筆消費的一系列交易。如果產品有所變更 (例如升級或降級),或是使用者在週期性交易取消或過期後再次購買相同產品,請針對這些消費傳送新的外部交易 ID。請勿加入任何個人識別資訊 本外部人士 交易 ID
回報新交易
每次在其他結帳系統中完成新交易時
或外部優惠系統,對 Externaltransactions
API 的呼叫
這通常代表交易
不會十分要求關聯語意針對新的購買交易,您必須提供不重複的
在您的後端以查詢形式與購買交易相關聯的 externalTransactionId
參數。這個 externalTransactionId
不得在相同應用程式的 Google 應用程式內重複使用
套件 ID。
應用程式透過externalTransactionToken
UserChoiceBillingListener
、AlternativeBillingOnlyReportingDetailsListener
、
此外,也需要使用 ExternalOfferReportingDetailsListener
回呼
一次性消費和首次交易
定期購買 (例如訂閱)。無論屬於上述哪種情況,一律稱為
初始交易。初始交易完成後,
不再需要externalTransactionToken
,你向其回報了後續問題
透過現有的不重複
externalTransactionId
。請參閱「回報消費後續的交易」
,進一步瞭解如何回報後續交易。
範例:
- 開發人員在應用程式中設定並啟用其他結帳系統。
- 韓國為支援這項服務的國家/地區,其境內的使用者 1 想購買
product1
,這項產品的費用為每月 12634.10 韓元,並提供一個月免費試用優惠。 - 應用程式根據
product1
的ProductDetails
和使用者選擇的方案,啟動購買流程。 - 使用者 1 選擇開發人員的其他結帳系統。
UserChoiceBillingListener
收到my_token
值做為externalTransactionToken
。- 接下來,開發人員將相關資訊 (
externalTransactionToken
值和使用者所購產品) 傳送到後端,然後在其他結帳系統中啟動product1
的購買流程。系統在開發人員端為此交易指派不重複的交易 ID (「123-456-789」),用於向 Google Play 回報交易。即使該使用者享有免費試用期,仍須使用交易 ID。 - 在其他結帳系統中進行販售商品的交易後,開發人員透過下列要求向 Google Play 回報交易。由於使用者可以免費試用一個月,因此最初回報的是零元交易。
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"
}
}
如果與居住在印度的使用者交易,稅金會依各別行政區 (例如州或省) 而異,請務必將該行政區加進 userTaxAddress。請參閱 API 參考指南中適用行政區的預先定義字串清單。
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"
}
}
回報消費後續的交易
在某些情況下,使用者完成單筆外部購買交易後會多次支付相關聯的款項,例如訂閱項目續訂或預付方案儲值。您可以在 Externaltransactions
中使用相同 API 回報這些後續交易。如「回報新交易」一節所述,回報後續交易時不必用到 externalTransactionToken
,而是應針對每筆續訂或儲值交易傳送新的不重複 externalTransactionId
做為查詢參數,並在 initialExternalTransactionId
欄位中提供初始交易的 ID。
延續先前的例子:
- 使用者 1 在其他結帳系統中進行第一筆續訂交易。初始交易 ID 為「123-456-789」。
- 開發人員在網址查詢參數中回報本次週期性新交易的外部交易 ID,並在
initialExternalTransactionId
欄位中參照初始交易的外部交易 ID。
要求示例:
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"
}
}
回報訂閱項目的升級或降級情形
如要回報使用者在其他結帳系統中的訂閱項目升級或降級情形,請在 Externaltransactions
API 中使用相同端點和函式,針對升級或降級交易傳送先前提供給應用程式的 externalTransactionToken
。做法與回報新交易類似。
停止手動回報其他結帳系統交易
如要遷移在提供其他結帳系統期間開始訂閱但未自動回報的有效項目,請使用 migratedTransactionProgram
欄位建立新的零費用交易,而不要指定 initialExternalTransactionId
或 externalTransactionToken
。將 transactionTime
設為使用者註冊各個有效訂閱項目的初始時間。之後,照常透過 API 回報這些訂閱項目的每筆後續交易,並提供上述使用的 initialExternalTransactionId
建立續訂交易。訂閱項目遷移後,只要透過本頁所述的自動化方法回報訂閱項目的後續交易,就不再需要手動回報這類交易。
遷移訂閱項目時,請留意設定的配額限制,確保遷移作業不會導致配額服務中斷。有許多訂閱服務需要 分散在多天遷移,或要求增加配額 配額 ,直接在 Google Cloud 控制台實際操作。
migratedTransactionProgram
欄位只能用於從手動回報功能進行遷移,並且會在系統不再支援手動回報時淘汰。
要求示例:
# 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"
}
}
檢舉 Play 合作夥伴計畫
參與合作夥伴計畫的開發人員,例如
Play 媒體體驗計畫必須提供
transaction_program_code
(回報外部交易時)。如果您是
符合資格的開發人員,請與 BD 經理聯絡以瞭解詳情
瞭解如何設定這個欄位
向 Google Play 回報交易退款
如要回報在 Google Play 結帳系統以外退款給使用者的交易,請整合 Externaltransactions
API。為了讓 Google Play 正確識別已退款的交易,您應該在網址參數中加入先前所回報交易的相應 externalTransactionId
。
回報訂閱項目購買交易的退款時,請找出要退款的特定單次週期性訂閱交易,並參照該交易的 externalTransactionId
。
範例:假設訂閱項目包含下列交易:
- 外部交易 ID 為「ABC.1234-5678-9012-34567」的初始交易
- 外部交易 ID 為「ABC.1234-5678-9012-34567..0」的第一筆週期性交易
- 外部交易 ID 為「ABC.1234-5678-9012-34567..1」的第二筆週期性交易
如要回報訂閱項目所有交易的退款,您需要分別提出三項退款要求:其中一項是初始交易的要求,另外兩項則是後續交易的要求。
這個方法接受全額退款 (其中金額等同使用者在原本的外部網站支付金額) 交易) 和部分退款 (此金額少於使用者在原外部費用中支付的金額 交易)。辦理部分退款時,需要指定退還的稅前金額。
API 配額
Externaltransactions
API 必須符合每日 API 配額規定
,就像 Google Play Developer API 中的其他端點一樣。
此外,Externaltransactions
API 向 Externaltransactions.createexternaltransaction
或 Externaltransactions.refundexternaltransaction
發出呼叫時,每分鐘查詢數量 (QPM) 上限為 1,200。不過,向 Externaltransactions.getexternaltransaction
發出的呼叫不會計入 1,200 QPM 的限制。