下载链接一、插件对接
功能:魔方财务系统的国内短信通知、国内短信验证、国际短信通知、国际短信验证、用户请求验证等短信提示功能。
支持:(支持最新版本)
使用前提:
1、在启用该应用之前,请确保在零零七云计算(零零七IDC)下已购买短信资源包。
(1)购买零零七云计算(零零七IDC)的短信服务地址(新用户注册点击注册)
(2)获取零零七云计算(零零七IDC)平台账号密码
③大量短信额度价格可以商量谈价不能特别低
设置如果有问题可以联系客服经理:1485174354
购买后配置教程:
1、购买该插件之后,需要在您的魔方财务后台-【系统】-【短信邮件设置】- 【接口设置】—【短信设置】管理页面,找到"零零七云计算·云通信",点击右侧"安装"按钮进行安装。
2、安装完后点击右侧"配置"按钮,填写相关配置信息进行配置
3、配置完成后,打开【短信模板】页面 ,将供应商切换为【零零七短信平台】。
4、在【短信模板】页面,将需要使用的短信模板勾选并提交审核。
5、短信模板审核通过后,点击【发送设置】页面,将供应商切换为【零零七短信平台】,保存后再点击【测试发送】。
如安装失败,请手动安装教程如下:
1、点击应用商店上方:"我的"按钮 找到该插件
2、点击"安装"或"下载"按钮,进行立即安装或重新下载
其他拓展功能说明:
创建模板:您可在此自定义/删除短信模板, 提交模板审核。创建模板后,系统会将模板自动同步到对应的短信开发商。
测试发送: 正式使用前可先进行测试,助您快速了解测试通道速度及手机接收情况
防刷设置:
①、配置极验验证码ID和秘钥
1.1 注册极验:极验官网地址
1.2 注册成功选择4.0
1.3 添加自己的业务,添加完成后会自动分配ID和秘钥
1.4 复制ID和秘钥到魔方插件后台,并选择1开启验证码(记得关闭官方自带验证码:https(或者http)://域名/后台地址/#/general-settings/captcha 图形验证码是否开启:选择否)
②、前端页面添加极验验证按钮代码
提示:该代码随便放哪里都可以生效,只针对短信有效,其他均无效
建议添加到短信注册、忘记密码页面
代码添加位置详情查看:零零七云计算短信魔方插件防刷 - 零零七云计算公用文档 (007idc.cn)
提示
1.配置完成插件信息请点击短信模板审核,全选一键审核,一般会有两页,需要全部审核,审核时间秒通过,测试是否对接成功尽量在前台测试
2.短信签名、短信模板均可自定义,但是乱发短信有封号风险
appkey:登录账号
appCode:1000
appSecret:接口密码
SignName:短信签名,必须用中文括号,例如:【零零七IDC】
二、接口对接
代码示例-优先看
1、签名自定义(规范使用-违规封号)
2、模板自定义(规范使用-违规封号)
"短信发送成功",
"F0001" => "参数appkey未填写",
"F0002" => "参数appcode未填写",
"F0003" => "参数phone未填写",
"F0004" => "参数sign未填写",
"F0005" => "参数timestamp未填写",
"F0006" => "appkey不存在",
"F0007" => "账号已经关闭",
"F0008" => "sign检验错误",
"F0009" => "账号下没有业务",
"F0010" => "业务不存在",
"F0011" => "手机号码超过1000个",
"F0012" => "timestamp不是数字",
"F0013" => "timestamp过期超过5分钟",
"F0014" => "请求ip不在白名单内",
"F0015" => "余额不足",
"F0016" => "手机号码无效",
"F0017" => "没有可用的业务",
"F0022" => "参数msg未填写",
"F0023" => "msg超过了1000个字",
"F0024" => "extend不是纯数字",
"F0025" => "内容签名未报备/无签名",
"F0039" => "参数sms未填写",
"F0040" => "参数sms格式不正确",
"F0041" => "短信条数超过1000条",
"F0050" => "无数据",
"F0100" => "未知错误",
);
$url = 'http://123.57.229.179:9090/sms/batch/v1';
//拼接签名
$time = explode (" ", microtime () );
$time = $time [1] . ($time [0] * 1000);
$time2 = explode ( ".", $time );
$time = $time2 [0];
$appkey = '登录账号';
$appcode = '1000';
$appsecret = '接口秘钥';
$signcode = md5($appkey.$appsecret.$time);
//创建数组 写入参数
$arr = array(
'appkey'=>$appkey,
'appcode'=>$appcode,
'sign'=>$signcode,
'phone'=>'13568819156',
'msg'=>'【零零七】 您的验证码是124154 ',
'timestamp'=>$time,
);
$data_string = json_encode($arr);
//POST
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
));
$json = curl_exec($ch);
echo($json."");
//解析返回值
$json_Array = json_decode($json,true);
$result = $json_Array['code'];
//短信发送成功返回True,失败返回false
if ($result == '00000') {
echo json_encode(array('status' => "success", 'msg' => $statusStr[$result]));
} else {
echo json_encode(array('status' => "error", 'msg' => $statusStr[$result] . '. Code: ' . $result));
}
curl_close($ch);
?>
1.1.相同内容群发
地址:http://sms.007idc.cn:9090/sms/batch/v1
请求参数说明
备注:请求头里面需要设置传输格式:Content-type:application/json
参数名称 | 参数说明 | 备注 |
---|
appkey | 应用key-登录账号 | *必填由供应商提供 |
appcode | 应用代码-默认1000 | *必填由供应商提供,默认为1000 |
sign | 短信签名验证MD5(appkey+appsecret+timestamp) | *必填秘钥appsecret由供应商提供,由应用key+秘钥+时间戳经过md5加密后的32位16进制小写字符串(拼接过程不包括+) |
uid | String | 选填唯一标识(32位字符串以内,用于获取短信回执,不传或者传空字符串系统自动生成32位字符串) |
phone | 手机号码 | *必填多个号码用半角英文逗号隔开,一次最多不能超过1000个 |
msg | 下发短信内容 | *必填短信内容长度不超过1000个字(包括1000字),每个英文或阿拉伯字符算1个字 |
timestamp | 时间戳 | *必填时间戳(精确到毫秒),当前时间5分钟内请求有效 |
extend | 扩展号,该参数是显示在接收手机上的主叫尾号,可用于上行信息匹配,若不填写则认为不进行扩展(不填写不影响发送) | 选填可为空数字,如:001,119等,通道本身主叫号加上用户自己分配扩展号的总长度不能超过20位
|
请求参数信息说明:
{
"sign": "de7cb2fb99756c06214fc78252d36484",
"timestamp": "1520496753938",
"phone": "15100000055,15100000044",
"extend": "123",
"appcode": "test",
"appkey": "test",
"msg": "你好,测试"
}
响应信息说明
请求成功数据格式:
{
"code": "00000",
"desc": "提交成功",
"uid": "8b159b0036d0402e93b39fee102eedf2",
"result": [
{
"status": "00000",
"phone": "15100000055",
"desc": "提交成功"
},
{
"status": "00000",
"phone": "15100000044",
"desc": "提交成功"
}
]
}
下图表返回数据的描述信息:
字段 | 类型 | 说明 |
---|
code | String | 返回码 |
desc | String | 返回码描述 |
uid | String | 提交返回的唯一标识(32位字符串,用于获取短信回执) |
result | json 数组 | 提交短信的详细状态数据 |
下表为result数据中详细描述信息:
字段 | 类型 | 说明 |
---|
status | String | 状态码 |
desc | String | 状态码描述 |
phone | String | 手机号码 |
请求异常数据格式:
{
"code": "F0006",
"desc": "appkey不存在",
"uid": "6e31047a352346f18a0eb2daadb9f217",
"result": []
}
下发demo
public class HttpSendDemo {
public static void main( String[] args ) throws NoSuchAlgorithmException, UnsupportedEncodingException{
HttpClient httpClient = null;
HttpPost httppost = null;
try{
httpClient = new DefaultHttpClient();
httppost = new HttpPost("http://ip:port/sms/batch/v1");
Map map = new HashMap();
String appkey = "xxxx";
String appsecret = "xxxx";
map.put("appkey", appkey);
map.put("appcode", appcode);
String timestamp = System.currentTimeMillis()+"";
map.put("timestamp", timestamp);
map.put("phone", "xxx");
map.put("msg", "【测试】你好,测试");
String sign = md5(appkey+appsecret+timestamp);
map.put("sign", sign);
map.put("extend", "123");
String json = JSONObject.toJSONString(map);
StringEntity formEntity = new StringEntity(json, "utf-8");
httppost.setEntity(formEntity);
HttpResponse httpresponse = null;
httpresponse = httpClient.execute(httppost);
HttpEntity httpEntity = httpresponse.getEntity();
String response = EntityUtils.toString(httpEntity, "utf-8");
System.out.println(response);
}catch(Exception e){
e.printStackTrace();
}finally{
if(httppost!=null){
httppost.abort();
}
if(httpClient!=null){
httpClient.getConnectionManager().shutdown();
}
}
}
private static String md5(String param) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] md5Byte = md5.digest(param.getBytes("utf8"));
String result = byteToHex(md5Byte);
return result;
}
private static String byteToHex(byte[] md5Byte) {
String result = "";
StringBuilder sb = new StringBuilder();
for(byte each : md5Byte){
int value = each&0xff;
String hex = Integer.toHexString(value);
if(value<16){
sb.append("0");
}
sb.append(hex);
}
result = sb.toString();
return result;
}
public static int byte4ToInteger(byte[] b, int offset) {
return (0xff & b[offset]) << 24 | (0xff & b[offset+1]) << 16 |
(0xff & b[offset+2]) << 8 | (0xff & b[offset+3]);
}
}
1.2.一对一内容群发
地址: http://sms.007idc.cn:9090/sms/distinct/v1
请求参数说明
备注:请求头里面需要设置传输格式:Content-type:application/json
参数名称 | 参数说明 | 备注 |
---|
appkey | 应用key-登录账号 | *必填由供应商提供 |
appcode | 应用代码-默认1000 | *必填由供应商提供 |
sign | 短信签名验证MD5(appkey+appsecret+timestamp) | *必填秘钥appsecret由供应商提供,由应用key+秘钥+时间戳经过md5加密后的32位16进制小写字符串(拼接过程不包括+) |
sms | 个性化信息sms[] | *必填个性化信息,短信条数不能超过1000条 |
timestamp | 时间戳 | *必填时间戳(精确到毫秒),当前时间5分钟内请求有效 |
sms结构如下:
字段 | 类型 | 说明 |
---|
phone | String | *必填手机号码 |
msg | String | *必填短信内容长度不超过1000个字(包括1000字),每个英文或阿拉伯字符算1个字 |
extend | String | 选填可为空
数字,如:001,119等,通道本身主叫号加上用户自己分配扩展号的总长度不能超过20位
|
请求参数信息说明:
{
"appkey": "test",
"appcode": "test",
"sign": "de7cb2fb99756c06214fc78252d36484",
"timestamp": "1520496753938",
"sms": [
{
"msg": "短信内容1",
"phone": "15100000005",
"extend": ""
},
{
"msg": "短信内容2",
"phone": "15100000055",
"extend": "11"
}
}
响应信息说明
请求成功数据格式:
{
"code": "00000",
"desc": "提交成功",
"result": [
{
"status": "00000",
"phone": "15100000055",
"desc": "提交成功",
"uid": "8b159b0036d0402e93b39fee102eedf2"
},
{
"status": "00000",
"phone": "15100000044",
"desc": "提交成功",
"uid": "8b159b0036d0402e93b39fee102ee587"
}
下图表返回数据的描述信息:
字段 | 类型 | 说明 |
---|
code | String | 返回码 |
desc | String | 返回码描述 |
result | json 数组 | 提交短信的详细状态数据 |
下表为result数据中详细描述信息:
字段 | 类型 | 说明 |
---|
status | String | 状态码 |
desc | String | 状态码描述 |
phone | String | 手机号码 |
uid | String | 提交返回的唯一标识(32位字符串,用于获取短信回执) |
请求异常数据格式:
{
"code": "F0006",
"desc": "appkey不存在",
"uid": "6e31047a352346f18a0eb2daadb9f217",
"result": []
}
下发demo
public class HttpSendDemo {
public static void main( String[] args ) throws NoSuchAlgorithmException, UnsupportedEncodingException{
HttpClient httpClient = null;
HttpPost httppost = null;
try{
httpClient = new DefaultHttpClient();
httppost = new HttpPost("http://ip:port/sms/distinct/v1");
Map map = new HashMap();
String appkey = "xxxx";
String appsecret = "xxxx";
String appcode="xxxx";
map.put("appkey", appkey);
map.put("appcode", appcode);
String timestamp = System.currentTimeMillis()+"";
map.put("timestamp", timestamp);
List smsParam = new ArrayList();
for(int i=0;i<2;i++){
SmsParam each = new SmsParam();
each.setMsg("【测试】你好测试"+i);
each.setExtend("001"+i);
each.setPhone("1510000041"+i);
smsParam.add(each);
}
map.put("sms", smsParam);
String sign = md5(appkey+appsecret+timestamp);
map.put("sign", sign);
String json = JSONObject.toJSONString(map);
StringEntity formEntity = new StringEntity(json, "utf-8");
httppost.setEntity(formEntity);
HttpResponse httpresponse = null;
httpresponse = httpClient.execute(httppost);
HttpEntity httpEntity = httpresponse.getEntity();
String response = EntityUtils.toString(httpEntity, "utf-8");
System.out.println(response);
}catch(Exception e){
e.printStackTrace();
}finally{
if(httppost!=null){
httppost.abort();
}
if(httpClient!=null){
httpClient.getConnectionManager().shutdown();
}
}
}
private static String md5(String param) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] md5Byte = md5.digest(param.getBytes("utf8"));
String result = byteToHex(md5Byte);
return result;
}
private static String byteToHex(byte[] md5Byte) {
String result = "";
StringBuilder sb = new StringBuilder();
for(byte each : md5Byte){
int value = each&0xff;
String hex = Integer.toHexString(value);
if(value<16){
sb.append("0");
}
sb.append(hex);
}
result = sb.toString();
return result;
}
public static int byte4ToInteger(byte[] b, int offset) {
return (0xff & b[offset]) << 24 | (0xff & b[offset+1]) << 16 |
(0xff & b[offset+2]) << 8 | (0xff & b[offset+3]);
}
}
public class SmsParam {
private String phone;
private String msg;
private String extend;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "SmsParam [phone=" + phone + ", msg=" + msg + ", extend=" + extend + "]";
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getExtend() {
return extend;
}
public void setExtend(String extend) {
this.extend = extend;
}
}
1.3.状态报告平台推送
由接收方提供接收地址,平台绑定后推送该地址,推送格式如下。
字段描述
字段 | 类型 | 说明 |
---|
appkey | String | 应用key |
phone | String | 手机号码 |
status | String | 状态 0-成功 其他失败 |
desc | String | 状态码描述 |
uid | String | 短信唯一标识,对应提交响应返回的uid |
report_time | String | 状态报告时间 |
推送样例:
[
{
"appkey": "huoguo",
"desc": "DELIVRD",
"phone": "15200000006",
"report_time": "2018-03-15 01:01:46",
"status": "0",
"uid": "143536bbc41e4ef69c779cbb125f7317"
},
{
"appkey": "huoguo",
"desc": "UNDELIV",
"phone": "15200000007",
"report_time": "2018-03-15 01:01:49",
"status": "2",
"uid": "b671244d5c534cf7a10f3b99c31aa086"
}
]
存在多条状态报告时,一次最多推送100条接收成功需要返回:
{"code": "00000"}
返回其他值视为接收异常,会尝试最多推送三次
1.4.状态报告用户自取
地址: http://sms.007idc.cn:9090/sms/report/v1
同一条数据只能获取一次,可通过参数获取指定数量,以实际获取数量为准。
请求参数说明
参数名称 | 参数说明 | 备注 |
---|
appkey | 应用key-登录账号 | *必填由供应商提供 |
appcode | 应用代码-默认1000 | *必填由供应商提供 |
sign | 短信签名验证MD5(appkey+appsecret+timestamp) | *必填秘钥appsecret由供应商提供,由应用key+秘钥+时间戳经过md5加密后的32位16进制小写字符串(拼接过程不包括+) |
timestamp | 时间戳 | *必填时间戳(精确到毫秒),当前时间5分钟内请求有效 |
number | 数量 | 选填可为空数字,范围1到1000,不在该范围采用默认值200 |
响应信息说明
请求成功数据格式:
[
{
"appkey": "huoguo",
"desc": "DELIVRD",
"phone": "15200000006",
"report_time": "2018-03-15 01:01:46",
"status": "0",
"uid": "143536bbc41e4ef69c779cbb125f7317"
},
{
"appkey": "huoguo",
"desc": "UNDELIV",
"phone": "15200000007",
"report_time": "2018-03-15 01:01:49",
"status": "2",
"uid": "b671244d5c534cf7a10f3b99c31aa086"
}
]
下图表返回数据的描述信息:
字段 | 类型 | 说明 |
---|
appkey | String | 应用key |
phone | String | 手机号码 |
status | String | 状态 0-成功 其他失败 |
desc | String | 状态码描述 |
uid | String | 短信唯一标识,对应提交响应返回的uid |
report_time | String | 状态报告时间 |
无数据格式:
{
"code": "F0050",
"desc": "无数据",
}
请求异常数据格式:
{
"code": "F0006",
"desc": "appkey不存在",
}
1.5.上行平台推送
由接收方提供接收地址,平台绑定后推送该地址,推送格式如下。
字段描述
字段 | 类型 | 说明 |
---|
appkey | String | 应用key |
phone | String | 手机号码 |
msg | String | 上行回复内容 |
extend | String | 扩展号,对应发送填写的extend |
deliver_time | String | 上行回复时间 |
推送样例:
[
{
"appkey": "huoguo",
"deliver_time": "2018-03-15 01:35:41",
"extend": "123",
"msg": "TD",
"phone": "13900000200"
},
{
"appkey": "huoguo",
"deliver_time": "2018-03-15 01:35:41",
"extend": "",
"msg": "TD",
"phone": "13900000200"
}
]
存在多条上行时,一次最多推送10条
接收成功需要返回:
{"code": "00000"}
返回其他值视为接收异常,会尝试最多推送三次
1.6.上行用户自取
地址: http://sms.007idc.cn:9090/sms/mo/v1
同一条数据只能获取一次,可通过参数获取指定数量,以实际获取数量为准。
请求参数说明
参数名称 | 参数说明 | 备注 |
appkey | 应用key-登录账号 | *必填由供应商提供 |
appcode | 应用代码-默认1000 | *必填由供应商提供 |
sign | 短信签名验证MD5(appkey+appsecret+timestamp) | *必填秘钥appsecret由供应商提供,由应用key+秘钥+时间戳经过md5加密后的32位16进制小写字符串(拼接过程不包括+) |
timestamp | 时间戳 | *必填时间戳(精确到毫秒),当前时间5分钟内请求有效 |
number | 数量 | 选填可为空,数字,范围1到1000,不在该范围采用默认值200 |
响应信息说明
请求成功数据格式:
[
{
"appkey": "huoguo",
"deliver_time": "2018-03-15 01:35:41",
"extend": "123",
"msg": "TD",
"phone": "13900000200"
},
{
"appkey": "huoguo",
"deliver_time": "2018-03-15 01:35:41",
"extend": "",
"msg": "TD",
"phone": "13900000200"
}
]
下图表返回数据的描述信息:
字段 | 类型 | 说明 |
---|
appkey | String | 应用key |
phone | String | 手机号码 |
msg | String | 上行回复内容 |
extend | String | 扩展号,对应发送填写的extend |
deliver_time | String | 上行回复时间 |
{
"code": "F0050",
"desc": "无数据",
}
请求异常数据格式:
{
"code": "F0006",
"desc": "appkey不存在",
}
1.7.查询余额
地址: http://sms.007idc.cn:9090/sms/balance/v1
查询账号余额,单位为条
请求参数说明
参数名称 | 参数说明 | 备注 |
---|
appkey | 应用key-登录账号 | *必填由供应商提供 |
appcode | 应用代码-默认1000 | *必填由供应商提供 |
sign | 短信签名验证MD5(appkey+appsecret+timestamp) | *必填秘钥appsecret由供应商提供,由应用key+秘钥+时间戳经过md5加密后的32位16进制小写字符串(拼接过程不包括+) |
timestamp | 时间戳 | *必填时间戳(精确到毫秒),当前时间5分钟内请求有效 |
响应信息说明
下图表返回数据的描述信息:
字段 | 类型 | 说明 |
---|
appkey | String | 应用key |
balance | String | 整数,单位:条数 |
balance_time | String | 余额查询时间 |
请求成功数据格式:
{
"appkey": "test",
"balance": "50",
"balance_time": "2018-03-15 01:01:46"
}
请求异常数据格式:
{
"code": "F0006",
"desc": "appkey不存在",
}
1.8.错误码说明表
返回代码 | 错误码描述 |
---|
00000 | 提交成功 |
F0001 | 参数appkey未填写 |
F0002 | 参数appcode未填写 |
F0003 | 参数phone未填写 |
F0004 | 参数sign未填写 |
F0005 | 参数timestamp未填写 |
F0006 | appkey不存在 |
F0007 | 账号已经关闭 |
F0008 | sign检验错误 |
F0009 | 账号下没有业务 |
F0010 | 业务不存在 |
F0011 | 手机号码超过1000个 |
F0012 | timestamp不是数字 |
F0013 | timestamp过期超过5分钟 |
F0014 | 请求ip不在白名单内 |
F0015 | 余额不足 |
F0016 | 手机号码无效 |
F0017 | 没有可用的业务 |
F0022 | 参数msg未填写 |
F0023 | msg超过了1000个字 |
F0024 | extend不是纯数字 |
F0025 | 内容签名未报备/无签名 |
F0039 | 参数sms未填写 |
F0040 | 参数sms格式不正确 |
F0041 | 短信条数超过1000条 |
F0050 | 无数据 |
F0100 | 未知错误 |
零零七云计算短信额度购买联系:QQ2417057435、QQ1485174354、QQ2042448501、QQ593825907、微信号zclcyjia88、微信号xshost
零零七云计算短信平台登录地址:http://sms.007idc.cn/sms-cloud/login