接入指南
概述
如何申请API权限和集成流程: 1.注册vmcardio.com 账户并完成必要认证,账户开通后联系客户经理或在线客服沟通业务场景和API使用需求。 2.在个人中心-开发者菜单点击提交开通申请,提交后联系客服审批。 3.注册sandbox账户用于集成测试(注册地址),注册后联系客服设置必要权限,设置成功后即可使用sandbox账户的API功能。如有技术问题,我们将通过群提供必要的技术支持。 4.sandbox集成测试完成后,联系客服告知已测试完成,vmcardio将配置正式环境API权限,配置完成后即可迁移到正式环境正常使用API功能。
1.
认证
请求时,需要先获取accessToken,并在请求头Authorization 添加上获取到的accessToken
生成公私钥
openssl genpkey -out api_private.pem -algorithm RSA -pkeyopt rsa_keygen_bits:4096
使用 OpenSSL 生成 RSA 私钥对应的公钥(api_public.pem 为您的 API RSA 公钥):
openssl rsa -in api_private.pem -out api_public.pem -pubout
保存商户公钥例子 需要把头部和尾部都保存进来
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6v8JgHmwJS1gK1IR9jpb
fHD+mEEwAteV13pmM94ribQELnhbQegvmH/aCDg7nkIZasyQ5H3mfNa1Fuv6IATY
9Of58gA9TEUkcxzV0JrT0zVpkxmCaejUVA63gi6AVqQZWn4YqRBAqzVzgq4CpOG+
dGTXy/GS62+EdDvF3jrhPcECAwEAAQ==
-----END PUBLIC KEY-----
RSA 加密和解密在接口交互中的对接文档
一、请求加密过程
1.
2.
body = {'param1': 'value1', 'param2': 'value2'}
。3.
encrypt_data_with_public_key(body, public_key_str)
,其中public_key_str
是已知的vm平台公钥字符串。encrypt_data_with_public_key函数见下方示例.4.
content
。5.
{'content': content}
发送给对应接口。二、响应解密过程
1.
{'code': 0, 'msg':'ok', 'data': '加密数据'}
。2.
data
字段内容。3.
data
进行解密,调用解密函数decrypt_data_with_private_key(encrypted_data, private_key_str)
,其中encrypted_data
是响应中的加密数据data
,private_key_str
是用户已知的私钥字符串。decrypt_data_with_private_key函数见下方示例。(其中填充方式使用PKCS#1 v1.5 填充)4.
5.
三、加密和解密函数说明
(一)加密函数
encrypt_data_with_public_key
data
:需要加密的数据,应为可序列化的对象,通常为字典等。public_key_str
:公钥字符串。RSA.import_key
方法加载传入的公钥字符串。PKCS1_v1_5
加密器对 JSON 字符串编码后的字节数据进行加密。(二)解密函数
decrypt_data_with_private_key
encrypted_data
:经过加密和编码后的十六进制字符串数据。private_key_str
:私钥字符串。RSA.import_key
方法加载传入的私钥字符串。PKCS1_v1_5
解密器对 Base64 解码后的数据进行解密。None
。1.
四、使用示例
your_public_key
和your_private_key
替换为实际的公钥和私钥字符串。同时,确保数据的格式符合预期,并且在加密和解密过程中没有出现错误。1.
2.
IP 白名单
请求示例
请求 base URL
https://sandbox-api.vmcardio.com/
加密前请求参数
加密前业务请求参数示例
{
"card_id": "341916e58af445f8aadeb95*******"
}
加密后请求参数
使用 vm公钥
进行加密,并将加密后的数据放在content字段下
{
"content": "434a7454477a7147757145315930652b4a733141724f5162797745496771514b474a6d6f554e58766b2f4b6f34467058474d4c6461445a7a386573636d39466836436d576b31756672427a6d6e62747a5470622b575a542b2b30687a735a46734a33476678425549664f31344f6d496d58485254627533676b43754a46674f41454367424d4970734a425642693535674e596b497146565a73434e7848696a6f622b56384a2f73324f6c5a514679746b674137546e363248772b2b4f4c7575724d366c7253704e33454467797537427a483135534e4b4835554d57576c775a376543663469506935414f7a524c64656d627a3674332f57775a5467653644354f482b326b4f50644756484f5135476364474477393553365550624c2f4f5363787a2f51544432346e2f426d5544643549344474346e734b2f4e33626b535a642b4c7654646757537a66654c414c6e464d6f49764b59513d3d"
}
响应数据
{
"code": 0,
"msg": "ok",
"data": "6f334f787a6c456c6173486f7236376757544a31676a47702b536b684b6972336f58454e67383459367039327433643770746337413739526b4361554f66472b586d7730585a5167304c30494d526839465664445376624c502f76716b7775392f306473733741557a7264666c576741796164344778562b505238714d456e57776f422b4a7a4d4e5a42354350774f312f786d53615737516a6d44386b493764576331534c7a6d61674c5332463978624e416577564371543462627554656c497577315a72575477534b4d55486748486f77326b544b7856704e454e45505341504e47752b57616a575733633041697a6b6e3330544a44656a42485a2f6a33304a462b7a593645716d666e2b6f764f69732f4a636e46385a4f574c797350573161334638555857663157304f4d656b6c445434546f536a545464656a5338505138665949327a5937543578465250384d4d627056634d32436f647941314643506a456d433265367359572f4f7566377368506a6a756372623739745068636d61516669536b306d30594b765065664f492f6f793555314f765031764747466369476550705962597a396f584566754162516759306d75524e70614e51757163505945534544724a4b6d595043566832445559464d626c5a39754d424577745270744b34576b2b66756f6b3172626a7954656b376564627a65446673636f4e4854664c7861363150556b6c7673596f52436f505068786a31634558795164546445333968354c4b366438676370716f6c525735586b3250656b6b4f67527a4c6e476c6e6754443437767a374730504c634755636c366446626f3978447043344e5571744c4c6f74582f54496d78645a7842344c52506f7735424d4573336d58612b4949564d37576f63583563494533793750766c784c52334c426f4249416d6f386b74524b396f39316b54383d"
}
解密响应数据
1.使用 商户私钥
对响应中的data
数据进行解密,得到期望响应的字符串数据2.商户公钥
需要提前配置到VM开发者配置中
{"card_id":"809c8dcc-1234-5678-abcd-*********"}
修改于 2025-06-16 03:42:56