Skip to content

签名请求


使用需要进行身份验证的 币趣支付 API 均需要签名请求。请使用本指南了解该流程。

商户 API 证书

商户 API 证书是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。

币趣支付 API 使用由 BasicEx CA 自行签发颁发的证书,商户可以通过商户平台申请并下载商户的 API 证书信息,下载下来的证书信息中的私钥文件请妥善保存。

商户 API 私钥

商户通过商户平台申请并下载的商户 API 证书信息中包含私钥文件,私钥文件以 商户号.key 文件名进行存储,同时在config.json中也存在私钥信息。请勿泄露这两个文件以防止私钥盗用导致损失!

平台证书

平台证书是指由 BasicEx CA 签发颁发的供币趣支付平台所使用的的证书,通常在 Webhook 请求中,币趣会使用此证书所属私钥对 Webhook 请求进行签名。商户可使用此平台证书进行验签 验证该 Webhook 请求由币趣支付 所发起。

请求签名

如果您使用的是 币趣支付 SDK,则无需查阅此章节,在币趣支付 SDK 中已封装了数据签名部分,您只需要在初始化 SDK 中将私钥信息以及公钥信息引入即可。

商户需要使用私钥信息对请求的 API URL,以及消息体等关键数据的组合进行SHA-256 with RSA签名,请求的签名信息通过 HTTP 头:X-Signature进行传递,具体参考下方:请求签名生成章节。当币趣验签失败时会返回: 401 Unauthorized状态错误。

同时,在调用需要进行身份验证的接口时,需要在 HTTP 请求头: X-Identity 中传入您的证书信息。受限于 Header 字段中对换行符的限制,您需要把证书文件内容中的换行符去除并置入。下面是一个完整的示例:

