華為快應用接入應用內支付服務開發指導
1. 應用內支付服務介紹
華為應用內支付服務(In-App Purchases,IAP)為應用提供便捷的應用內支付體驗,接入流程簡便,助力您的商業變現。通過應用內支付,用戶可以在您的應用內購買各種類型的虛擬商品,包括消耗型商品、非消耗型商品和訂閱型商品。

圖1 應用內支付特點
華為應用內支付服務包含商品管理系統(Product Management System,PMS),您在華為AppGallery Connect網站錄入商品ID和定價之后,即可托管商品。IAP會根據地區和匯率展示本地化的語言和貨幣價格,從而實現全球發布。
1. 幣種與語言:華為為每個國家/地區指定一個默認幣種和一個默認語言,不支持一個國家/地區配置多種語言。
2. 商品定價:華為根據您設置的匯率換算價格(含稅)和匯率提供已上線華為支付的各國參考價,您可自行修改各國價格。
3. 匯 率: 固定匯率,此匯率非實時匯率,華為將根據此匯率更新貨幣價格。在您沒有修改商品價格的情況下,華為更新匯率不會影響您的商品定價。
2.開發流程

圖2 總體接入流程
當您需要與IAP服務器進行業務調用(如Order服務需調用IAP服務器提供的驗證購買Token接口),或僅僅依靠您的客戶端無法處理更加復雜的業務邏輯時,可增加服務端開發階段。
2.1 交互流程

圖3 消耗類商品

圖4 非消耗類商品

圖5 訂閱類商品
2.2 獲取購買歷史記錄
在支付接口中有兩個接口名字很相似,它們是pay.obtainOwnedPurchaseRecord和pay.obtainOwnedPurchases。在使用場景上,兩個接口是有區別的。
pay.obtainOwnedPurchases:
1. 消耗類商品:檢查是否有需要補發貨的商品,如果返回數據不為空,需要進行補發貨處理,並調用 pay.consumeOwnedPurchase 接口進行消耗處理。一般在應用啟動和支付返回60051或-1錯誤碼時調用。
2. 非消耗類商品:查詢當前用戶已購買的商品記錄。
3. 訂閱類商品:查詢當前登錄華為賬號的用戶在此應用下已有的訂閱關系。
pay.obtainOwnedPurchaseRecord:
1. 消耗類商品:查詢執行過發貨和消耗操作的商品記錄。
2. 訂閱類商品:查詢當前用戶在本應用中的所有續期記錄。
2.3 開發自檢
為了確保您正確地完成應用內支付服務接入,防止因接入問題導致上架審核被駁回或者上線運行遭遇投訴和損失,請務必進行上架前自檢。
1. 商品名稱描述語言為對應帳號歸屬服務地的語言,賬號服務地切換路徑:應用市場app->我的->國家/地區,切換不同服務地后,您可以檢查商品名稱是否和PMS系統上一致。
2. 商品價格展示為對應帳號歸屬服務地的貨幣單位+單價。
3. 彈出支付界面,支付界面中商品名稱、商品價格與應用中一致。
4. 購買消耗型商品,發貨並消耗后可以再次購買該商品。
5. 購買非消耗型商品后,不可再次購買該商品,再次購買返回錯誤碼60051,首次購買成功后應用需提供相應服務。
6. 購買訂閱類型商品后,不可再次購買該商品,再次購買會返回錯誤碼60051,首次購買成功后應用需提供相應服務。
7. 購買消耗型商品異常掉單,重新進入應用需要補單。
3. 沙盒測試
沙盒測試允許您在接入華為應用內支付聯調過程中無需真實支付即可完成端到端的測試,您可以在AppGallery Connect中配置測試帳號(賬號需是真實的華為賬號),並設置允許這些帳號執行沙盒測試。

1. 沙盒環境下購買非消耗型商品,購買之后可以執行消耗,之后可以再次購買,以方便測試 ( 現網環境不可以 )。
2. 購買成功后的收據信息中,會攜帶值為 0 的purchaseType字段,標識此次購買為沙盒測試的記錄。
3. 沙盒測試拉起收銀台時會彈出沙盒環境標志的彈框,收銀台和成功頁也均有沙盒環境的標志。
4. 沙盒環境下的訂閱續訂時間會比正常情況更快。

4.示例代碼
示例代碼請參考華為快應用參考官網接入支付服務的demo部分。
本文是快應用接入應用內支付的慕課指導的word版本,具體demo講解可參考慕課視頻教程。