如何接入短信验证码

本教程可以实现给指定手机号发含验证码的短信,用于验证手机号真实性或验证操作安全性。

一、注册、报备及设置

1、注册云片,完成 资质报备签名报备模板报备
tips:
1)报备可以让产品经理、运营等业务人员完成。
2)开发阶段,建议先关闭 IP白名单,或将服务器IP及本地IP均设置在IP白名单内。
3)为了避免开发调试中,您的手机号被系统防骚扰机制拦截,可以在 测试白名单 填写您的手机号。

二、调通短信接口

1、验证码建议使用“单条发送短信接口”

URL:https://sms.yunpian.com/v2/sms/single_send.json

访问方式:POST,接口支持https及http

参数:

参数名 类型 是否必传 是否默认开放 描述 示例
apikey String 用户唯一标识,在管理控制台获取 9b11127a9701975c734b8aee81ee3526
mobile String 接收的手机号,仅支持单号码发送; 15205201314
text String 短信内容 【云片网】您的验证码是1234
extend String 下发号码扩展号,纯数字 001
uid String 该条短信在您业务系统内的ID,如订单号或者短信发送记录流水号 10001
callback_url String 短信发送后将向这个地址推送(运营商返回的)发送报告。
如推送地址固定,建议在"数据推送与获取”做批量设置。
如后台已设置地址,且请求内也包含此参数,将以请求内地址为准
http://yourreceiveurl_address

如需使用"extend""uid"参数,可免费向客服申请。

请求示例

  • Java
  • php
  • python
  • C#

* 单条短信发送,智能匹配短信模板
 *
 * @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);//请自行使用post方式请求,可使用Apache HttpClient
}

// 以下为核心代码部分

