1. 程式人生 > >Android 整合支付寶SDK實現快捷支付--填坑

Android 整合支付寶SDK實現快捷支付--填坑

    剛給app集成了支付寶的android客戶端快捷支付SDK,整合很簡單,但是由於是涉及錢的問題,大家都會持謹慎態度,所以有很多小坑,粗心的話整合之路會很坎坷,對於整合步驟,我不想寫了,沒有必要,就看官方的SDK整合文件就好,內容也不多,對於整合步驟這個不推薦看部落格,sdk本來就很精簡了,真沒有必要捨本逐末看別人寫的部落格,非常簡單,仿照demo基本不許要用腦筋寫程式碼,^_^。就記錄一下遇到的坑吧,為以後有此需求的同行少走點彎路(程式設計師好辛苦):

    1、對於引數一定要嚴格按照官方文件寫的拼接,仔細一點不會有問題的,再不濟圖省事完全可以copy一下demo的拼接方法。


對於跑不起來的一切bug,比如很常見又讓人摸不著頭腦的“header too long”debug出來錯誤資訊會是

“sdkdemo java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long“不要懷疑不要猶豫不要遐想,趕緊回過頭來檢查引數拼接,包括常量,那麼又有了第二個問題。

   2、

	public static final String PARTNER = "";
	public static final String SELLER = "";
	public static final String RSA_PRIVATE = "";
	public static final String RSA_PUBLIC = "";
這幾個常量很容易寫錯,前兩個第一個是簽約後得到的商戶pid,2088開頭那個串。第二個填賣家支付寶賬號要和傳到網站的一樣,介於可能會更改賬號,建議seller也傳2088那個串就ok(sdk說seller可以傳支付寶賬號或者pid):

第三四個粗心的同行很容易出錯,RSA_PRIVATE這個引數用我們自己生成的那個,注意著個值在eclipse中時不能有換行,不能有空格,必須一行顯示完全。我們自己生成的公玥上傳支付寶網站,我們不用。這裡我們的RSA_PUBLIC引數用的是支付寶給我們的公玥(商戶簽約支付寶網站獲得),不要誤用成自己生成的公玥。

這裡其實私鑰不能寫在程式碼裡的,寫程式碼裡很危險的,所以sign這個工作我們要很開心的推給伺服器去做!所以我們拼好引數傳給我們的伺服器,讓伺服器簽名,然後我們請求籤名後的結果就好,拿到簽名的sign拼接到後面加上signtype就ok了。
   3、
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(s_privateKeyIn1t);
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
PrivateKey privateKey = keyFactory.generatePrivate(privSpec);
這個僅供參考,可能沒用,對於簽名失敗的bug可以試試這樣改,我們用demo的寫法沒有問題,可能是老版本sdk可能存在的bug
   4、
	// 呼叫銀行卡支付,需配置此引數,參與簽名, 固定值
		// orderInfo += "&paymethod=\"expressGateway\"";
demo中這個引數注掉了,文件說是呼叫支付寶銀行卡需要的引數,但是我用了這個引數後報錯,也沒查到什麼原因,正自查這個問題,誰知道跪求留言。現在網上這方面資料沒有人寫,基本都是sdk文件的翻版,這個引數sdk文件沒說明白,部落格也沒搜到,客服聯絡不上,哎。。。程式設計師苦啊。。。聊以記錄,希望能對以後有此需求的人有所幫助。。。
5、對於第四個問題,終於有結果了,好不容易聯絡到客服,阿里的人說這個介面已經不推了,所以說銀行卡這個介面引數
// orderInfo += "&paymethod=\"expressGateway\"";
不能用是正常的,真是坑爹啊,這種變更竟然不在文件裡寫清楚,害的我浪費這麼多時間找資料。。。希望不要再有人走彎路了,