如何发送国际短信


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


一、注册、报备及设置


注册云片,完成资质报备模板报备
tips:


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


二、调通国际短信接口


方法一:直接使用 API


请求


URL:https://sms.yunpian.com/v2/sms/single_send.json
访问方式:POST
http 支持:支持 https 与 http 两种访问,建议使用 https


参数:

参数名类型是否必传是否默认开放描述示例
apikeyString用户唯一标识,在管理控制台获取9b11127a9701975c734b8aee81ee3526
mobileString接收的手机号,仅支持单号码发送; 国际号码需包含国际地区前缀号码+93701234567
textString已审核短信模板【云片网】您的验证码是 1234
extendString下发号码扩展号,纯数字001
uidString该条短信在您业务系统内的 ID,如订单号或者短信发送记录流水号10001
callback_urlString短信发送后将向这个地址推送(运营商返回的)状态报告。 如推送地址固定,建议在"数据推送与获取”做批量设置。 如后台已设置地址,且请求内也包含此参数,将以请求内地址为准http://your_receive_url\_address


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


请求示例


/**
*单条短信发送,智能匹配短信模板
*
* @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
}


响应

名称类型描述
codeinteger0 代表发送成功,其他 code 代表出错,详细见"返回值说明"页面
msgtext例如""发送成功"",或者相应错误信息
countinteger发送成功短信的计费条数(计费条数:70 个字一条,超出 70 个字时按每 67 字一条计费)
feedouble扣费金额,单位:元,类型:双精度浮点型/double
unitstring计费单位;例如:“RMB”
mobilestring发送手机号
sidlong(64 位)短信 id,64 位整型, 对应 Java 和 C#的 long,不可用 int 解析


Json 返回示例


{
  "code": 0,
  "msg": "发送成功",
  "count": 1,
  "fee": 0.05,
  "unit": "RMB",
  "mobile": "+93701234567",
  "sid": 3310228982
}


特别注意: 国际短信接口每次调用只能发送一条短信,如需发送多条,请多次调用。


方法二:下载、导入 SDK,并配置


目前云片提供 JAVA/PHP/Python/C#/Golang 5 种语言 SDK、如果您的编程语言云片未提供 SDK,您可以根据文档自行对接。
SDK 下载地址(JAVA/PHP/Python/C#/GOLANG):去下载


//初始化clnt,使用单例方式
YunpianClient clnt = new YunpianClient("apikey").init();

//发送短信API
Map<String, String> param = clnt.newParam(2);
param.put(YunpianClient.MOBILE, "+1********");
param.put(YunpianClient.TEXT, "【云片网】您的验证码是1234");
Result<SmsSingleSend> r = clnt.sms().single_send(param);
//获取返回结果,返回码:r.getCode(),返回码描述:r.getMsg(),API结果:r.getData(),其他说明:r.getDetail(),调用异常:r.getThrowable()

//账户:clnt.user().* 签名:clnt.sign().* 模版:clnt.tpl().* 短信:clnt.sms().* 语音:clnt.voice().* 流量:clnt.flow().* 隐私通话:clnt.call().*

//释放clnt
clnt.close()


三、实现业务逻辑


调用接口传入参数


  1. 短信内容需和通过审核的模板匹配上才能发送,如不匹配接口会返回报错信息,报错记录在后台失败请求页可以看到。
  1. 传入的手机号(mobile 参数)会自动格式化到 E.164 格式,可能会造成传入 mobile 参数跟后续的状态报告中的号码不一致。E.164 格式说明,参见: https://en.wikipedia.org/wiki/E.164


四、按需开发功能


  1. 对短信发送状态做实时监控
    如果您需要通过程序对短信的发送状态做实时监控,可以开发“推送/获取状态报告”接口。
  1. 国外地区使用海外服务器
    如海外用户可以调用海外服务器地址us.yunpian.com,获得更快的请求和处理速度。例如使用短信接口时,将sms.yunpian.com替换为us.yunpian.com即可。