签名请求
使用需要进行身份验证的 币趣支付 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 字段中对换行符的限制,您需要把证书文件内容中的换行符去除并置入。下面是一个完整的示例:
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 与请求的数据体直接拼接组成,例如:
https://openapi.basicex.com/v2/test{"t": "123"}
如果为 GET 请求等没有请求数据体的,则签名字符串由请求 URL 组成。例如:
https://openapi.basicex.com/v2/invoices/40620230828091249764130683289837
计算签名值
绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议商户调用该类函数,使用商户私钥对待签名串进行 SHA256 with RSA 签名,并对签名结果进行 Base64 编码得到签名值。
$ 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 字段中对换行符的限制,您需要把证书文件内容中的换行符去除并置入。具体实例查看: 请求签名
章节