接入支付寶出現交易訂單處理失敗,請稍后再試(ALI64)的錯誤【轉】


接入第三方平台的時候,有時雖然按照文檔來做,但是總是還會有各種各樣的問題。

上次在接入支付寶的時候就碰到了交易訂單處理失敗,請稍后再試(ALI64)這樣的錯誤,后來經過排查和總結,一般來講這種問題都是公鑰和私鑰沒有正確配置造成的。支付寶這邊為了保證數據在傳輸時不被篡改,使用了rsa這種非對稱的加密方式。大概的流程如下:

支付寶交互數據流程

支付寶交互數據流程

理解這種流程后,我們就需要上傳給支付寶我們的公鑰和下載下來支付寶的公鑰。下面是一些遇到的問題

公鑰不是一行

實際中的話,我們下載支付寶的公鑰,可以看到公鑰是一行的。常見的格式都有帶BEGIN PUBLIC KEY、END PUBLIC KEY這樣的字眼:

-----BEGIN PUBLIC KEY——
 ......
 -----END PUBLIC KEY——

這里需要把自己的公鑰調整為一行,刪除換行、頭尾begin、end行。

公鑰沒有傳到支付寶服務器

這個有時會忘記掉,因為支付寶要用我們的公鑰解開我們傳遞到支付寶的數據,所以需要將我們自己的公鑰上傳到支付寶服務器,記的搞成一行。另外還有一個要注意的是,可以傳公鑰的地方都可以傳一下。如下圖合作伙伴密鑰管理、開放平台密鑰管理、無線產品密鑰管理都需要傳一下。我估計這三個是用在不同的業務上。

上傳公鑰到支付寶

上傳公鑰到支付寶

私鑰格式不對

私鑰的格式有多種,如:pem、pkcs、der等格式,不同的程序語言在處理上需要的格式不一樣,php處理用openssl_get_privatekey需要pem格式,java可以處理pkcs格式。這方面稍微注意下。

上面說到公鑰和和私鑰的問題,支付寶有提供一個工具可以用來檢測,上次我們也是通過這個工具才檢測出是私鑰格式不對造成的。

這里附上生成公鑰,密鑰的方式(或查看此處  http://www.cnblogs.com/dhsx/p/5324880.html

用openssl工具生成:

生成私鑰pem

$ openssl genrsa -out rsa_private_key.pem 1024

 

此時會在當前目錄生成rsa_private_key.pem文件,php私鑰就是用這個文件。

生成公鑰

$ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

此時會在當前目錄生成rsa_public_key.pem文件,這個就是公鑰文件,上傳到淘寶的就是這個,注意去除掉換行、頭和尾的begin和end。

如果你需要使用pkcs8格式,可以按照如下生成:

$ openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

 

注意把輸出的文件保存下來,就是pkcs8格式,淘寶提供java工具校驗密鑰和公鑰是否配對,就是使用這個格式來進行檢測。

轉子:http://www.01happy.com/alipay_error_ali64/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM