使用云片发送短信功能
-
https://www.yunpian.com/ :云片官网地址
第一步
第二步
-
下载SDK,选择合适的的短信发送接口
API 列表 | 请求地址 | 特性 | 常用场景 |
---|---|---|---|
单条发送 | https://sms.yunpian.com/v2/sms/single_send.json |
一次发送一条短信 | 此接口最为常用。常用于短信验证、找回密码、短信登录、监控报警。可循环调用 |
批量发送相同内容 | https://sms.yunpian.com/v2/sms/batch_send.json |
批量发送相同内容 | 批量发送内容完全一样的短信 |
-
单条发送接口
HTTP头信息
Accept:application/json;charset=utf-8;
Content-Type:application/x-www-form-urlencoded;charset=utf-8;
请求
URL:https://sms.yunpian.com/v2/sms/single_send.json
注意:海外服务器地址 us.yunpian.com
访问方式:POST
支持 https 与 http 两种访问,建议使用 https
请求参数
参数名 | 类型 | 是否必传 | 是否默认开放 | 描述 | 示例 |
---|---|---|---|---|---|
apikey | string | 是 | 是 | 用户唯一标识,在"账号设置"-"子帐号管理"中查看 | 9b11127a9701975c734b8aee81ee3526 |
mobile | string | 是 | 是 | 接收的手机号,仅支持单号码发送,不需要带+86 前缀 | 15205201314 |
text | string | 是 | 是 | 需要发送的短信内容,需要与已审核的短信模板相匹配。短信内容须在最前面携带签名,否则会使用子账号默认签名下发 | 【云片网】您的验证码是 1234 |
extend | string | 否 | 否 | 下发号码扩展号,纯数字 | 001 |
uid | string | 否 | 否 | 该条短信在您业务系统内的 ID,如订单号或者短信发送记录流水号。 | 10001 |
callback_url | string | 否 | 是 | 短信发送后将向这个地址推送(运营商返回的)发送报告。 如推送地址固定,建议在"数据推送与获取”做批量设置。 如后台已设置地址,且请求内也包含此参数,将以请求内地址为准 | http://your_receive_url_address |
register | boolean | 否 | 否 | 是否为注册验证码短信,如果传入 true,则该条短信作为注册验证码短信统计注册成功率,需联系客服开通。 | true |
mobile_stat | boolean | 否 | 是 | 若短信中包含云片短链接,此参数传入 true 将会把短链接替换为目标手机号的专属链接,用于统计哪些号码的机主点击了短信中的链接,可在云片后台查看。详情参考短信点击统计。 | true |
-
从里面可以看出 必要参数有 apikey(用户唯一标识,在"账号设置"-"子帐号管理"中查看)、mobile(接收的手机号,仅支持单号码发送,不需要带+86 前缀)、text(需要发送的短信内容,需要与已审核的短信模板相匹配。短信内容须在最前面携带签名,否则会使用子账号默认签名下发)
java请求方式
/**
* 单条短信发送,智能匹配短信模板
*
* @param apikey成功注册后登录云片官网,进入后台可查看
* @param text需要使用已审核通过的模板或者默认模板
* @param mobile接收的手机号,仅支持单号码发送
* @return json格式字符串
*/
public static String singleSend(String apikey, String text, String mobile) {
Map<String, String> params = new HashMap<String, String>();
params.put("apikey", apikey);
params.put("text", text);
params.put("mobile", mobile);
return post("https://sms.yunpian.com/v2/sms/single_send.json", params);
}
返回参数
{
"code": 0,
"msg": "发送成功",
"count": 1,
"fee": 0.05,
"unit": "RMB",
"mobile": "13200000000",
"sid": 3310228982
}
名称 | 类型 | 描述 |
---|---|---|
code | integer | 0 代表发送成功,其他 code 代表出错,详细见"返回值说明"页面 |
msg | text | 例如""发送成功"",或者相应错误信息 |
count | integer | 发送成功短信的计费条数(计费条数:70 个字一条,超出 70 个字时按每 67 字一条计费) |
fee | double | 扣费金额,单位:元,类型:双精度浮点型/double |
unit | string | 计费单位;例如:“RMB” |
mobile | string | 发送手机号 |
sid | long(64 位) | 短信 id,64 位整型, 对应 Java 和 C#的 long,不可用 int 解析 |
功能实现
-
Controller层
/**
* 功能描述:
* 〈用户注册短信〉
* @param mobile 1:用户登录账号
* @return : com.sen.common.web.utils.JsonReturn
* @author : hxz
* @date : 2020/12/20 10:06
*/
-
Service层
/**
* 功能描述:
* 〈发送注册短信方法〉
* @param mobile 1: 手机登录账号
* @return : void
* @author : hxz
* @date : 2020/12/25 10:19
*/
void sendRegSms(String mobile);
-
ServiceImpl
/**
* 功能描述:
* 〈发送注册短信方法〉
* @param mobile 1: 手机登录账号
* @return : void
* @author : hxz
* @date : 2020/12/25 10:19
*/
public void sendRegSms(String mobile) {
String suffix = "reg";
String code = (String) redisService.get(suffix + ":" + mobile);
// 如果code 存在说明 发送过短信
if(!CheckUtils.checkNull(code)){
throw new ServiceException("请勿重复发送验证码");
}
// 6位数验证码
String smsCode = CommonUtils.generateNum(6);
// 判断用户是否重复注册
User user = userService.findByAccount(mobile);
if(null!=user){
throw new ServiceException("该用户已存在");
}
redisService.set(suffix + ":" + mobile,smsCode,300);
String content = "【*****】您的注册验证码:"+ smsCode + "。如非本人操作,请忽略本短信。";
String result = SmsUtils.sendSms(mobile, content);
System.out.println("短信发送结果:" + result);
Map code = JsonUtils.toObject(result, Map.class);
if (null == code.get("code") && !code.get("code").toString().equals("0")) {
throw new ServiceException("发送失败");
}
}
-
其中SmsUtils.sendSms(mobile, content)
package com.shy.lhs.hsmy.common.utils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SmsUtils {
//查账户信息的http地址
private static String URI_GET_USER_INFO =
"https://sms.yunpian.com/v2/user/get.json";
//智能匹配模板发送接口的http地址
private static String URI_SEND_SMS =
"https://sms.yunpian.com/v2/sms/single_send.json";
//模板发送接口的http地址
private static String URI_TPL_SEND_SMS =
"https://sms.yunpian.com/v2/sms/tpl_single_send.json";
//发送语音验证码接口的http地址
private static String URI_SEND_VOICE =
"https://voice.yunpian.com/v2/voice/send.json";
//绑定主叫、被叫关系的接口http地址
private static String URI_SEND_BIND =
"https://call.yunpian.com/v2/call/bind.json";
//解绑主叫、被叫关系的接口http地址
private static String URI_SEND_UNBIND =
"https://call.yunpian.com/v2/call/unbind.json";
//编码格式。发送编码格式统一用UTF-8
private static String ENCODING = "UTF-8";