問(wèn)題現(xiàn)象
項(xiàng)目接入了華為應(yīng)用內(nèi)支付HMS SDK2.x,現(xiàn)網(wǎng)玩家反饋拉不起華為支付,支付一直報(bào)錯(cuò)“您已取消支付”。
聯(lián)系玩家溝通,玩家是這么操作的:
(1)拉起游戲的支付收銀臺(tái)后,直接將游戲切換到后臺(tái),收銀臺(tái)界面如下
(2)重新從后臺(tái)喚醒游戲,繼續(xù)支付,無(wú)法支付,提示“您已取消支付”
問(wèn)題復(fù)現(xiàn)與分析
按照玩家反饋,我們復(fù)現(xiàn)測(cè)試,確實(shí)會(huì)發(fā)生,分析日志,發(fā)現(xiàn)報(bào)錯(cuò)如下:
2021-02-01 15:57:04.573 6593-6593/? I/HMSAgent: Huawei(563)->HMSAgent(393)->PayApi(174)->pay
pay:requ=com.huawei.hms.support.api.entity.pay.PayReq@16aa142 handler=com.mayisdk.msdk.api.sdk.Huawei$9$1@294f553
2021-02-01 15:57:04.573 6593-6593/? E/HMSAgent: Huawei(563)->HMSAgent(393)->PayApi(177)->pay
pay:has already a pay to dispose
2021-02-01 15:57:04.577 6593-6593/? I/System.out: game pay: onResult: pay fail=-1006code = 2
2021-02-01 15:57:04.577 6593-6593/? I/System.out: 支付失敗
問(wèn)題原因和解決
看報(bào)錯(cuò),是集成華為HMS SDK報(bào)的錯(cuò),所以最后通過(guò)提單(https://developer.huawei.com/consumer/en/support/feedback)聯(lián)系了華為技術(shù)支持答復(fù)處理:
出現(xiàn)這個(gè)問(wèn)題的原因是:
我們集成華為支付的HMS SDK版本是2.x(需要配合華為的HMSAgent組件),這個(gè)版本在發(fā)起支付請(qǐng)求時(shí),HMSAgent會(huì)檢查是否重復(fù)發(fā)起支付。由于玩家在支付過(guò)程中切換前后臺(tái),導(dǎo)致HMSAgent認(rèn)為這筆支付還沒有完成,所以拒絕了用戶支付。
解決方案
(1)由于我們集成的SDK版本太老了,華為目前已經(jīng)不再提供HMSAgent的優(yōu)化維護(hù)了,如果我們一定要規(guī)避這個(gè)問(wèn)題,可以在HMSAgent里搜索has already a pay to dispose,將相關(guān)控制重復(fù)請(qǐng)求的代碼屏蔽或刪除。類似下面的:
說(shuō)明:上述代碼,在ProductPayApi.java和PayApi.java中都存在,建議都屏蔽掉。
(2)直接升級(jí)應(yīng)用內(nèi)支付HMS SDK到華為最新的版本,當(dāng)前最新版本文檔鏈接如下:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/dev-process-0000001050033070