$ch = curl_init();
// 必要参数
$apikey = "xxxxxxxxxxx"; //修改为您的apikey(https://www.yunpian.com)登录官网后获取
$mobile = "xxxxxxxxxxx"; //请用手机号代替
$text="【云片网】您的验证码是1234";
// 发送短信
$data=array('text'=>$text,'apikey'=>$apikey,'mobile'=>$mobile);
curl_setopt ($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/sms/single_send.json');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$json_data = curl_exec($ch);
//解析返回结果(json格式字符串)
$array = json_decode($json_data,true);
echo '<pre>';print_r($array);

# apikey:成功注册后登录云片官网,进入后台可查看
# text:需要使用已审核通过的模板或者默认模板
# mobile:接收的手机号,仅支持单号码发送
def send_sms(apikey, text, mobile):
#服务地址
sms_host = "sms.yunpian.com"
#端口号
port = 443
#版本号
version = "v2"
#智能匹配模板短信接口的URI
sms_send_uri = "/" + version + "/sms/single_send.json"
params = urllib.urlencode({'apikey': apikey, 'text': text, 'mobile':mobile})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPSConnection(sms_host, port=port, timeout=30)
conn.request("POST", sms_send_uri, params, headers)
response = conn.getresponse()
response_str = response.read()
conn.close()
return response_str

static string SingleSend()
{
    // 设置为您的apikey(https://www.yunpian.com可查)
    string apikey = "xxxxxxxxxxxxxxxxxxxxxxx";
    // 发送的手机号
    string mobile = "xxxxxxxxxxxxxxxxxxxxxxx";
    // 发送内容
    string text = "【云片网】您的验证码是1234";
    // 智能模板发送短信url
    string url_send_sms = "https://sms.yunpian.com/v2/sms/single_send.json";
    string data_send_sms = "apikey=" + apikey + "&mobile=" + mobile + "&text=" + text;
    // 请自行使用post方式请求
    return HttpPost(url_send_sms, data_send_sms);
}

部分返回参数

返回参数名 类型 描述
code Integer 0代表发送成功,其他code代表出错,详细见"返回值说明"页面
msg text 例如""发送成功"",或者相应错误信息
count Integer 发送成功短信的计费条数(计费条数:70个字一条,超出70个字时按每67字一条计费)
fee Double 扣费金额,单位:元,类型:双精度浮点型/double
sid Long(64位) 短信id,64位整型, 对应Java和C#的Long,不可用int解析

调用成功的返回值示例

{
    "code": 0,
    "msg": "发送成功",
    "count": 1, //成功发送的短信计费条数
    "fee": 0.05,    //扣费条数,70个字一条,超出70个字时按每67字一条计
    "unit": "RMB",  // 计费单位
    "mobile": "13200000000", // 发送手机号
    "sid": 3310228982   // 短信ID
}

2、下载、导入SDK,并配置。

目前云片提供JAVA/PHP/Python/C# 4种语言SDK、如果您的编程语言云片未提供SDK,您可以根据文档自行对接。

SDK下载地址(JAVA/PHP/Python/C#):去下载

SDK示例

  • Java
  • php
  • python
  • C#

jar包
yunpian-java-sdk.jar
log4j.jar
gson.jar
commons-logging.jar
httpclient.jar (必须4.4以上)
httpcore.jar (必须4.4以上)

代码示例

/**
 * 使用JDK发送单条短信,智能匹配短信模板
 *
 * @param apikey 成功注册后登录云片官网,进入后台可查看
 * @param text   需要使用已审核通过的模板或者默认模板
 * @param mobile 接收的手机号,仅支持单号码发送
 */
public static void testSendSms(String apikey, String mobile, String text) {
    YunpianRestClient client = new YunpianRestClient(apikey);//用apikey生成client,可作为全局静态变量
    SmsOperator smsOperator = client.getSmsOperator();//获取所需操作类
    ResultDO<SendSingleSmsInfo> result = smsOperator.singleSend(mobile, text);//发送短信,ResultDO<?>.isSuccess()判断是否成功
    System.out.println(result);
}

1、下载依赖包:https://www.yunpian.com/api2.0/document-downloadSdk.html
2、在config.php 文件内填写你的 APIKEY
3、在使用处添加以下引用: require_once('path/to/YunpianAutoload.php')
4、获取相应操作类调用api

require_once '../YunpianAutoload.php';
// 发送单条短信
$smsOperator = new SmsOperator();
$data['mobile'] = '13812345678';
$data['text'] = '【云片网】您的验证码是1234';
$result = $smsOperator->single_send($data);
print_r($result);

本SDK适用于Python2,Python3版本在开发中,敬请期待。
使用pip安装依赖:pip install yunpian-sdk-python
或者下载包进行安装:pip install yunpian-sdk-python-1.0.0.tar.gz

from yunpian.SmsOperator import SmsOperator
import sys
import json
reload(sys)
sys.setdefaultencoding('utf-8')
APIKEY = 'your apikey'
smsOperator = SmsOperator(APIKEY)
result = smsOperator.single_send({'mobile': '13812345678', 'text': '【云片网】您的验证码是1234'})
print json.dumps(result.content, ensure_ascii=False)

依赖包
Newtonsoft.Json.dll
Yunpian.dll

static void Main(string[] args)
{
    //设置apikey
    Config config = new Config("your apikey");
    Dictionary<string, string> data = new Dictionary<string, string>();
    Result result = null;
    // 发送单条短信
    SmsOperator sms = new SmsOperator(config);
    data.Clear();
    data.Add("mobile", "13812345678");
    data.Add("text", "【云片网】您的验证码是1234");
    result = sms.singleSend(data);
    Console.WriteLine(result);
}

三、实现业务逻辑

1、生成短信内容,调用发送接口,传入APIKEY、手机号、内容等参数发送短信。
短信内容需和通过审核的模板匹配上才能发送,如不匹配接口会返回报错信息,报错记录在 后台失败请求页可以看到。
如不确定内容是否匹配,后台 模板报备页有测试匹配功能。
2、如短信验证接口用于web、移动网页版,需在注册页增加图形验证码避免恶意轰炸消耗账户余额( 什么是验证码轰炸?)。 iOS及Android APP无需在注册页添加图形验证码。

四、按需开发功能

1.对短信发送状态做实时监控
如果您需要通过程序对短信的发送状态做实时监控,可以开发“推送/获取状态报告”接口。
如果只是想了解短信发送状态,无实时监控需求,"云片管理控制台-国内短信- 数据统计" 可以看到实时及历史的到达率、发送量、接口失败原因等报表。
2.短信平台/代理类客户
如果您是短信平台/代理,需要管理众多客户的签名及模板。您可能需要 “签名提交API”、 “模板管理API”、 “账户API”。 从而通过API接口轻松管理签名、模板、账户。
3.获取上行短信
如果您的业务中,需获取用户回复的上行短信,可以开发“推送回复短信API”。通过这个接口,如果用户回复了您的短信,云片会第一时间推送给您。