HTTPS接入服务端
本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文向您介绍如何通过HTTPS原生调用的方式完成验证码服务端接入。
HTTPS原生调用方式需要用户自行封装加解签、拼装请求(URL、Body、header、parameters)。如非特殊业务需求,建议使用SDK方式调用,请参见服务端接入。
基本信息
调用服务请求地址:https://captcha.cn-shanghai.aliyuncs.com
请求方式(HttpMethod): POST
传输协议:HTTPS
请求参数
请求参数由公共请求参数和API自定义参数组成。公共参数中包含API版本号、身份验证等信息。
公共请求参数:
名称
类型
是否必选
描述
示例值
x-acs-action
String
是
API的名称。
要执行的操作。取值:VerifyIntelligentCaptcha。
x-acs-version
String
是
API 版本。
API版本号,使用 YYYY-MM-DD日期格式。取值:2023-03-05。
Authorization
String
非匿名请求必须
用于验证请求合法性的认证信息,格式为Authorization: SignatureAlgorithm Credential=AccessKeyId,SignedHeaders=SignedHeaders,Signature=Signature。
其中SignatureAlgorithm为签名加密方式,为ACS3-HMAC-SHA256。
Credential 为用户的访问密钥ID。您可以在RAM 控制台查看您的 AccessKeyId。如需创建 AccessKey,请参见创建AccessKey。
SignedHeaders为请求头中包含的参与签名字段键名,【说明】:除了Authorization之外,建议对所有公共请求头添加签名,以提高安全性。
Signature为请求签名,取值参见签名机制。
ACS3-HMAC-SHA256 Credential=YourAccessKeyId,SignedHeaders=host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version,Signature=e521358f7776c97df52e6b2891a8bc73026794a071b50c3323388c4e0df64804
x-acs-signature-nonce
String
是
签名唯一随机数。该随机数用于防止网络重放攻击,每一次请求都必须使用不同的随机数。
d410180a5abf7fe235dd9b74aca91fc0
x-acs-date
String
是
按照ISO 8601标准表示的UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ,例如2018-01-01T12:00:00Z。值为请求发出前15分钟内的时间。
2023-10-26T09:01:01Z
host
String
是
即服务地址,参见HTTP 请求结构。
captcha.cn-shanghai.aliyuncs.com
x-acs-content-sha256
String
是
请求正文Hash摘要后再base-16编码的结果,与HashedRequestPayload一致。
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-acs-security-token
String
STS认证必传
为调用AssumeRole接口返回值中SecurityToken的值。
API请求参数:
名称
类型
是否必选
描述
示例值
CaptchaVerifyParam
String
是
由验证码脚本回调的验证参数,直接将全部参数信息由客户端传给服务端即可。
警告禁止对验证参数做任何修改,否则业务会报错。
{"sceneId":"xxxxxx","certifyId":"xxxxxx","deviceToken":"xxxxxxx==","data":"xxxxxx==","..."}
SceneId
String
否
由您服务端写入本次验证对应的场景ID,建议传入,尤其在多场景下,防止前端被篡改为其他场景。
Udw***d72
签名机制
阿里云验证码会对每个API请求进行身份验证,提交请求时需要在请求中包含签名(Signature)信息。
阿里云验证码通过使用AccessKey ID和AccessKey Secret进行对称加密的方法来验证请求的发送者身份。AccessKey是为阿里云账号和RAM用户发布的一种身份凭证(类似于用户的登录密码),其中AccessKey ID 用于标识访问者的身份,AccessKey Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。具体操作,请参见V3签名机制。
返回参数
名称 | 类型 | 描述 | ||
HTTP Status Code | Integer | HTTP状态码。更多信息,请参见返回参数说明。 | ||
HTTP Body | RequestId | String | 请求ID。 | |
Success | Boolean | 请求是否成功。
| ||
Code | String | 返回码。更多信息,请参见返回参数说明。 | ||
Message | String | 返回详细信息。更多信息,请参见返回参数说明。 | ||
Result | VerifyResult | Boolean | 验证结果。
| |
VerifyCode | String | 原因码。
|
返回参数HTTP Status Code、Code、Message的详细说明,如下表所示。
HTTP Status Code | Code | Message |
200 | Success | 成功。 |
400 | MissingParameter | 缺少必须参数。 |
401 | InvalidParameter | 参数不合法。 |
403 | Forbidden.AccountAccessDenied | 无权限,可能是未开通服务,或已欠费。 |
403 | Forbidden.RAMUserAccessDenied | RAM用户无权限,请授权 AliyunYundunAFSFullAccess。具体操作,请参见为RAM角色授权。 |
500 | InternalError | 系统内部错误,建议重试。如果仍然报错,请提交工单联系我们。 |
返回示例:
{
"RequestId": "3F290236-C***B-54F31BD999FF",
"Message": "success",
"Code": "Success",
"Success": true,
"Result": {
"VerifyResult": true,
"VerifyCode": "T001"
}
}
异常处理:
为了保障业务可用性,建议您在调用本接口时,如果出现请求失败或网络异常,打印日志,并默认认为验证通过,优先保证业务可用,然后尽快联系我们排查异常原因。