最近在研究支付寶的繼承,所以做一下筆記
繼承支付寶第一步
第一步:創建應用並獲取APPID
創建應用和申請支付寶支付那些就不說了,因爲這些一般是不是我們做的事,我從配置密鑰那一步說起:
第二步:配置密鑰(這步很關鍵,決定你的成敗)
開發者登錄開放平臺後,找到並進入應用
1、先下載密鑰生成器,有mac版hewindow版本的
生成方式一(推薦):使用支付寶提供的一鍵生成工具(內附使用說明)
mac版本的工具下載後是這個東西, 下面介紹mac版本的操作步驟
生成
rsa_private_key_pkcs8
rsa_private_key
rsa_public_key
三個文件
支付寶平臺的解析:
經過以上步驟,開發者可以在當前文件夾中(OpenSSL運行文件夾),看到app_private_key.pem(開發者RSA私鑰)、app_private_key_pkcs8.pem(pkcs8格式開發者RSA私鑰)和app_public_key.pem(開發者RSA公鑰)3個文件。開發者將私鑰保留,將公鑰提交給支付寶配置到開發平臺,用於驗證簽名
注意:對於使用Java的開發者,將pkcs8在console中輸出的私鑰去除頭尾、換行和空格,作爲開發者私鑰,對於.NET和PHP的開發者來說,無需進行pkcs8命令行操作。
我解析一下上面的文字:
其實 app_public_key.pem 是要上傳給支付寶平臺的,app_private_key.pem的內容(java是使用app_private_key_pkcs8.pem)是iOS程序裏面下單的時候填寫的 privateKey 參數,要去除頭尾(-----BEGIN PRIVATE KEY----- xxx -----END PRIVATE KEY----- )
例如
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMvITQCO+82VXnee
3UiODyFaqrMm9XHenUKAvEmnOYTHRTecPhhRFTyownCKdx+F9YgquEVeKO3f8xTC
sHnyeuB1P6CV2HxHeMAam86t14hhk36djj59JHCjgb0QcxllaO9p/wTOXTdy2Miy
EcB/+Bf7UY7nyIPhi/bUzztAiHd9AgMBAAECgYAAvwsJJXzmk9V0urA0w9BqXtqh
LVNYx2fsBmyqGGKtic1HFttjW2iogDW2E8u74dG0XfOuzVl5BYjuWogq6ihpCFie
nFt7ATlEOEoHzfn2fn2/aNbuMey+72k8NAjP5PswDpPV6RaN+I78oytJIftypNTo
rvz3V1hWJJph8Xy6AQJBAOYPlNdwhIMc/YeQ0gugdgj3Ub8uGC5CxfFvlBV2AGNF
3OZ4rJV7xLFGtzgME7XWvm+tpkeg2zWHOtZ3EsWz14UCQQDiwjmik1Cdq0lyxp7C
dpHcnmob4S3t4L/cjk4GtKPlP9TlxdL4YnOzv7nX+I2SC1k/UTnNVBuKOp0f6sZ8
P9WZAkBeZs5giN8XHfI6ioZmFvXYQAPfOv7ZHLU0mOBe3gjSs3wtZh8LR7oyNB5C
dVIxL2j9UngEtFC+6jqOflXJoj4xAkBu5naxoEKpGgCN9b3ndX3Y3FEg2XxQ/r5W
6/IVLXuKvzEsPxfzCpNzsaz+hz0V1B8N7HfMh/oAHLKDzZrNYZrhAkBoPWGhr8aS
nGC+cJYmkmMLbVXsSft988tS6GM/809xngDx62bY2BOQQtdkibpBm1utdq3fo8fx
eQXxQSSKTDaW
-----END PRIVATE KEY-----
那麼:privateKey就是
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMvITQCO+82VXnee
3UiODyFaqrMm9XHenUKAvEmnOYTHRTecPhhRFTyownCKdx+F9YgquEVeKO3f8xTC
sHnyeuB1P6CV2HxHeMAam86t14hhk36djj59JHCjgb0QcxllaO9p/wTOXTdy2Miy
EcB/+Bf7UY7nyIPhi/bUzztAiHd9AgMBAAECgYAAvwsJJXzmk9V0urA0w9BqXtqh
LVNYx2fsBmyqGGKtic1HFttjW2iogDW2E8u74dG0XfOuzVl5BYjuWogq6ihpCFie
nFt7ATlEOEoHzfn2fn2/aNbuMey+72k8NAjP5PswDpPV6RaN+I78oytJIftypNTo
rvz3V1hWJJph8Xy6AQJBAOYPlNdwhIMc/YeQ0gugdgj3Ub8uGC5CxfFvlBV2AGNF
3OZ4rJV7xLFGtzgME7XWvm+tpkeg2zWHOtZ3EsWz14UCQQDiwjmik1Cdq0lyxp7C
dpHcnmob4S3t4L/cjk4GtKPlP9TlxdL4YnOzv7nX+I2SC1k/UTnNVBuKOp0f6sZ8
P9WZAkBeZs5giN8XHfI6ioZmFvXYQAPfOv7ZHLU0mOBe3gjSs3wtZh8LR7oyNB5C
dVIxL2j9UngEtFC+6jqOflXJoj4xAkBu5naxoEKpGgCN9b3ndX3Y3FEg2XxQ/r5W
6/IVLXuKvzEsPxfzCpNzsaz+hz0V1B8N7HfMh/oAHLKDzZrNYZrhAkBoPWGhr8aS
nGC+cJYmkmMLbVXsSft988tS6GM/809xngDx62bY2BOQQtdkibpBm1utdq3fo8fx
eQXxQSSKTDaW
標準的私鑰文件示例(PHP、.NET使用)
1 2 3 | -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mOfno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQABAoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35FpjGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kdY6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJLhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtGUIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xzqwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zMSBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592 -----END RSA PRIVATE KEY----- |
PKCS8處理後的私鑰文件示例(Java使用)
1 2 3 | -----BEGIN PRIVATE KEY----- MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/ -----END PRIVATE KEY----- |
公鑰文件示例
1 2 3 | -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB -----END PUBLIC KEY----- |
2、點擊“RSA(SHA1)密鑰”處的“設置開發者公鑰”(如已設置則顯示“查看開發者公鑰”,可修改),將公鑰文件去除頭尾、換行和空格,僅需填入字符串。
如下圖:
到這裏,密鑰配置完成了
3、iOSdemo裏面的集成
4、測試下單
主要是參數要選對
NSString *pid = @"合作伙伴身份(PID)";
NSString *appID = @"APPID(支付寶平臺上面有)";
NSString *privateKey = @"MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMvITQCO+82VXnee3UiODyFaqrMm9XHenUKAvEmnOYTHRTecPhhRFTyownCKdx+F9YgquEVeKO3f8xTCsHnyeuB1P6CV2HxHeMAam86t14hhk36djj59JHCjgb0QcxllaO9p/wTOXTdy2MiyEcB/+Bf7UY7nyIPhi/bUzztAiHd9AgMBAAECgYAAvwsJJXzmk9V0urA0w9BqXtqhLVNYx2fsBmyqGGKtic1HFttjW2iogDW2E8u74dG0XfOuzVl5BYjuWogq6ihpCFienFt7ATlEOEoHzfn2fn2/aNbuMey+72k8NAjP5PswDpPV6RaN+I78oytJIftypNTorvz3V1hWJJph8Xy6AQJBAOYPlNdwhIMc/YeQ0gugdgj3Ub8uGC5CxfFvlBV2AGNF3OZ4rJV7xLFGtzgME7XWvm+tpkeg2zWHOtZ3EsWz14UCQQDiwjmik1Cdq0lyxp7CdpHcnmob4S3t4L/cjk4GtKPlP9TlxdL4YnOzv7nX+I2SC1k/UTnNVBuKOp0f6sZ8P9WZAkBeZs5giN8XHfI6ioZmFvXYQAPfOv7ZHLU0mOBe3gjSs3wtZh8LR7oyNB5CdVIxL2j9UngEtFC+6jqOflXJoj4xAkBu5naxoEKpGgCN9b3ndX3Y3FEg2XxQ/r5W6/IVLXuKvzEsPxfzCpNzsaz+hz0V1B8N7HfMh/oAHLKDzZrNYZrhAkBoPWGhr8aSnGC+cJYmkmMLbVXsSft988tS6GM/809xngDx62bY2BOQQtdkibpBm1utdq3fo8fxeQXxQSSKTDaW";
privateKey 就是rsa_private_key_pkcs8.pem 中間的內容(去除頭尾)
例如:
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/
-----END PRIVATE KEY-----
去除-----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY-----
那PRIVATE KEY 就是
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/