1.首先是最常見的微信訂單號重復(fù)的問題,這里做的操作就是在拿到服務(wù)器的訂單號之后,APP端隨機在后邊追加兩個字符串,這樣就可以避免這個問題.
2.如果服務(wù)器生成的訂單號過長的話也會調(diào)起失敗,返回:訂單號長度錯誤.
3.第三個問題相對于前兩個來說比較隱蔽,剛跳轉(zhuǎn)到第三方支付之后,不在第三方如:微信,支付寶做任何操作,然后通過雙擊home鍵或者點擊左上角的方式返回自己的應(yīng)用,這時候是收不到任何的回調(diào),這樣造成的結(jié)果就是程序界面仍然停留在收銀臺頁面,這樣用戶繼續(xù)點擊就會造成重復(fù)下單的BUG,是一個比較麻煩的問題.初步想到的解決辦法即時性的都不能解決.最后想到了一個稍微討巧的辦法,首先如果這個程序是通過支付跳轉(zhuǎn)到第三方的,就加一個布爾值apinPayGO,當(dāng)程序從后臺進入前臺時就發(fā)出通知,.經(jīng)過實際測試,支付的回調(diào)實在系統(tǒng)的運行方法之后的,收銀臺頁面在接收到該通知之后,延遲一秒執(zhí)行方法,判斷系統(tǒng)這次從后臺進入前臺是否經(jīng)過了支付第三方的回調(diào)方法,如果經(jīng)過了支付第三方的回調(diào)方法就不做任務(wù)操作,如果沒經(jīng)過第三方的回調(diào)方法,證明用戶在跳轉(zhuǎn)到第三方時沒做任務(wù)操作,直接通過iOS系統(tǒng)返回到自己的應(yīng)用了,這里就把頁面跳轉(zhuǎn)到待支付頁面,然后開始倒計時!
- (void)applicationWillEnterForeground:(UIApplication*)application{
NSLog(@"EnterForeground");
if(self.apinPayGO) {
NSNotificationCenter*center = [NSNotificationCenterdefaultCenter];
[centerpostNotificationName:@"payReturn"object:nil];
}
}
4.創(chuàng)建訂單,支付中間的時間控制問題.
用戶點擊創(chuàng)建訂單,服務(wù)器設(shè)置一個超時時間十分鐘,需要用戶在十分鐘內(nèi)完成支付,直接去操作是沒什么問題.但是如果不直接操作,第三方的支付超時時間跟服務(wù)器訂單儲存的超時時間不同步,可能出現(xiàn)的情況就是:服務(wù)器這邊訂單已經(jīng)失效了,但是第三方支付仍可以支付,出現(xiàn)bug.有個預(yù)想的處理方法是:支付前進行查詢訂單操作,服務(wù)器返回一個超時時間,然后進行第三方支付時把這個超時時間設(shè)置過去.但是在做的過程中又遇到了新的問題:第三方支付的超時時間有限制,支付寶是1min~15d,微信是要大于五分鐘.
解決方案:創(chuàng)建訂單 跟調(diào)第三方支付創(chuàng)建訂單 同時進行,然后第一次支付的時候設(shè)置超時時間.