获取RSA加密公钥API

更新时间:2024.11.13

RSA算法使用说明(非对称加密算法,算法采用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。

数据示例:

1<xml>
2<mch_id>2302758702</mch_id>
3<nonce_str>50780e0cca98c8c8e814883e5caa672e</nonce_str>
4<partner_trade_no>1212121221278</partner_trade_no>
5<sign>34bf02fe5b20f117365ef6f5d0436be1</sign>
6</xml>

返回参数

字段名

变量名

必填

类型

说明

返回状态码

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 公钥

成功示例:

1<xml>
2<return_code><![CDATA[SUCCESS]]></return_code>
3<return_msg><![CDATA[OK]]></return_msg>
4<result_code><![CDATA[SUCCESS]]></result_code>
5<mch_id><![CDATA[123456]]></mch_id>
6<pub_key><![CDATA[-----BEGIN RSA PUBLIC KEY-----
7BASE64 ENCODED DATA
8-----END RSA PUBLIC KEY-----
9]]></pub_key>
10</xml>

错误码

错误代码

描述

解决方案

SIGNERROR

签名错误

签名前没有按照要求进行排序。没有使用商户平台设置的密钥进行签名,参数有空格或者进行了encode后进行签名

SYSTEMERROR

系统繁忙,请稍后重试

使用原请求参数重试