获取RSA加密公钥API
更新时间:2024.11.13RSA算法使用说明(非对称加密算法,算法采用RSA/ECB/OAEPPadding模式)
1、 调用获取RSA公钥API获取RSA公钥,落地成本地文件,假设为public.pem
2、 确定public.pem文件的存放路径,同时修改代码中文件的输入路径,加载RSA公钥
3、 用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_OAEP_PADDING填充模式
(eg:Java的填充方式要选 " RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING")
4、 得到进行rsa加密并转base64之后的密文
5、 将密文传给微信侧相应字段,如付款接口(enc_bank_no/enc_true_name)
接口默认输出PKCS#1格式的公钥,商户需根据自己开发的语言选择公钥格式
RSA公钥格式PKCS#1,PKCS#8互转说明
PKCS#1 转 PKCS#8:
openssl rsa -RSAPublicKey_in -in <filename> -pubout
PKCS#8 转 PKCS#1:
openssl rsa -pubin -in <filename> -RSAPublicKey_out
PKCS#1 格式密钥:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEArT82k67xybiJS9AD8nNAeuDYdrtCRaxkS6cgs8L9h83eqlDTlrdw
zBVSv5V4imTq/URbXn4K0V/KJ1TwDrqOI8hamGB0fvU13WW1NcJuv41RnJVua0QA
lS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+2kUWG94FccArNnBtBqqvFncXgQsm98JB
3a62NbS1ePP/hMI7Kkz+JNMyYsWkrOUFDCXAbSZkWBJekY4nGZtK1erqGRve8Jbx
TWirAm/s08rUrjOuZFA21/EI2nea3DidJMTVnXVPY2qcAjF+595shwUKyTjKB8v1
REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfqjwIDAQAB
-----END RSA PUBLIC KEY-----
PKCS#8 格式密钥:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArT82k67xybiJS9AD8nNA
euDYdrtCRaxkS6cgs8L9h83eqlDTlrdwzBVSv5V4imTq/URbXn4K0V/KJ1TwDrqO
I8hamGB0fvU13WW1NcJuv41RnJVua0QAlS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+
lkUWG94FccArNnBtBqqvFncXgQsm98JB3a42NbS1ePP/hMI7Kkz+JNMyYsWkrOUF
DCXAbSZkWBJekY4nGZtK1erqGRve8JbxTWirAm/s08rUrjOuZFA21/EI2nea3Did
JMTVnXVPY2qcAjF+595shwUKyTjKB8v1REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfq
jwIDAQAB
-----END PUBLIC KEY-----
接口说明
请求Url | https://fraud.mch.weixin.qq.com/risk/getpublickey |
---|---|
是否需要证书 | 请求需要双向证书。 详见证书使用 |
请求方式 | POST |
请求参数
字段名 | 字段 | 必填 | 示例值 | 类型 | 说明 |
---|---|---|---|---|---|
商户号 | mch_id | 是 | 1900000109 | string(32) | 微信支付分配的商户号 |
随机字符串 | nonce_str | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67Vs | string(32) | 随机字符串,长度小于32位 |
签名 | sign | 是 | C380BEC2BFD727A4B6845133519F3AD6 | string(64) | 通过签名算法计算得出的签名值,详见签名生成算法 |
签名类型 | sign_type | 是 | MD5 | string(64) | 签名类型,支持HMAC-SHA256和MD5。 |
数据示例:
返回参数
字段名 | 变量名 | 必填 | 类型 | 说明 |
---|---|---|---|---|
返回状态码 | return_code | 是 | String(16) | SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 |
返回信息 | return_msg | 是 | String(128) | 返回信息,如非空,为错误原因 签名失败 参数格式校验错误 |
以下字段在return_code为SUCCESS的时候有返回 | ||||
业务结果 | result_code | 是 | String(16) | SUCCESS/FAIL |
错误代码 | err_code | 否 | String(32) | 错误码信息 |
错误代码描述 | err_code_des | 否 | String(128) | 结果信息描述 |
以下字段在return_code 和result_code都为SUCCESS的时候有返回 | ||||
商户号 | mch_id | 是 | string(32) | 商户号 |
密钥 | pub_key | 是 | String(2048) | RSA 公钥 |
成功示例:
错误码
错误代码 | 描述 | 解决方案 |
---|---|---|
SIGNERROR | 签名错误 | 签名前没有按照要求进行排序。没有使用商户平台设置的密钥进行签名,参数有空格或者进行了encode后进行签名 |
SYSTEMERROR | 系统繁忙,请稍后重试 | 使用原请求参数重试 |