easywechat 對接企業打款到銀行卡金鑰引數不是有效的公鑰

Lmt發表於2020-06-30

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 格式金鑰。可以用如下命令
    openssl rsa -RSAPublicKey_in -in  public-1********8.pem -out public.pem
    這種就是在當前目錄得到一個 public.pem 檔案。裡面存放的是PKCS#8 格式金鑰。這種金鑰格式是php可以使用的。金鑰如下:
    —–BEGIN PUBLIC KEY—– MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuVvw3DeWx4wdDl2/I0aA
    Mma2bH3hhU89rqMhJWvQ41uRbatxZxMZ13iEMXg8UfTBR+UGl+NCzpkkTjjcVm/2
    ……
    …… EXFyDtEykuiMuhn3A7WWNkc3voHML9C4kDWdJrX3wjQrwZbW3p3F1O/9pGHLNzn9
    p3la2C9/Ve3jLdG8lEzvkCmtgTKWkqkhCnLwr7bRRzBUi3po7UDLWPePrH1ICd83 /wIDAQAB —–END PUBLIC KEY—–

文章參考:www.west.cn/info/html/wangluobianc...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章