本人最近在對接支付寶 SDK 實現行動支付功能。從官網下了最新的DEMO,配置好參數以後,運作正常。然後按照教程一步步整合到自己的專案中去,該注意的也都注意了,編譯OK。因手機已經安裝了支付寶客戶端,因此需要在Appdelegate 中取得同步結果,程式碼如下(Swift):
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
if (url.host! as String) == "safepay" {
// 支付跳转支付宝钱包进行支付,处理支付结果
AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: { (resultDic) in
print("result = \(resultDic)")
})
}
return true
}
// NOTE: 9.0以後使用新API介面
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if (url.host! as String) == "safepay" {
// 支付跳转支付宝钱包进行支付,处理支付结果
AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: { (resultDic: [NSObject : AnyObject]!) in
print("result = \(resultDic)")
})
}
return true
}
真機運作後,跳到支付寶支付成功,再跳回自己的App 時,控制台能夠列印出同步結果(狀態是9000支付成功的),但程式直接crash,停在AlipaySDK.defaultService ().processOrderWithPaymentResult 方法中,控制台就顯示(lldb)。
隨後我嘗試將 AlipaySDK.defaultService().processOrderWithPaymentResult 方法屏蔽掉,運行就正常了,不會崩潰。我又在另外一台真機上測試,因為這台真機沒有安裝支付寶客戶端,所以在H5中完成付款後會在:
AlipaySDK.defaultService().payUrlOrder(orderString as String, fromScheme: appScheme, callback: { (resultDic) in
print(resultDic)
})
方法中取得同步結果,但這次控制台沒有列印同步結果,直接 crash。
這說明只要我一呼叫取得同步結果的方法就會 crash。無奈我又新建一個測試的 Swift 項目,同樣的方法集成支付寶 SDK,一樣的程式碼,結果發現運作正常,壓根不會有之前的崩潰現象!我懷疑會不會是跟別的第三方函式庫發生衝突了,但是之前也遇到過兩個三方函式庫衝突,一般都是重定義的問題,編譯也不會通過。
實在找不出問題在哪,求這裡的大大們有沒有遇到過我這個問題,跪謝!
业精于勤,荒于嬉;行成于思,毁于随。