easywechat對接企業打款到銀行卡
使用easyWeChat命令:
./vendor/bin/easywechat payment:rsa_public_key \
> --mch_id=1********8 \
> --api_key=YT********************Yy \
> --cert_path=/Users/overtrue/www/demo/apiclient_cert.pem \
> --key_path=/Users/overtrue/www/demo/apiclient_key.pem
在當前目錄生成一個 ./ public-1****8.pem 檔案,如果直接使用該公鑰,將報openssl_public_encrypt(): key parameter is not a valid public key【金鑰引數不是有效的公鑰】,在easywechat有這樣一段原始碼:
function rsa_public_encrypt($content, $publicKey)
{
$encrypted = '';
openssl_public_encrypt($content, $encrypted, openssl_pkey_get_public($publicKey), OPENSSL_PKCS1_OAEP_PADDING);
return base64_encode($encrypted);
}
報非法key是因為 openssl_pkey_get_public($publicKey) 返回的是false
解決步驟
1、 公共金鑰的開頭需要加上”—–BEGIN RSA PUBLIC KEY—–\n”,結尾需要加上”\n—–BEGIN RSA PUBLIC KEY—–\n”
2、 公鑰字串每隔64隔字元需要加一個換行
3、 以上2步應該可以滿足有些語言的需求,但php不行,還需要講以上PKCS#1 格式金鑰轉換成PKCS#8 格式金鑰。
- 這是因為easywechat直接生成的 public-1****8.pem 檔案中,key的格式是這樣的。
—–BEGIN RSA PUBLIC KEY—–MIIBCgKCAQEAuVvw3DeWx4wdDl2/I0aAMma2bH3hhU89rqMhJWvQ41uRbatxZxMZ13iEMXg8UfTBR+UGl+NCzpkkTjjcVm/2TcIdWgZCLr3Rzo4XD5hRLs8ExI+uzKnmar……CmtgTKWkqkhCnLwr7bRRzBUi3po7UDLWPePrH1ICd83/wIDAQAB—–END RSA PUBLIC KEY—–
這種格式是錯誤的,無法直接放到函式 openssl_pkey_get_public 中使用。需要對他進行格式化成如下形式。
—–BEGIN RSA PUBLIC KEY—– MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuVvw3DeWx4wdDl2/I0aA
Mma2bH3hhU89rqMhJWvQ41uRbatxZxMZ13iEMXg8UfTBR+UGl+NCzpkkTjjcVm/2
……
…… EXFyDtEykuiMuhn3A7WWNkc3voHML9C4kDWdJrX3wjQrwZbW3p3F1O/9pGHLNzn9
p3la2C9/Ve3jLdG8lEzvkCmtgTKWkqkhCnLwr7bRRzBUi3po7UDLWPePrH1ICd83 /wIDAQAB —–END RSA PUBLIC KEY—–
第一行是 —–BEGIN RSA PUBLIC KEY—– ,最後一行是 —–END RSA PUBLIC KEY—– ,然後中間的key每64個字元一行,可以用php的wordwrap($key, 64, "\n", true)
函式處理。
但這種是PKCS#1 格式金鑰。php是函式 openssl_pkey_get_public 也無法使用。需要將其轉換成PKCS#8 格式金鑰。可以用如下命令這種就是在當前目錄得到一個 public.pem 檔案。裡面存放的是PKCS#8 格式金鑰。這種金鑰格式是php可以使用的。金鑰如下:openssl rsa -RSAPublicKey_in -in public-1********8.pem -out public.pem
—–BEGIN PUBLIC KEY—– MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuVvw3DeWx4wdDl2/I0aA
Mma2bH3hhU89rqMhJWvQ41uRbatxZxMZ13iEMXg8UfTBR+UGl+NCzpkkTjjcVm/2
……
…… EXFyDtEykuiMuhn3A7WWNkc3voHML9C4kDWdJrX3wjQrwZbW3p3F1O/9pGHLNzn9
p3la2C9/Ve3jLdG8lEzvkCmtgTKWkqkhCnLwr7bRRzBUi3po7UDLWPePrH1ICd83 /wIDAQAB —–END PUBLIC KEY—–
文章參考:www.west.cn/info/html/wangluobianc...
本作品採用《CC 協議》,轉載必須註明作者和本文連結