---
url: "https://pay.weixin.qq.com/doc/v2/merchant/4011941097.md"
title: "获取RSA加密公钥API"
doc_id: 4011941097
---

>更新时间：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 |
| --- | --- |
| 是否需要证书 | 请求需要双向证书。 详见[证书使用](https://pay.weixin.qq.com/doc/v2/merchant/4011985891.md) |
| 请求方式 | POST |

## 请求参数

| 字段名 | 字段 | 必填 | 示例值 | 类型 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 商户号 | mch\_id | 是 | 1900000109 | string(32) | 微信支付分配的商户号 |
| 随机字符串 | nonce\_str | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67Vs | string(32) | 随机字符串，长度小于32位 |
| 签名 | sign | 是 | C380BEC2BFD727A4B6845133519F3AD6 | string(64) | 通过签名算法计算得出的签名值，详见[签名生成算法](https://pay.weixin.qq.com/doc/v2/merchant/4011985891.md) |
| 签名类型 | sign\_type | 是 | MD5 | string(64) | 签名类型，支持HMAC-SHA256和MD5。 |

数据示例：

```
<xml>
<mch_id>2302758702</mch_id>
<nonce_str>50780e0cca98c8c8e814883e5caa672e</nonce_str>
<partner_trade_no>1212121221278</partner_trade_no>
<sign>34bf02fe5b20f117365ef6f5d0436be1</sign>
</xml>
```

## 返回参数

| 字段名 | 变量名 | 必填 | 类型 | 说明 |
| --- | --- | --- | --- | --- |
| 返回状态码 | return\_code | 是 | String(16) | SUCCESS/FAIL<br>此字段是通信标识，非交易标识，交易是否成功需要查看result\_code来判断 |
| 返回信息 | return\_msg | 是 | String(128) | 返回信息，如非空，为错误原因<br>签名失败<br>参数格式校验错误 |
| 以下字段在return\_code为SUCCESS的时候有返回 | 以下字段在return\_code为SUCCESS的时候有返回 | 以下字段在return\_code为SUCCESS的时候有返回 | 以下字段在return\_code为SUCCESS的时候有返回 | 以下字段在return\_code为SUCCESS的时候有返回 |
| 业务结果 | result\_code | 是 | String(16) | SUCCESS/FAIL |
| 错误代码 | err\_code | 否 | String(32) | 错误码信息 |
| 错误代码描述 | err\_code\_des | 否 | String(128) | 结果信息描述 |
| 以下字段在return\_code 和result\_code都为SUCCESS的时候有返回 | 以下字段在return\_code 和result\_code都为SUCCESS的时候有返回 | 以下字段在return\_code 和result\_code都为SUCCESS的时候有返回 | 以下字段在return\_code 和result\_code都为SUCCESS的时候有返回 | 以下字段在return\_code 和result\_code都为SUCCESS的时候有返回 |
| 商户号 | mch\_id | 是 | string(32) | 商户号 |
| 密钥 | pub\_key | 是 | String(2048) | RSA 公钥 |

成功示例：

```
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<mch_id><![CDATA[123456]]></mch_id>
<pub_key><![CDATA[-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----
]]></pub_key>
</xml>
```

## 错误码

| 错误代码 | 描述 | 解决方案 |
| --- | --- | --- |
| SIGNERROR | 签名错误 | 签名前没有按照要求进行排序。没有使用商户平台设置的密钥进行签名，参数有空格或者进行了encode后进行签名 |
| SYSTEMERROR | 系统繁忙，请稍后重试 | 使用原请求参数重试 |