easywechat 对接企业打款到银行卡密钥参数不是有效的公钥
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 协议》,转载必须注明作者和本文链接
推荐文章: