1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何使用代码调用API接口发送短信?(以SendCloud为例)

如何使用代码调用API接口发送短信?(以SendCloud为例)

时间:2019-02-07 02:40:34

相关推荐

如何使用代码调用API接口发送短信?(以SendCloud为例)

1.创建相关参数

首先发送短信,需要创建

SMS_USER 与 SMS_KEY短信模板签名

①SMS_USER 与 SMS_KEY

SMS_USER是调用接口发信时候的账号

用户可以通过【短信语音】-【发送设置】-【发送授权】来创建 SMS_USER, 同时 SendCloud 会自动生成对应的 SMS_KEY. 如下图所示:

②短信模板

短信模板, 用户在发送短信之前,必须在前台页面编辑短信内容, 并提交审核. 运营审核通过后, 通过模板的 ID 调用发送.

③签名

由于短信发送的特殊性, 以及相关的 ISP 机构的审查制度, 短信内容中必须含有能说明发送者身份的签名. 目前, SendCloud 支持在编辑短信模板时添加签名, 并设置签名位置(目前只支持签名在短信尾部).

注意: 短信模板必须含有「签名」, 否则不能通过审核. 目前用户只能拥有1个签名.

创建签名并提交运营审核,如下图所示:

在模板管理中选择一个模板预览,发信模板含有签名,如下图所示:

2、下载相关代码示例,调用并发送

以上准备工作做完后,在 SendCloud 官方文档(SendCloud 文档中心 - SendCloud 文档中心)-短信api-代码示例,下载相应代码进行调用发送,

这里我选择java示例-短信发送_4.2代码示例,导入自己的java运行环境eclipse中,按照官网的配置依赖进行配置运行环境;

package com.smsSend2;import java.util.ArrayList;import parator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.TreeMap;import mons.codec.digest.DigestUtils;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.params.CoreConnectionPNames;import org.apache.http.util.EntityUtils;import org.json.JSONObject;/*** Hello world!**/public class App{//配置smsUser和smsKeypublic static String smsUser="smscode";public static String smsKey="5ffZfUZrsCURcL71uMtSbMn7XnjPaPvm";//发送方法public static String send(){String url = "/smsapi/send";// 填充参数Map<String, String> params = new HashMap<String, String>();params.put("smsUser", smsUser);params.put("templateId", "4866"); //调用创建好的模板idparams.put("msgType", "0"); //0表示短信, 1表示彩信,2表示国际短信, 默认值为0params.put("phone", "1881234789"); //收信人手机号params.put("vars", "{\"%code%\":\"123456\"}");//替换短信模板的%code%变量//params.put("phone", "1881234789,1881234789,13111111111,13111111111,13111111111,1884561232,1884561789,1888869126,1887891234,1887894561,1883478159,1893478159,1591234789,1591234123,1591234423,1591234421,1594561232,1594561789,1598869126,1597891234,1597894561,1593478159,1897113829,15910307622");//params.put("vars", "{\"code\":\"中文\",\"appointmentPhone\":\"-08-29xx\"}");// 对参数进行排序Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {public int compare(String arg0, String arg1) {// 忽略大小写return pareToIgnoreCase(arg1);}});sortedMap.putAll(params);// 计算签名StringBuilder sb = new StringBuilder();sb.append(smsKey).append("&");for (String s : sortedMap.keySet()) {sb.append(String.format("%s=%s&", s, sortedMap.get(s)));}sb.append(smsKey);System.out.println("待签名的字符串:"+sb.toString());String sig = DigestUtils.md5Hex(sb.toString());System.out.println("signature:"+DigestUtils.md5Hex(sb.toString()));// 将所有参数和签名添加到post请求参数数组里List<NameValuePair> postparams = new ArrayList<NameValuePair>();for (String s : sortedMap.keySet()) {postparams.add(new BasicNameValuePair(s, sortedMap.get(s)));}postparams.add(new BasicNameValuePair("signature", sig));System.out.println("请求参数:"+postparams);HttpPost httpPost = new HttpPost(url);try {httpPost.setEntity(new UrlEncodedFormEntity(postparams, "utf8"));DefaultHttpClient httpclient = new DefaultHttpClient();httpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);httpclient.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 100000);HttpResponse response = httpclient.execute(httpPost);HttpEntity entity = response.getEntity();//EntityUtils.consume(entity);System.out.println(EntityUtils.toString(response.getEntity()));EntityUtils.consume(entity);} catch (Exception e) {System.out.println(e.toString());} finally {httpPost.releaseConnection();}return null;}public static void main(String[] args) {//调用send方法send();}}

注:此代码仅供参考,仅展现简单的发送示例,具体发送(如发送参数的组装等)及其他接口,用户可自行开发 。(详情参考官方api)

在eclipse-右键-Run As-java application,运行上述代码,SendCloud接口返回请求成功,并返回smsIds,smsIds是唯一的,对应每个请求成功的收信人手机号;

在SendCloud-投递回应,可根据手机号搜索,查询短信下发是否成功;

同时如果开发者不想手动查看短信是否下发成功,想要SendCloud主动通知用户或者提供相关接口来查询,SendCloud提供了两种方式实现:

1.SMSHOOK

用户在发送设置-创建smshook,设置触发事件(请求、送达等事件)及供SendCloud回调的url,

此 HTTP 服务能够正确响应 get | post 请求, 并且保证返回的 HTTP 状态码 为 200.smshook才能创建成功;

此处用测试,能够正常响应200,

也可以在浏览器访问,按下F12,打开开发者工具-network查看http状态码是否为200:

当用户请求成功-SendCloud下发运营商送达成功-触发smshook事件,smshook推送数据到创建好url服务上,用户收到数据, 解析出事件和数据, 做后续的处理,详情请参考:规则 - SendCloud 文档中心 - SendCloud 文档中心

2、通过接口查询短信投递状态

用户可以主动调用 SendCloud 的接口来获取短信下发状态:

投递回应 - SendCloud 文档中心 - SendCloud 文档中心

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。