JAVA调用梦网云通讯平台API实现短信发送
JAVA调用梦网云通讯平台API实现短信发送
调用通讯平台API发送短信示意图
调用通讯平台API发送短信的示意图如下(根据我的理解简单画的,如果有不对的地方,欢迎留言指出)。
开发者首先设定必需的参数,包括 请求的url,请求方式,post数据 等等,发送出一个http请求;通讯平台接收到http请求后,解析请求体中的各项参数,并校验各项参数是否合法,如果参数合法,则将短信转发给收信人,最后将发送状态信息返回给接口调用方。
注册通讯平台账号
要调用通讯平台的API,首先需要在相应的通讯平台注册一个账号。本文以梦网云通讯平台为例。账号注册完成后,平台会赠送10元话费,如果仅仅做测试的话,这个钱足够了。
这个账号和密码仅仅是用于登录梦网云平台的账号和密码,或者说,是用于充值的账号和密码,与后面提到的用于发送短信的账号密码无关。
账号注册完成后,点击 业务中心 查看平台分配的用于短信发送的 发送账号 与 密码和APIKey ,当然还有 RestUrl ,其中,密码和APIKey是在点击获取后通过短信的方式发送到手机上的。
这个时候还不能发送短信,为什么呢?因为任何通讯平台都不允许随意发送短信,发送内容要符合要求才行。点击 信安中心 ,这里有很多短信预设模板,基本上会满足大多数的短信发送需求,如果没有满足需求的模板,可以进行模板定制,不过模板定制化需要上传证件进行认证。这里我们选择一个工资入账的模板开心开心。
模拟发送短信的http请求
一切准备就绪,现在可以发送短信了吗?做个测试先~
现在需要一个可以模拟发送http请求的工具,这样的工具有很多,如fiddler,postman,本文以 bejson 为例。
填好必要的参数后,发送请求数据,如果返回的请求结果中 result等于0,则代表短信发送成功。
其中post数据中,各项参数说明见下表:
参数 | 类型 | 是否必须 | 描述 | 示例 |
---|---|---|---|---|
userid | string | 是 |
用户账号,长度最大6个字符,统一大写 。
|
示例: J10003 |
pwd | string | 是 |
用户密码,定长小写32位字符 。
|
示例: 密码明文模式: 密码: 111111 密码加密模式: 账号: J10003 密码: 111111 固定字符串: 00000000 时间戳: 0803192020 MD5加密之前的对应字符串: J10003000000001111110803192020 MD5加密之后的密码字符串: 26dad7f364507df18f3841cc9c4ff94d |
mobile | string | 是 |
短信接收的手机号, 多个手机号请用英文逗号分隔,最大1000个号码 。
|
示例: 138xxxxxxxx,130xxxxxxxx |
content | string | 是 | 短信内容:最大支持1000个字(含签名),发送时请预留至少10个字符的签名长度,一个字母或一个汉字都视为一个字符。 |
示例: 短信内容:“验证码:6666,打死都不要告诉别人哦!” 短信内容进行urlencode编码后: %d1%e9%d6%a4%c2%eb%a3%ba6666%a3%ac%b4%f2%cb%c0%b6%bc%b2%bb%d2%aa%b8%e6%cb%df%b1%f0%c8%cb%c5%b6%a3%a1 |
timestamp | string | 否 |
时间戳,24小时制格式:MMDDHHMMSS, 即月日时分秒 ,定长10位,月、日、时、分、秒每段不足2位时左补0,密码选择MD5加密方式时必填该参数,密码选择明文方式时则不用填写
|
示例:0803192020 |
编码实现
经过之前的准备工作,现在可以编码实现了。而这个实现过程,其实就是将上一步中 模拟发送短信的http请求
由模拟器实现改为编码实现。
与模拟器所填写参数对应的JAVA编码实现如下:
public class CHttpPost {// http请求失败private static int ERROR_310099 = -310099;// 连接超时时间(毫秒) 10秒private static int HTTP_CONNECT_TIMEOUT = 10 * 1000;// 从连接池获取connection的超时时间 1秒private static int HTTP_CONNECTION_REQUEST_TIMEOUT = 1 * 1000;// 响应超时时间(毫秒) 10秒private static int HTTP_SOCKET_TIMEOUT = 10 * 1000;// 请求路径public static String REQUEST_PATH = "/sms/v2/std/";public String singleSend(Message message, String ipAddress, String ipProxy, String portProxy) {String result = String.valueOf(ERROR_310099);try {String urlSingleSend = "http://" + ipAddress + REQUEST_PATH + "single_send";result = send(message, urlSingleSend, ipProxy, portProxy);} catch (Exception e) {e.printStackTrace();}return result;}public String batchSend(Message message, String ipAddress, String ipProxy, String portProxy) {String result = String.valueOf(ERROR_310099);try {String urlBatchSend = "http://" + ipAddress + REQUEST_PATH + "batch_send";result = send(message, urlBatchSend, ipProxy, portProxy);} catch (Exception e) {e.printStackTrace();}return result;}private String send(Message message, String httpUrl, String ipProxy, String portProxy) {String result = String.valueOf(ERROR_310099);try {// 对密码进行加密String encryptPwd = encryptPwd(message.getUserid(), message.getPwd(), message.getTimestamp());// 设置加密后的密码message.setPwd(encryptPwd);Field[] fields = message.getClass().getDeclaredFields();JSONObject requestBody = new JSONObject();// 循环拼接请求参数for (int i = 0; i < fields.length; i++) {String fieldName = fields[i].getName();String fieldNameUpper = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);Method getMethod = message.getClass().getMethod("get" + fieldNameUpper);Object value = getMethod.invoke(message);if (value != null) {//拼接请求参数requestBody.put(fieldName, value);}}// 设定编码方式StringEntity stringEntity = new StringEntity(requestBody.toString(), StandardCharsets.UTF_8);// 定义请求头HttpPost httpPost = new HttpPost(httpUrl);httpPost.setHeader("Content-Type", "application/json");// 定义请求体httpPost.setEntity(stringEntity);// 创建连接CloseableHttpClient httpClient = HttpClients.createDefault();HttpHost proxy = null;if (ipProxy != null && portProxy != null) {// 设置代理proxy = new HttpHost(ipProxy, Integer.parseInt(portProxy), "http");}// 设置请求超时时间RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy).setConnectTimeout(HTTP_CONNECT_TIMEOUT).setConnectionRequestTimeout(HTTP_CONNECTION_REQUEST_TIMEOUT).setSocketTimeout(HTTP_SOCKET_TIMEOUT).build(); httpPost.setConfig(requestConfig);HttpEntity entity = null;HttpResponse httpResponse = null;try {// 向网关请求httpResponse = httpClient.execute(httpPost);// 若状态码为200,则代表请求成功if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == 200) {//获取响应的实体entity = httpResponse.getEntity();result = EntityUtils.toString(entity);} else {// 设置错误码result = String.valueOf(ERROR_310099);System.out.println("请求失败:" + httpResponse.getStatusLine().toString());}} catch (Exception e) {result = String.valueOf(ERROR_310099);e.printStackTrace();}} catch (Exception e) {result = String.valueOf(ERROR_310099);e.printStackTrace();}return result;}public String encryptPwd(String userid, String pwd, String timestamp) {// 加密后的字符串String encryptPwd = null;try {String passwordStr = userid.toUpperCase() + "00000000" + pwd + timestamp;// 对密码进行加密encryptPwd = getMD5Str(passwordStr);} catch (Exception e) {e.printStackTrace();}return encryptPwd;}private static String getMD5Str(String str) {MessageDigest messageDigest = null;// 加密前的准备try {messageDigest = MessageDigest.getInstance("MD5");messageDigest.reset();messageDigest.update(str.getBytes("UTF-8"));}catch (NoSuchAlgorithmException e) {e.printStackTrace();//初始化加密类失败,返回null。return null;}catch (UnsupportedEncodingException e) {e.printStackTrace();//初始化加密类失败,返回null。return null;}byte[] byteArray = messageDigest.digest();// 加密后的字符串StringBuffer md5StrBuff = new StringBuffer();for (int i = 0; i < byteArray.length; i++) {if (Integer.toHexString(0xFF & byteArray[i]).length() == 1){md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));} else {md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));}}return md5StrBuff.toString();}
}
最后附上完整的Demo链接https://download.csdn.net/download/lanshanzhuyao/11094599
JAVA调用梦网云通讯平台API实现短信发送相关推荐
- 梦网云通讯平台API单条短信发送接口single_send说明POST请求实例
urlencode userid=J10003&pwd=26dad7f364507df18f3841cc9c4ff94d&mobile=13800138000&content= ...
- 梦网云通讯平台查询余额API接口get_balance
请求URL http://ip:port/sms/v2/std/get_balance 请求方式 POST 请求参数说明 参数 类型 是否必须 描述 示例 userid string 是 用户账号:长 ...
- 梦网云通讯获取API上行接口get_mo说明POST实例
Post请求示例 urlencode userid=J10003&pwd=26dad7f364507df18f3841cc9c4ff94d×tamp=0803192020&a ...
- 梦网云通讯API接口调用错误代码表
返回错误代码 错误说明 -100001 鉴权不通过,请检查账号,密码,时间戳,固定串,以及MD5算法是否按照文档要求进行设置 -100002 用户多次鉴权不通过,请检查帐号,密码,时间戳,固定串,以及 ...
- Java调用容联云通讯短信验证码API接口示例
1.注册账号 https://www.yuntongxun.com/doc.html 注册后点击控制台可以看到你的信息 2.添加测试号码 3.打开文档>Rest API>短信 下载Java ...
- 梦网云通讯获取状态报告API接口get_rpt说明POST请求示例
Post请求示例 urlencode userid=J10003&pwd=26dad7f364507df18f3841cc9c4ff94d×tamp=0803192020&a ...
- 梦网云通讯API接口匹配状态报告规则
1.单条发送接口 custid匹配方法: 短短信时使用下行请求包里的custid+mobile进行匹配: 长短信时使用下行请求包里的custid+mobile+pknum进行匹配: msgid匹配 ...
- 梦网云通讯个性化群发API接口multi_send说明POST实例
Post请求示例 urlencode userid=J10003&pwd=26dad7f364507df18f3841cc9c4ff94d×tamp=0803192020&a ...
- Golang梦网云短信对接
Golang调用梦网云通讯平台API实现短信发送 调用通讯平台API地址 其中post数据中,各项参数说明见下表: 编码实现 定义入参结构 // SendSmsMoudle 短信发送请求参数 type ...
- SUBMAIL云通讯平台——如何避免邮件进入垃圾箱的方法
对于现在的大多数企业来说,借助第三方 邮件平台来解决日常的触发邮件发送.营销邮件群发.以及邮件跟踪等需求是最为方便快捷的方法.无论是线上发送还是对接自己的API发送都可以快速完成.但是近期在我们SUB ...
最新文章
- IOS的钥匙串,确保本地隐私数据的安全
- 同步服务老是报错_SQL2005的维护计划做异地备份,采用另一台服务器设置共享文件夹的方式同步。但是一直报错,本地备份可以...
- 推荐一款好工具:16进制字节搜索工具 C#的效率
- web模块化规范和实现
- ELK 中的elasticsearch 集群的部署
- php168为什么抛弃重新开发x1,在今天518这个特别的日子里,我们经过将近一年来,日以继夜努力研发出的X1正式对外公开发布!...
- /dev/sda2占用100%、磁盘占用100%的怎么解决?
- 关于使用cadence建pad
- 洛谷1048 采药(01背包)
- 第5条:用枚举表示状态、选项、状态码
- MIT6.830 lab1 SimpleDb 实验报告
- 6 Linux之bash环境配置
- java分布式缓存memcached_分布式缓存系统Memcached学习心得
- 用计算机改手机电量,三分钟更换iPhone 6虚标电池,老手机又焕发青春了
- 电气技术与计算机技术结合,探析计算机与电气自动化技术有机结合.doc
- 解决kali linux 和 win10 双系统时间不一致问题
- 沉浸式体验参加网络安全培训班,学习过程详细到底!
- 个性化lightswitch登录屏幕(附源码)
- Mac电脑的强大压缩工具——FastZip,加密压缩。
- Unity WebView 插件⭐️(十三)特定模块 iOS网页视图—iOSWebViewWebView
热门文章
- AutoJs 4.1.1 实战教程
- C语言2019软件,c语言模拟编程学习软件v2019 最新版
- 计算机职业素养论文1500字,提升道德素养论文_职业素养论文2000字_工程师职业素养结课论文1500字...
- 打印机服务器不支持1020,HP1020打印机驱动安装不上的解决办法
- 数据结构期末考试试题及答案
- 使用jsp实现留言板功能
- 目前有哪些比较好用的CRM客户关系管理系统?
- Visual Studio2010打开界面文件时报错:“未在此计算机上注册activex控件{648A5600-2C6E-101B-82B6-000000000014}”
- 英文 WINDOWS XP 专业 精简版
- windows下IOS证书制作,IOS证书在线制作