華為應用內支付服務(In-App Purchases)通過簡便的接入流程為用戶提供良好的應用內支付體驗,然而在實際接入過程中,有一些開發者反饋測試時會無法正常拉起支付頁面,下文將詳細分析問題出現的5種情形,並給出解決方案,希望給遇到類似問題的開發者提供參考。 情形1:AGC控制臺上API管理中的支付 ...
華為應用內支付服務(In-App Purchases)通過簡便的接入流程為用戶提供良好的應用內支付體驗,然而在實際接入過程中,有一些開發者反饋測試時會無法正常拉起支付頁面,下文將詳細分析問題出現的5種情形,並給出解決方案,希望給遇到類似問題的開發者提供參考。
情形1:AGC控制臺上API管理中的支付API已打開,創建的商品也生效了,但查看日誌發現報錯60002
原因分析:對IAP的請求結果驗簽時需要使用支付公鑰,進行SHA256WithRSA簽名校驗,此公鑰開發者未配置。
解決方法:請仔細檢查以下三點是否設置:
(1)API管理中支付API已打開(註意:用戶在開通IAP服務,半個小時左右才起效)
詳情可參考官方文檔
(2)確保公鑰開關激活打開,且公鑰使用正確
(3)在AGC後臺PMS(商品管理系統)上配置了相應類型的商品,並激活成功
情形2:開發者進入會員中心編輯訂閱頁面,顯示異常,報錯60051
查看官網文檔,錯誤碼60051表示已購買型商品或者訂閱型商品,不能再次購買;
原因分析:
復現問題時我們發現,訂閱完成返回會員中心有個刷新動作,在刷新前點擊訂閱會異常,刷新後點擊就是正常的。這是因為如果沒有刷新或者刷新不及時,會存在上一次的緩存數據。在點擊一個訂閱商品之後,立即再點擊訂閱另一個商品的時候,會把首次訂閱的商品id帶入,但該id並不是最新購買的訂閱商品id,從而造成數據的不匹配,最終導致報錯,無法顯示編輯頁面。
解決方法:
建議開發者對頁面效果刷新時機進行優化處理,避免未刷新就去續費。
情形3:使用華為手機進行支付調試的時候報錯60003,但PMS系統中商品ID配置未發現問題。
原因分析:首先報錯60003一般是在PMS系統中的商品信息配置有問題,可以到AGC網站後臺,在我的應用->運營-> 商品管理->商品列表 ,查看對應商品是否存在或者必填的信息是否正確完整(例如商品名稱,商品ID,價格,商品類型,是否激活)。
另外可以檢查商品ID是否在客戶端代碼中填寫正確,是否與AGC後臺的商品ID保持一致,請重點檢查客戶端代碼中傳入的欄位是否有問題。
還有一點需要註意的是在設備上登錄的華為賬號的服務地點是否在IAP覆蓋的範圍內。可以通過調用Task
解決方案:
經過CP排查發現是客戶端端代碼傳入的商品ID和AGC後臺配置的商品ID不一致,修改後問題已解決。
情形4:調用支付拉起收銀台介面,第一次成功拉起成功支付頁面,然後點擊取消返回,第二次再繼續調用該介面為什麼無法拉起支付頁面 ?
原因分析:購買消耗性商品後,必須要先完成商品消耗,之後才能再次購買,否則會報錯60051等錯誤碼。
解決方法:對於消耗性商品進行補單操作
開發者需要在以下這四種場景下觸發補單機制:
· 應用啟動時
· 購買請求返回-1(OrderStatusCode.ORDER_STATE_FAILED)時
· 購買請求返回60051(OrderStatusCode.ORDER_PRODUCT_OWNED)時
· 購買請求返回1(OrderStatusCode.ORDER_STATE_DEFAULT_CODE)時
如果IAP 後臺配置的退款回調地址錯誤,需要重新配置。具體可參考文檔
除了無法拉起支付頁面的問題以外,如何確認是否進入沙盒環境也是一個常見的問題。
情形5:使用沙盒帳號測試,沒有彈出沙盒環境端側提示彈框,如何確認是否進入沙盒環境?
原因分析:首先進入沙盒測試環境,正常情況下會提示以下彈框
但是在滿足了沙盒環境的2個必要條件後,仍然無法提示該對話框,是否表示沒有進入沙盒測試?
以下是開發者通過isSandboxActivated介面列印出的相關數據
從列印的日誌來看:滿足了沙盒環境2個必要條件。
-
當前登錄的華為帳號屬於沙盒帳號
-
VersionCode大於應用市場線上版本(該APK暫未發佈應用市場,所以應用市場返回的版本號為0)
很明顯從結果來看理論上應該進入了沙盒測試環境。那麼有沒有其他方法來確認?
解決方法:是否成功進入沙盒環境,可以通過以下幾種方法排查
a) 查看返回的購買數據,參考下圖:
如果華為訂單號payOrderId以SandBox開頭,那麼錶面該筆訂單屬於沙盒測試產生的訂單。
b)查看支付報表
可以查看支付報表,如果支付報表沒有該筆訂單,說明該訂單來自於沙盒測試產生的。(註:支付報表數據不是實時更新的,如果當天購買的訂單,為了判斷準確性,可以次日再刷新該報表驗證)
c)清除HMS Core 緩存
可以嘗試清除HMSCore緩存,端側彈框是根據相應欄位標識進行判斷的,可能是緩存原因導致該值未及時刷新。可通過設置 –>應用和服務->應用管理->HMS Core 進行緩存清理。
瞭解更多詳情>>
訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關註我們,第一時間瞭解 HMS Core 最新技術資訊~