API介绍

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互转说明

  1. PKCS#1 转 PKCS#8:

openssl rsa -RSAPublicKey_in -in <filename> -pubout

  1. PKCS#8 转 PKCS#1:

openssl rsa -pubin -in <filename> -RSAPublicKey_out


  1. 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-----


  1. 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。

数据示例:

<xml>
<mch_id>123456</mch_id>
<nonce_str>5087e0xessefellkg</nonce_str>
<sign>xxxxxx</sign>
</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 公钥

成功示例:

<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 系统繁忙,请稍后重试 使用原请求参数重试