请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
备注:黑名单等拦截错误实时返回
地址:https://api.3yit.com/api/send-sms-single
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
mobile | 手机号 | 176xxxxxxxx(支持md5和aes) | 是 |
content | 短信内容 | 【签名】验证码123(支持aes) | 是 |
signature | 签名(和密码二选一即可,点击查看签名算法) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
ext | 扩展号 | 123 | 否 |
结果
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
msg_id | 消息id,用来获取状态报告时候匹配是哪条消息,成功返回 | 17 |
data | 失败有返回,详情见错误表 | WL:NMLJ |
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
备注:黑名单等拦截错误实时返回,一次最多提交一万条
地址:https://api.3yit.com/api/send-sms-batch
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
mobiles | 手机号 | 176xxxxxxxxx,171xxxxxxxxx | 是 |
content | 短信内容 | 【测试】验证码123 | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者-http接口文档中查看) | 否 |
ext | 扩展号 | 123 | 否 |
结果
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
msg_id | 消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 | 17 |
failed_data | 发送号码中失败的号码对应的错误码,全部成功则为空数组 | {"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
备注:黑名单等拦截错误实时返回
地址:https://api.3yit.com/api/send-variable
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
params | 变量参数,多条短信以英文;分割,多个变量之间以英文,分割,变量前带上手机号 | 176xxxxxxxxx,822233;175xxxxxxxxx,656552 | 是 |
content | 短信内容 | 【测试】验证码${Text} | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者-http接口文档中查看) | 否 |
ext | 扩展号 | 123 | 否 |
结果
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
msg_id | 消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 | 17 |
failed_data | 发送号码中失败的号码对应的错误码,全部成功则为空数组 | {"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
备注:黑名单等拦截错误实时返回,一次最多提交一万条
地址:https://api.3yit.com/api/send-biunique
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
params | 一对一参数,json格式key是手机号,value是内容 | {"17655555555":"测试111","17666666666":"测试222"} | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
ext | 扩展号 | 123 | 否 |
结果
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
msg_id | 消息id,用来获取状态报告时候匹配是哪条消息,批量发送的时候msg_id和该批次中的手机号形成唯一标志,成功返回 | 17 |
failed_data | 发送号码中失败的号码对应的错误码,全部成功则为空数组 | {"176xxxxxxxxx":"WL:CWHM","171xxxxxxxxx":"WL:CWHM"} |
请求头Content-Type:application/x-www-form-urlencoded
请求方式:GET 返回值:JSON
备注:每条短信状态仅可获取一次,运营商返回某条短信状态后,此接口就能拉取到,之后调用此接口将不会返回此条短信的状态,所以调用者拉到数据后需要根据 手机号+msg_id 将状态存在本地
地址:https://api.3yit.com/api/report
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
返回值
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
data | 扩展号,调用发送接口返回的msg_id,手机号,状态,时间,售价 字段以,分隔 多条记录以|分隔 | 123,2,1762532xxxx,DELIVRD,2021-12-23 01:02:03,0.2|123,2,17862532xxxx,DELIVRD,2021-12-23 01:02:03,0.1 |
每条仅推送一次
注意事项:
推送的是utf8原始字节流
推送格式:
扩展号,调用发送接口返回的msg_id,手机号,状态,时间,售价 字段以,分隔 多条记录以|分隔
内容示范:
123,2,1762532xxxx,DELIVRD,2021-12-23 01:02:03,0.2|123,2,17862532xxxx,DELIVRD,2021-12-23 01:02:03,0.1
请求方式:GET 返回值:JSON
备注:比如退订等,每条短信状态仅可获取一次,手机回复上行后,此接口就能拉取到上行数据,每个上行数据只能拉取到一次,所以调用者拉到上行后,需要将上行的内容存在本地,然后自行根据 msg_id,手机号 等信息匹配具体哪条短信产生的上行回复
地址:https://api.3yit.com/api/get-reply
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
返回值
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
data | urlencode后的内容,手机号,调用发送接口返回的msg_id,扩展号,时间 字段以,分隔多条记录以|分隔 | TD,158114xxxx,100000006,048842426601,20220325123304|退订,1891456xxxx,100000007,0615,20211115173903 |
每条上行回复仅推送一次
注意事项:
推送的是utf8原始字节流
推送格式:
urlencode后的内容,手机号,扩展号,时间 字段以,分隔多条记录以|分隔
内容示范:
TD,158114xxxx,048842426601,20220325123304|退订,1891456xxxx,0615,20211115173903
请求方式:GET 返回值:JSON
https://api.3yit.com/api/balance
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
返回值
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
data | 余额 | {"balance": "99999.89"} |
请求头Content-Type:application/x-www-form-urlencoded
请求方式:POST 返回值:JSON
https://api.3yit.com/api/add-template
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
template | 模板内容 | 【测试】您的验证码是%不要告诉他人 | 是 |
返回值
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
data | 模板id | {"temp_id":123456} |
请求方式:GET 返回值:JSON
地址:https://api.3yit.com/api/get-template-status
参数
参数名 | 参数介绍 | 示例 | 必填 |
---|---|---|---|
sp_id | 产品sp_id | 5xxxxx(开发者-http接口文档中查看) | 是 |
signature | 签名(和密码二选一即可) | a92569901189fxxxxxxxx957c096c432e2d47635 | 否 |
password | 密码(和签名二选一即可),通过sp_id的密码进行md5处理 | xxxxxxxxxxx(32位,开发者,http接口文档中查看) | 否 |
temp_id | 模板id | 123456 | 是 |
返回值
参数名 | 参数说明 | 示例 |
---|---|---|
code | 详情见错误表 | 0 |
msg | 成功-success 错误-其他提示 | success |
data | "0"待审核 "1"审核通过 "2"被驳回 | {status: "1"}} |
发送
错误码 | 说明 |
---|---|
10000 | 服务出错,请稍后再试 |
10001 | 参数错误,请确认 |
10008 | 账号被锁定,请联系管理员确认 |
10011 | 余额不足,请尽快充值 |
10100 | 签名校验失败 |
10101 | 您的ip不在白名单内,请确认 |
10102 | 密码错误,请确认 |
10200 | 产品sp_id必须填写 |
10201 | 手机号必须填写 |
10202 | 短信内容必须填写 |
10203 | 发送时间格式必须为UNIX时间戳 |
10208 | 短信进拦截,具体原因参考data字段 |
10209 | 触发防刷,请调整配置 |
短信状态错误码
错误码 | 说明 |
---|---|
WL:MBLJ | 短信内容匹配到了模板,并且此模板类型是拦截 |
WL:MBSH | 命中审核模板 |
WL:NMLJ | 短信内容没有匹配到模板,并且用户的模板审核方式是未匹配到就进拦截 |
WL:NMSH | 短信内容没有匹配到模板,并且用户的模板审核方式是未匹配到就进审核 |
WL:KHLJ | 命中空号,进拦截 |
WL:QHLJ | 命中用户签名黑名单,进拦截 |
WL:SHLJ | 命中用户SPID黑名单,进拦截 |
WL:CHLJ | 命中系统产品黑名单,进拦截 |
WL:CWHM | 错误号码 |
WL:QWBB | 签名未报备,进拦截 |
WL:MQM | 需要签名但没有,进拦截 |
WL:CS | 超过限速了 |
WL:ZJLJ | 不匹配任何模板,直接拦截 |
WL:CMT | 产品未配置相应通道,进拦截 |
WL:CDQC | 通道不支持该地区发送,进拦截 |
WL:CGMT | 产品通道池中没有相应通道,进拦截 |
WL:CNH | 所选的通道不健康,进拦截 |
WL:TCLJ | 不在发送时间段,进拦截 |
WL:TCSH | 不在发送时间段,进审核 |
WL:CPL | 超频限制 |
第一步:准备QueryString
1、将所有参数(除了signature)按照key排序(顺序)
2、将排序好的参数key和值进行URLEncode,之后再增加三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A、%7E 替换回波浪号(~)
3、将格式化后的key和值按照key + "=" + 值进行拼接成字符串QueryString,多个参数间用&连接,例:”a=%E5%93%88%E5%93%88&b=haha”
4、在上一步得到的QueryString前拼接上请求方式,生成新的QueryString,HTTPMethod + "&" + URLEncode("/") + "&" + QueryString
第二步:准备signature
1、将所有参数(除了signature)按照key排序(顺序)
2、将排序好的参数key和值进行URLEncode,之后再增加三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A、%7E 替换回波浪号(~)
3、将格式化后的key和值按照key + "=" + 值进行拼接成字符串QueryString,多个参数间用&连接,例:”a=%E5%93%88%E5%93%88&b=haha”
4、在上一步得到的QueryString前拼接上请求方式,生成新的QueryString,HTTPMethod + "&" + URLEncode("/") + "&" + QueryString
aes加密发送,需要同时分别加密手机号字段和内容字段
https://api.3yit.com/api/send-sms-single-aes
操作流程
1、发送地址在原来的地址加上-aes,地址:https://api.3yit.com/api/send-sms-single-aes
2、先向客服索要加密key,然后自行生成iv,用AES-128-CBC将手机号或者内容进行加密,并对加密的数据进行base64处理获得字符串s1
3、将生成的iv也进行base64处理生成字符串s2
4、将两个字符串进行json处理生成如下的json字符串s3:"{"iv":"s2","value":"s1"}"
5、将上述得到的s3进行base64处理,然后放入相应post数据字段中代替未加密的数据
$cipher = 'AES-128-CBC'; $iv = random_bytes(openssl_cipher_iv_length($cipher)); $value = openssl_encrypt($value, $cipher, $key, 0, $iv); if ($value === false) { throw new RuntimeException('Could not encrypt the data.'); } $iv = base64_encode($iv); $json = json_encode(compact('iv', 'value'), JSON_UNESCAPED_SLASHES); if (json_last_error() !== JSON_ERROR_NONE) { throw new RuntimeException('Could not encrypt the data.'); } return base64_encode($json);
CMPP(China Mobile Peer to Peer)协议是中国移动为短信服务提供商(SP)与短信中心之间数据交换而精心制定的一套标准协议。通过CMPP协议可以实现短信的批量提交、状态报告接收以及其他高级功能。智慧云信短信平台不仅支持广泛使用的HTTP类型接口,同时也支持更为专业和高效的产品级的CMPP2协议。
一、前期准备工作
在开始使用CMPP协议进行短信服务之前,有几个关键的准备步骤需要完成。
1、首先,您需要在智慧云信短信平台注册一个账号。注册成功后,您还需要提交实名认证资料
2、接下来,在您的账号中,找到对应的产品区域,提交短信签名以及短信模版以供审核。
二、获取并配置连接参数
完成上述准备工作后,下一步是获取并配置CMPP连接参数。
1、请登录到智慧云信短信平台,并导航至【通知短信】-开发者中心-CMPP2接口参数部分。
2、在这里,您将看到一系列重要的连接参数,包括服务器IP、端口号、长号码、账号(SPID)、接口密码、流速以及最大链接数等。请注意,这些参数都是由系统自动生成的,如链接数、流速等不符合需求,可联系客服修改。
3、获取到这些参数后,您需要将它们配置到您的系统中。请根据您的系统开发文档或技术支持的指导进行配置,以确保一切设置正确无误。
三、查看与测试链接情况
配置完成后,下一步是查看和测试链接情况,以确保您的系统已经成功接入了智慧云信的短信网关。
1、当您完成配置并启动连接后,系统应该会显示链接成功的消息。如果链接成功,这意味着您的系统已经成功与智慧云信的短信网关建立了通信。
2、为了确保一切正常运行,建议您发送几条测试短信,检查是否能够正常接收和发送。如果遇到任何问题,智慧云信的技术支持团队将随时为您提供帮助和解决方案。
通过遵循以上步骤,您应该能够顺利地通过CMPP协议接入智慧云信的短信网关,并享受高效、稳定的短信服务。