返回介绍

发送短信验证码

发布于 2024-06-22 00:52:22 字数 7945 浏览 0 评论 0 收藏 0

接口描述:发送短信验证码到指定手机号

接口地址:https://otp.yunpian.com/api/sms/sendCode

请求方法:POST

内容类型:application/x-www-form-urlencoded

请求头:

请求头含义备注
Content-Type固定值 application/x-www-form-urlencoded
x-app-idOTP 应用 ID,请在云片开发者控制台创建应用并获取
x-app-keyOTP 应用 Key,创建应用后自动生成的 appKey为提高安全性,可以用签名取代 appKey,请参考附录 API 签名校验
x-timestamp时间戳,单位毫秒
x-nonce一次性随机数,调用方随机生成,应保证每次请求唯一

请求参数:

请求参数含义
phone手机号,建议使用 E164 格式,暂时仅支持中国大陆手机号

请求和响应示例:

curl -X POST \
  'https://otp.yunpian.com/api/sms/sendCode?phone=%2B86139XXXXYYYY' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'x-app-id: 7bc548ae10394f23b7d76a48cec23dec' \
  -H 'x-app-key: 5d2ae085c72f4ac8b91562d9b628c1e5' \
  -H 'x-timestamp: 1575129600000' \
  -H 'x-nonce: rl29sm2df'
{
  "code": 0,
  "msg": "ok",
  "meta": {
    "rateLimitStats": {
      "appNaturalDay": {
        "count": 1,
        "limit": 1000,
        "enabled": true
      },
      "appToPhonePerMinute": {
        "count": 1,
        "limit": 10,
        "enabled": true
      },
      "appToPhonePerHour": {
        "count": 1,
        "limit": 30,
        "enabled": true
      },
      "appToPhonePerDay": {
        "count": 1,
        "limit": 30,
        "enabled": true
      }
    }
  },
  "data": {}
}

响应体字段说明:

字段含义备注
code响应码,0 - 成功,其他 - 失败,详情参考附录响应码
msg响应码对应的描述语
meta元信息,格式不固定的对象包括当前限流信息rateLimitStats,取决于接口调用次数和您在开发者控制台的短信频率配置
data保留字段,暂无数据

校验短信验证码

接口描述:校验短信验证码是否正确

接口地址:https://otp.yunpian.com/api/sms/verifyCode

请求方法:POST

内容类型:application/x-www-form-urlencoded

请求头:

请求头含义备注
Content-Type固定值 application/x-www-form-urlencoded
x-app-idOTP 应用 ID,请在云片开发者控制台创建应用并获取
x-app-keyOTP 应用 Key,创建应用后自动生成的 appKey为提高安全性,可以用签名取代 appKey,请参考附录 API 签名校验
x-timestamp时间戳,单位毫秒
x-nonce一次性随机数,调用方随机生成,应保证每次请求唯一

请求参数:

请求参数含义
phone手机号,建议使用 E164 格式,暂时仅支持国内手机号
code验证码

请求和响应示例:

curl -X POST \
  'https://otp.yunpian.com/api/sms/verifyCode?phone=%2B86139XXXXYYYY&code=123456' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'x-app-id: 40685513ea3446debdd5e04d03301e2a' \
  -H 'x-app-key: 1f63ee1d8e4547b7b9060fb9fa44a766' \
  -H 'x-timestamp: 1575129600000' \
  -H 'x-nonce: rl29sm2df'
{
  "code": 40033,
  "msg": "验证码不正确",
  "meta": {
    "verifySuccessCount": 0,
    "verifyFailLimit": 5,
    "verifyFailCount": 1
  }
}

响应体字段说明:

字段含义备注
code响应码,0 - 成功,其他 - 失败,详情参考附录响应码
msg响应码对应的描述语
meta元信息,格式不固定的对象包括待验证的验证码的验证失败次数、验证失败次数限制、验证成功次数等

注意:

验证码失效策略

  • 成功验证过一次后立即失效
  • 验证失败次数达到限制立即失效
  • 验证码超时未验证自然过期
  • 生成了新验证码后,旧验证码(未验证通过)自动失效

附录

API 签名校验

服务端接口需要校验调用方的身份,这些信息放在请求头中,您可以通过x-app-idx-app-key来完成校验,为提高安全性,您也可以选择签名校验。

请求头

请求头含义备注
Content-Type固定值 application/x-www-form-urlencoded
x-app-idOTP 应用 ID,请在云片开发者控制台创建应用并获取
x-timestamp时间戳,单位毫秒服务器会对该时间做校验,与当前时间相差过大将无法完成校验
x-nonce一次性随机数调用方随机生成,应保证每次请求唯一
x-signature签名,使用 HMAC-SHA256 加密算法生成签名方法:拼接x-app-idx-timestampx-nonce的值作为消息,appKey的值作为密钥,生成消息摘要。

签名计算方法示例

假设

x-app-id=40685513ea3446debdd5e04d03301e2a

x-timestamp=1575129600000

x-nonce=rl29sm2df

appKey=1f63ee1d8e4547b7b9060fb9fa44a766

拼接字符串得到消息40685513ea3446debdd5e04d03301e2a1575129600000rl29sm2df,以1f63ee1d8e4547b7b9060fb9fa44a766作为密钥计算得到消息摘要为32aca2e5745357e3fe423226a14681f78d8cf69ae5469c89ff08f1c2778dadcc

Java 代码示例:

String appId = "40685513ea3446debdd5e04d03301e2a";
long timeMillis = System.currentTimeMillis();
String nonce = UUID.randomUUID().toString();
String msgToDigest = appId + timeMillis + nonce;
String appKey = "1f63ee1d8e4547b7b9060fb9fa44a766";
HmacUtils hmacUtils = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, appKey);
String hmacHex = hmacUtils.hmacHex(msgToDigest);
System.out.println(hmacHex);

这里,HmacUtils类来自于commons-codec

响应码

响应码是指响应体(JSON 格式)中的code字段,0表示成功,其他表示失败,具体参照下表。

注:HTTP 状态码为200时,返回响应体code0;HTTP 状态码非200时,返回响应体code0

HTTP 状态码响应码(code)描述
2000成功
40040012应用不存在
40040022短信模板状态异常,一般是短信模板未设置或未审核通过
40040023短信模板内容不包含验证码占位符(#code#),请修改短信模板
40040024短信内容过长,不应超过 70 个字,请更改短信模板
40040031验证码已过期,请重新获取验证码
40040032验证失败次数达到上限,请重新获取验证码
40040033验证码不正确,请重新提交验证码
40040100未通过身份验证,appKey 或签名错误导致
40042900请求过多,达到短信发送频率限制

服务端交互时序图

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文