短信 HTTP 接口对接总览


HTTP 接口概述

  • HTTP接口规范定义了秒信云平台(服务方,这里指秒信技术服务平台)与客户系统(客户方)之间的数据传输协议及使用方式;
  • 通过接口规范可以实现客户系统(通过秒信)与手机终端之间的短信消息传送;
  • 秒信平台的短信发送接口协议使用HTTP协议,秒信云平台提供访问的URL,客户使用HTTP POST方法发送请求并得到应答内容,客户作为短信平台的HTTP客户端,秒信云平台作为用户的HTTP服务器。
  • 秒信云平台为客户提供短信发送、状态报告及短信上行的获取服务。

HTTP 接口安全

对于短信发送、状态查询接口,秒信平台会验证发送方的有效性,我们有两重策略。

  • 第一:协议签名
  • 第二:IP接入验证

HTTP 接口协议签名

字段 必填 类型 描述
account string 客户子账号App_ID
token string 访问令牌:令牌把账号、时间戳、私钥组合通过算法加密,加密方式可选SHA1、SHA256或SM3,post参数传递给秒信平台,秒信平台做解密认证。详细算法公式为:

token = sha1( “account=” + account + “&ts=” + ts+ “&secret=” + secret )

token = sha256( “account=” + account + “&ts=” + ts+ “&secret=” + secret )

token = sm3( “account=” + account + “&ts=” + ts+ “&secret=” + secret )
注:
1、secret为客户从秒信平台获取的子账号App_SECRET;
2、ts 为系统当前的时间戳 格式为“yyyyMMddHHmmss”,比如“20161220202020”;
3、默认加密方式为SHA1,如需使用SHA256或SM3请联系客服。
ts string ts是timestamp的简写,是token参与运算的timestamp参数,式为“yyyyMMddHHmmss”,如“20161220202020”
为了保证服务安全,超过10秒钟的请求会直接返回错误。
requestId × string 请求ID,需要每次请求不重复。

注释:秒信平台对客户的每次请求都会做协议安全检查,如果不合法直接忽略请求,返回相关的错误代码。

IP地址验证

  • 非必须验证选项。如果开启了IP地址验证,非在IP白名单内的请求会直接拒绝。
  • 可以在秒信平台后台设置,也可以把需要验证的服务器地址给到秒信平台商务人员。
  • 备注:IP白名单可以设置多个。

手机号加密

  • 当账号开启了加密提交后,发送接口、回执接口,手机号都通过加密传输。
  • 加密方式1 :AES
    • AES密匙,与token计算用的secret相同。
    • 加密算法AES/ECB/PKCS5Padding,加密后的2进制转为16进制字符。
  • 加密方式2:RSA
    • HTTP提交用{提交私匙}加密,平台接收后用{提交公匙}解密;
    • 平台用{回执密匙}加密后台推送回执,接收方用{回执公匙}解密。
  • 加密方式3 :SM2
    • HTTP提交用{提交私匙}加密,平台接收后用{提交公匙}解密;
    • 平台用{回执密匙} 加密后台推送回执,接收方用{回执公匙} 解密;
    • 密匙选择未压缩格式,密匙长度为512位。
  • 加密方式4 :SM4
    • HTTP提交和平台接收后均使用{提交密匙}加密;
    • 加密算法SM4/CBC/PKCS5PADDING, 加密后的2进制转为16进制字符;
    • SM4密匙长度为128位。

手机号+内容加密

  • 当账号开启了手机号+内容加密提交后,发送接口手机号、短信内容都要通过加密方式传输;回执接口、上行接口,手机号都通过加密传输。
  • 单条短信内容提交方式如下:
    • content =URLEncoder.encode(URLEncoder.encode(
      RSA加密( URLEncoder.encode(content1, "UTF-8")))
      +"|||"+
      URLEncoder.encode(RSA加密(URLEncoder.encode(content2, "UTF-8"))));
  • 多条短信内容提交方式如下:
    • 例如:content =URLEncoder.encode(
      URLEncoder.encode(RSA加密( URLEncoder.encode(content1, "UTF-8")))
      +"|||"+
      URLEncoder.encode(RSA加密(URLEncoder.encode(content2, "UTF-8"))));

接口幂等

  • 非必须验证选项。如果请求参数中传入了requestId字段,则会进行接口幂等判断,不传不做判断。
  • 幂等判断逻辑:秒信平台会在每次接收到请求时,将传入的requestId与客户账号绑定并进行缓存,24小时后过期。若请求中的requsetId已经存在于秒信平台的缓存中,则会直接返回相关错误码。

results matching ""

    No results matching ""