1. 程式人生 > >iOS app + 支付寶 總結(補充支付寶SDK&Demo下載地址)

iOS app + 支付寶 總結(補充支付寶SDK&Demo下載地址)

由於app內需要用到支付功能,選擇了當前最流行的支付寶進行支付。在進行內嵌支付寶功能開發時,被它狠狠的耍了一把。

根據支付寶開發文件,參考demo程式碼。將相關支付功能加到了自己的程式碼中。一些根據文件來做,也沒有太大的難度。但新增完程式碼,進行測試時,問題卻來了。在app中可以成功呼叫支付寶app,成功支付並返回。這個時候就出現問題了。在app delegate支付寶回撥本app的執行函式中,公鑰驗證簽名成功後,會對支付結果進行提示。根據demo,提示支付的程式碼如下:

  1. UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@
    "提示" message:result.statusMessage delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];  
  1. [alertView show];  
  1. [alertView release];  

問題就出現在這裡了。支付成功後,result.statusMessage返回的值卻是空的。而我測試取消支付,這個返回值卻是正確的,提示“操作取消”之類的文字(具體忘記了)。支付失敗沒有進行測試。這下麻煩了,不知問題出在哪裡。總不能支付成功後,返回一個空的提示吧。或者直接將提示自己寫死,顯示“支付成功”?那萬一是其他資訊提示咋辦呢?

重複對比了demo和自己程式的程式碼,發現沒有錯漏的地方。百思不得其解,於是想是不是支付寶後臺的問題?又根據支付寶伺服器端的開發文件,仔細檢查,反覆測試了。還是找不到原因。

這下沒撤了,只能打支援電話,加入一個交流群,問了支付寶負責技術的人,反覆說明問題後,終於得到了答覆,支付成功時,result.statusMessage是沒有返回值的,大概意思是後來取消了這個返回值。

我的媽阿,對返回值作了改變,為啥文件又沒說明,讓我等苦逼的程式猿白白折磨了一兩天,情何以堪呢。客氣的將我的想法提了給支付寶的技術支援,回覆說:不要太相信demo。shit,這是人話嗎,我用你的介面,不是根據你的文件和demo,那我會擔心出錯的,而且這是涉及到金錢問題,所以更加不能馬虎。內心暗罵了一通之後,又將我的一番建議,例如要求再進一步完善文件,對細節再進一步謹慎之類的提交到支付寶技術支援那裡。到此,我的痛苦的支付寶介面呼叫過程就告一段落了。寫這篇文章,算是提醒自己或者有需要的人,有不明白的地方,第一時間找支付寶的技術支援,不要自己瞎折騰了,說不定你碰到的問題不是自己的問題,而是出在第三方介面上。

另外說一下,支付寶網站上找技術支援,直接點支援旺旺是沒反應的,你需要打電話去問,才能拿到技術支援的旺旺號,這裡公佈一下支付寶技術支援群的旺旺號,應該不會被支付寶的人罵吧。呵呵

旺旺號:24768316 
密碼:alipay2010

補充:

另外,很多人發私信來問,哪裡可以下載支付寶demo或者sdk。這個問題自己曾經也痛苦過,在支付寶網站找個demo,不是一般的難,位置隱藏得非常深,特別是改版後,更加難找了。上一次(改版後)實在找不到,只好問支付寶的技術支援。

支付寶整合sdk和demo下載地址:

這個只是無線產品的整合sdk和demo,其他的產品沒有用過,所以忽略。



近來處理了幾個app應用的支付寶整合,對其中的一些問題有了些瞭解,彙總一下,以備自己或者其他人蔘考。

1、訂單簽名錯誤,請檢查PARTNER對應的金鑰是否正確

這個問題網上很多人問,但千篇一律都是沒有給出解決辦法的。很不幸的,我也碰到了。一開始以為是自己金鑰生成有問題,對著支付寶的開發文件,重複生成金鑰,每步都嚴格按照要求,結果還是無法解決。幾近崩潰!後來沒辦法了,問了支付寶整合開發的技術支援,原來這個不是金鑰的問題,而是沒有申請到對應的介面。app應用內支付,要開通的產品是:安全支付,版本不知道它是怎樣區分的,我v1.1和v2.0我都見過,如果開通了這個介面,那這個問題就馬上解決了(前提是你的金鑰生成不能有問題)。

2、伺服器端驗籤不成功

這個問題大多是因為支付寶公鑰生成不正確。很奇怪的是,支付寶整合開發的文件居然沒有說怎樣生成支付寶公鑰,這個問題也是搞了好久才明白過來。支付寶公鑰檔案的格式如下:

-----BEGIN PUBLIC KEY-----

xxxxx
xxxxx

xxxxx

-----END PUBLIC KEY-----

中間內容部分是簽約後臺上獲取的支付寶公鑰,將空格去掉,換成換行就可以了。檔案儲存為alipay_public_key.pem。(當然名字可以改的,前提是伺服器端的驗籤程式碼也要改成相應的檔名)