bash
X-Identity: -----BEGIN CERTIFICATE-----MIIFiTCCA3GgAwIBAgIUcNxzIbh9cRGZ5lNyyOctEMM2kJYwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCQ04xEDAOBgNVBAoTB0Jhc2ljRXgxHjAcBgNVBAMTFUJhc2ljRXggU2VydmVyIEVDQyBDQTAeFw0yMzA4MjQwOTExMTNaFw0yMzA5MjUwOTExNDNaMBoxGDAWBgNVBAMTDzgxMTMyNDA1MTU5NTI2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALdORJj7ZhFWTzgnzf9xIlOST5pVDRwyYYSNgwNKOnNO4VnsoSRGje/5QRwFsRx58TYEBMSgoZRKL4m+JXVNdA9KMaNwKZm6SPYeUsbR7el1sRvCay8/7qPt0DhDaxGmic/aWMjxLAVb7280RW6gjvTt/zZC04m9hoffWwuSUQr8UB3ZX8LNH0cp/vht497dk8CECGEURpP46FN0yXQwr8UbueE8Yk73EkGf/BpQsmxWZiwvsjSW1naFXwCxfRdeS3Nw3YGHmqLQr/D63dVkkofPZ/2x5BYMSFXyxCfa3FQ6SrlNDSqfLBxk66lEKGZS7rqPewv9EWUjk1V2TksfNZ8CAwEAAaOCAaAwggGcMA4GA1UdDwEB/wQEAwIDqDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFDKNo7RhqLsE36RVQrCSVsSZqmLQMB8GA1UdIwQYMBaAFO4lJSiwmdhLS3nRqW6L2ceACPB7MIGlBggrBgEFBQcBAQSBmDCBlTAzBggrBgEFBQcwAYYnaHR0cHM6Ly8xOTIuMTY4LjMxLjIyNTo4MjAwL3YxL3BraS9vY3NwMF4GCCsGAQUFBzAChlJodHRwczovLzE5Mi4xNjguMzEuMjI1OjgyMDAvdjEvcGtpL2lzc3Vlci80OWE4YmNjYi0wYzAzLTNjOGItZTQ4NS1hMzlhODY2MjZmNmEvZGVyMBoGA1UdEQQTMBGCDzgxMTMyNDA1MTU5NTI2NTBnBgNVHR8EYDBeMFygWqBYhlZodHRwczovLzE5Mi4xNjguMzEuMjI1OjgyMDAvdjEvcGtpL2lzc3Vlci80OWE4YmNjYi0wYzAzLTNjOGItZTQ4NS1hMzlhODY2MjZmNmEvY3JsL2RlcjANBgkqhkiG9w0BAQsFAAOCAgEAGdJV5hoKk0/hYxgdIVOzanIfV3MsixLyBo0VUU46mAUnHBdzyoDTpguDLLHScCUZMA7R23TZxJH2+2wh4MQyYnqXfTNrW0ENipUIXi/j0YGHMF6VhJSfFhkh3qmLoSZxJa2yt+QwxjWdETUp9wgAIFLOSNL9D2a7KBZiNR8aZO4aPR0Fy/OIXxWRkc6VihlJeKIQz3u0dgZ1P9fJEb9mHmz4qwAMOX2R/n9jUitwFf5HpID8ou+21zFZaERf6/Mg6aTWwvYCGjrUq7G0EhTwr8xQ+I+94apBVteUujYP7XhWiT/KxTZMFbztNj+/dwyMeL1KqEBG8mYkxm5fdFbkSySQZWqKVj9988TLGNEW0hCgOyYoWS6Bf7tkd3IGCAsfaAaU3T0h0MvtzvWg2IzIjqoV0svEBN8AmRZUkPjrPX8Qkx3dE5qe7L5pKHZCH4l23x46+Fbk3ywQsXPnD4WLC1Cn7xDO76HCXxz8q3+MTMgdpDFHH02w2f8o02zWDaajB39bpbfESInAGz+1vkm0bykABjig8Hrcl40hezxSIdW6/M41/0Ghh8KRhnt29SeRBFXO0V2fimRSLPvMxVmbrWUNJBK0JJpLKNfZ1S7MGLPLWJWNyvH6hG2PBJsF3yVp+JBNYyO5bFYw5P5YSpP9WEOUmKFScPXZUVvPedy8PgY=-----END CERTIFICATE-----
X-Signature: G8iDi8OsMVC5G7mOmwQ+tIrU7UrcsPgb5/w25kBL/g6VoTQVdpGzJoGqYtYm3ZKICIe8ax07TBKmyDQD4Z6bw7Ta2Iy64wxcZyI9Uy6EsCxxM8au2bmk/Qm7bsqV0mbv7iLyMKUTjYeTOLvtKNxv3rZ35JAdBYQ6YONBW01Un/R1C9I5uxL7M4N6TtIhjPGNr+PTxQM6f1MA5+pkMAy98A1SZqVeb2lwZJu1eJNzNOY9VcuU9P+6POkToNm2sj/KvOktw6d1p6uJ4aTRZ3FA7knz9A4nbWym/N6nRGyUiGa31RTXCeg/INgE0MTcWeUnJGRV19UePbZ69gN9jVbhIg==

请求签名生成

构建签名串

我们希望商户的技术开发人员按照当前文档约定的规则构造签名串。币趣支付会使用同样的方式构造签名串。如果商户构造签名串的方式错误,将导致签名验证不通过。

签名字符串由请求的 URL 与请求的数据体直接拼接组成,例如:

bash
https://openapi.basicex.com/v2/test{"t": "123"}

如果为 GET 请求等没有请求数据体的,则签名字符串由请求 URL 组成。例如:

bash
https://openapi.basicex.com/v2/invoices/40620230828091249764130683289837

计算签名值

绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议商户调用该类函数,使用商户私钥对待签名串进行 SHA256 with RSA 签名,并对签名结果进行 Base64 编码得到签名值。

bash
$ echo -n -e \
 "https://openapi.basicex.com/v2/invoices/40620230822134552202883210445009" \
 | openssl dgst -sha256 -sign 813161626275841.key \
 | openssl base64 -A

设置签名请求头

币趣支付 API 要求通过: X-Signature 来传递签名,通过: X-Identity来传入证书信息。受限于 Header 字段中对换行符的限制,您需要把证书文件内容中的换行符去除并置入。具体实例查看: 请求签名章节