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

短信发送 专栏收录该内容
1 篇文章 0 订阅


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 java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.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和smsKey
public static String smsUser="smscode";
public static String smsKey="5ffZfUZrsCURcL71uMtSbMn7XnjPaPvm";
//发送方法
public static String send(){
String url = "http://www.sendcloud.net/smsapi/send";
// 填充参数
Map<String, String> params = new HashMap<String, String>();
params.put("smsUser", smsUser);
params.put("templateId", "4866"); //调用创建好的模板id
params.put("msgType", "0"); //0表示短信, 1表示彩信,2表示国际短信, 默认值为0
params.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\":\"2017-08-29xx\"}");

// 对参数进行排序
Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String arg0, String arg1) {
// 忽略大小写
return arg0.compareToIgnoreCase(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才能创建成功;

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


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



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

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

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

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


  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值