====== 国内短信-接口 ====== ===== 发送短信 ===== 调用环信的REST API地址: \\ {{:telco:sms:rest.png?1000|}} |POST |/{orgname}/{appname}/sms/send| Request header | Authorization | Bearer YWMtPZoRTFk0EeukvYVwaay5gAAAAAAAAAAAAAAAAAAAAAGEbAIHRQdI85XWWn9IAKURAgMAAAF3E059-QBPGgC29yIdZgUINP3vg5IapIANY6z_qQpTbxbUXEX928VpPQ | \\ **有关Token的获取** [[https://docs-im.easemob.com/im/server/ready/user#%E8%8E%B7%E5%8F%96%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90|获取token]] \\ Request body ^名称 ^ 类型 | 是否必须 |说明 ^样例 ^ | mobiles | String[] | 是 | 数组,需要发送短信的手机号,数组长度不能超过100。 | ["2145652789851"] | | tid | String | 是 | 短信模板id | iydsfsdfi | | tmap | Map | 是 |模板变量名和变量值对。 | {"p1":"value"} | | extendCode | String | 否 | 扩展码 | 1 | | custom | String | 否 | 用户自定义属性,长度不超过64,回调请求中会携带此字段; | Response ^ Http Code ^ 说明 ^ | 200 | 成功 | Respose body ^ 名称 ^ 类型 ^ 说明 ^ | count | int | 该条短信的计费条数(计费条数:70 个字一条,超出 70 个字时按每 67 字一条计费) | | msg | String | 例如"发送成功",或者相应错误信息 | \\ Eg: \\ 请求实例 curl --location --request POST 'http://a1.easemob.com/easemob-demo/894249797/sms/send' \ --header 'Authorization: Bearer token' \ --header 'Content-Type: application/json' \ --data-raw '{ "mobiles": [ "13718793706" ], "tid": "134", "tmap": { "p1": "p1", "sendIndex": "638-520-3307", "sendDate": " 2021-05-26 16:45:48", "sendTotal": "300000" }, "extendCode": "888", "custom": "{\"i\":276,\"a\":300000,\"id\":\"ZANK\",\"s\":300000,\"ts\":1618294122528}" }' \\ 返回实例 http 200 { "count": 1, "msg": "短信发送成功!" } 注意: \\ 余额为0时,发送短信仍然提示成功。但是真实发送是失败的 \\ 实现逻辑:将短信放到队列中,认为发送成功。但是真实发送时判断失败,通过状态回调接口,通知用户失败。 ===== 回调下行短信状态报告 ===== | POST | URL用户提供 | \\ 功能说明:该接口的请求参数是一个数组,数组里最多有100个状态报告。 \\ 设置接口:在console控制台中设置下行短信状态报告。 {{:telco:sms:下行回调地址.png?1000|}} 请求头Header | AppKey | String |应用的AppKey | | CurTime | Long |当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的毫秒数| | MD5 | String |根据请求中的request body计算出来的MD5值 | | CheckSum | String | 校验值 | | Content-Type | String | 请求消息体类型,一般为:application/json | \\ CheckSum = sha1(AppSecret + MD5 + CurTime),其中AppSecret 、MD5、CurTime均为String类型。 \\ 在验证数据是否在传输过程中被篡改时,需要计算验证MD5值是否被修改,以及计算验证CheckSum。 \\ AppSecret值为“设置回调地址 接口参数”, MD5值为根据request body计算出来的值。 \\ String requestBody = "{....}"; \\ String MD5 = MD5(requestBody); [{ "reportStatus": "Fail", "reportMsg": "GB:0015", "mobile": "17325538434", "sendTime": "2021-04-07 05:30:28", "reportTime": "2021-04-07 05:30:28", "extendCode": "111", "smsSubAccount": "3aa1f997d9014f9f8b946f40ae57106d", "custom": "dddddddd" }] 元素: ^ 名称 ^ 类型 ^ 是否必须 ^ 说明 ^ | custom | String | 否 | | | extendCode | String | 否 | 短信扩展码 | | mobile | String | 是 | 接受短信的手机号 | | reportMsg | String | 是 | 成功时为空,失败时表示具体失败原因 | | reportStatus | String | 是 | "OK"代表发送成功,“Fail”表示失败 | | reportTime | String | 是 | 收到运营商状态报告的时间 | | sendTime | String | 是 | 短信发送时间 | 成功: reportStatus: OK reportMsg 没有。 失败: reportStatus: FAIL reportMsg: GB:0025 ===== 用户上行短信回调 ===== | POST | URL用户提供| \\ 功能说明:该接口的请求参数是一个数组,数组里最多有100个状态报告。对于长短信会出现多次回调。 \\ 设置接口,在console控制台中添加上行短信回调地址 {{:telco:sms:上行地址.png?1000|}} \\ 如果选择加密,会生成一个MD5密钥和MD5加密算法的盐值。环信平台往用户回调地址回调时会使用密钥+盐值+时间戳计算出MD5值填充在Request header中 \\ 请求Header | AppKey | String | 应用的AppKey | | CurTime | Long | 当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的毫秒数 | | MD5 | String | 根据请求中的request body计算出来的MD5值 | | CheckSum | String | 校验值 | | Content-Type | String | 请求消息体类型,一般为:application/json | \\ 在验证数据是否在传输过程中被篡改时,需要计算验证MD5值是否被修改,以及计算验证CheckSum。 \\ AppSecret值为“设置回调地址 接口参数”, MD5值为根据request body计算出来的值。 \\ String requestBody = "{....}"; \\ String MD5 = MD5(requestBody); \\ 元素: | mobile | String | 是 | 上行手机号 | |content | String | 是 | 短信上行 内容 | |pushTime | String | 是 | 短信上行 推送时间 | |platRecvTime | String | 是 | 平台接收 时间 | |extendCode | String | 否 | 短信扩展码 | [{ "mobile": "13718793706", "content": "uuuuuuuuu", "pushTime": "2021-05-26 16:45:24", "platRecvTime": "2021-05-26 16:45:24", "extendCode": "888", "smsSubAccount": "6bdedc0444c74bd4932eed8f1fb7e562" }]