iOS支付寶報錯 rsa_private read error : private key is NULL

該錯誤的引起因素有好幾點:
1、傳遞的參數有空值。在支付寶的支付請求url中,某個參數是空值。這樣空值在經過md5簽名以後,比對會報錯,所以請注意您傳遞過來的url中無空值。建議檢查您購物車的支付寶代碼,例如:subject="shop"而非subject= ""


2、程序中安全校驗碼填寫錯誤(請務必保存好該碼,泄漏出去有可能被人僞造消息)。在您拿到不同測試中都有一個key的參數,該參數代表支付寶的安全校驗碼。從賬戶內複製過來的時候,會多餘空格,請消息檢查。例如某一個用戶的key是kXXXXXXXXXXXXXXXXXXXXXXXXXXXati,複製到程序中key=” kXXXXXXXXXXXXXXXXXXXXXXXXXXXati ”多了空格的。


3、中文編碼的問題。不同網站採用不同的中文編碼。有utf-8.gbk,iso-8859-1等,而程序中md5對中文簽名會不一樣,造成顯示該錯誤。現asp的程序沒有直接utf-8編碼的md5。Php和jsp。Net程序都是支持該編碼的,您可以通過支付接口的  _input_charset = “utf-8”  參數設置制定的字符集,並且我們返回通知也會使用該字符集,解決亂碼的問題。


4私鑰沒有轉換爲pkcs8格式

解決方法:

將私鑰轉成PKCS8替換一下原私鑰即可


1、生成私鑰pem,  執行命令openssl genrsa -out rsa_private_key.pem 1024
2、生成公鑰,執行命令openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
3、將RSA私鑰轉換成PKCS8格式,命令執行openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt PHP服務端語言讀取私鑰不需要PKCS8轉換。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章