可能標(biāo)題不是明確我在這里解一下,解決的辦法有很多 我只記錄一下我使用的方法:
問(wèn)題是 :
1)當(dāng)用戶支付完成以后 沒(méi)有通過(guò)點(diǎn)擊支付平臺(tái)的 “ ?返回商家?”??按鈕 返回到自己開(kāi)發(fā)的APP。
2)或者是說(shuō) 通過(guò)后臺(tái)直接打開(kāi)APP 。
3)或者點(diǎn)擊左上角的箭頭返回到自己的APP。
以上的情況 是無(wú)法監(jiān)聽(tīng)到第三方平臺(tái)的支付回調(diào)的!所以得想個(gè)辦法監(jiān)聽(tīng)!這個(gè)時(shí)候需要后臺(tái)來(lái)忙了!
1:讓后臺(tái)寫一個(gè)查詢支付狀態(tài)的接口!是通過(guò)訂單號(hào)查詢的,訂單號(hào) 是通過(guò)后臺(tái)生成并且返回的!
2:通過(guò)APP提供系統(tǒng)方法進(jìn)行監(jiān)聽(tīng)!具體如下:
????1)在發(fā)起支付的時(shí)候要先生成訂單號(hào),把這個(gè)訂單號(hào)保存在本地 (NSUserDefaults)調(diào)用?synchronize 保存在本地!
? ? 2)在 ??AppDelegate ? 文件里面監(jiān)聽(tīng) ??applicationWillEnterForeground (即將進(jìn)入前臺(tái))這個(gè)方法 發(fā)送一個(gè)通知,然后到支付頁(yè)面接受這個(gè)通知!
????3)一般來(lái)說(shuō) 都是按可以接受到支付回調(diào)的思路來(lái)判斷的,這個(gè)時(shí)候就需要在 支付回調(diào)的方法里面做支付成功的 ? ? ? ? ? ? ?????????????后續(xù)操作,有一點(diǎn)就是 在收到支付回調(diào)之后一定要把保存在本的訂單號(hào)置為空!
? ? 4)以上都完成之后 ,就到接受到回到前臺(tái)的通知了 ?我延遲了3秒 調(diào)用后臺(tái)的查詢訂單號(hào)的接口,并且是 當(dāng)本地的訂單號(hào)不為空的情況下去查詢的!這就是為什么上面要把訂單號(hào)置為空的原因了!如果是按正常邏輯走的!就不會(huì)去查詢訂單號(hào)的!
????5)還有一點(diǎn)就是 當(dāng)退出當(dāng)前控制器的時(shí)候,記得把通知移除掉,避免多次支付的時(shí)候,有多個(gè)通知!