华为云中短信服务

创建  SendMsg :

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSON;/*** maven 依赖配置*     <dependency>*     <groupId>org.apache.httpcomponents</groupId>*     <artifactId>fluent-hc</artifactId>*     <version>4.5.5</version>*     </dependency>*/
public class SendMsg {// 用于格式化鉴权头域,给“X-WSSE”参数赋值private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"";// 用于格式化鉴权头域,给“Authorization”参数赋值private static final String AUTH_HEADER_VALUE = "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\"";/** public static void main(String[] args) throws Exception {* * System.out.println(sendAllMsg("", "+8613716888888",* "",* "[\"先生\",\"2018/09/19\",\"14:30\",\"100989\",\"13716888888\"]")); }*/public static String sendAllMsg(String sender, String receiver, String templateId, String templateParas)throws ClientProtocolException, UnsupportedEncodingException, IOException {// 开发准备:APP接入地址 + 接口访问URIString url = "https://api.rtc.huaweicloud.com:10443/sms/batchSendSms/v1";// 开发准备:APP_KeyString appKey = "";// 开发准备:APP_SecretString appSecret = "";// 开发准备:签名通道号// String sender = "";// 填写短信接收人号码,多个号码之间用英文逗号分隔// String receiver = "+8613716888888,+8618606666666";// 状态报告接收地址,为空或者不填表示不接收状态报告String statusCallBack = "";// 开发准备:模板ID// String templateId = "";// 模板变量请务必根据实际情况修改,查看更多模板变量规则// 如模板内容为“您有${NUM_2}件快递请到${TXT_32}领取”时,templateParas可填写为[\"3\",\"人民公园正门\"]// 双变量示例:String templateParas = "[\"3\",\"人民公园正门\"]";// String templateParas =// "[\"周先生\",\"2018/09/19\",\"14:30\",\"100819\",\"18606026926\"]";// 请求BodyString body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack);System.out.println("body is " + body);// 请求Headers中的X-WSSE参数值String wsseHeader = buildWsseHeader(appKey, appSecret);System.out.println("wsse header is " + wsseHeader);// 如果JDK版本是1.8,可使用如下代码CloseableHttpClient client;HttpResponse response = null;try {client = HttpClients.custom().setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, (x509CertChain, authType) -> true).build()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();response = client.execute(RequestBuilder.create("POST").setUri(url).addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded").addHeader(HttpHeaders.AUTHORIZATION, AUTH_HEADER_VALUE).addHeader("X-WSSE", wsseHeader).setEntity(new StringEntity(body)).build());} catch (KeyManagementException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (KeyStoreException e) {// TODO Auto-generated catch blocke.printStackTrace();}// EntityUtils.toString(response.getEntity()));String responseEntity = EntityUtils.toString(response.getEntity());// 判断是否发送成功,发送成功返回trueSystem.out.println(responseEntity);String code = JSON.parseObject(responseEntity).getString("code");String description = JSON.parseObject(responseEntity).getString("description");/** System.out.println(code); System.out.println(description);*/if (code.equals("000000") && description.equals("Success")) {return "success";}return "error";}static String buildRequestBody(String sender, String receiver, String templateId, String templateParas,String statusCallbackUrl) {List<NameValuePair> keyValues = new ArrayList<NameValuePair>();keyValues.add(new BasicNameValuePair("from", sender));keyValues.add(new BasicNameValuePair("to", receiver));keyValues.add(new BasicNameValuePair("templateId", templateId));keyValues.add(new BasicNameValuePair("templateParas", templateParas));keyValues.add(new BasicNameValuePair("statusCallback", statusCallbackUrl));// 如果JDK版本是1.6,可使用:URLEncodedUtils.format(keyValues,// Charset.forName("UTF-8"));return URLEncodedUtils.format(keyValues, StandardCharsets.UTF_8);}static String buildWsseHeader(String appKey, String appSecret) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");String time = sdf.format(new Date());String nonce = UUID.randomUUID().toString().replace("-", "");byte[] passwordDigest = DigestUtils.sha256(nonce + time + appSecret);String hexDigest = Hex.encodeHexString(passwordDigest);String passwordDigestBase64Str = Base64.encodeBase64String(hexDigest.getBytes(Charset.forName("utf-8")));return String.format(WSSE_HEADER_FORMAT, appKey, passwordDigestBase64Str, nonce, time);}
}

调用函数发送短信:

// sender  签名通道号
// mobiles 电话号码
// teid    模板ID
// params  模板参数
String  re = Send.sendAllMsg(sender, mobiles, teid, params);

华为云,短信通信,群发推广运营短信,Java版相关推荐

  1. 【华为云技术分享】打卡APIG服务专享版,打造全栈API治理方案

    伴随企业的数字化转型跟IT架构演进,越来越多的企业&组织选择以API的方式实现能力的开放跟通讯,这部分也成了系统集成的交界点.通过三组数据来看整体趋势 2017年,有50%的B2B商业合作将通 ...

  2. 华为云鲲鹏服务器部署文档-修正版-CentOS+java微服务开发

    华为云鲲鹏服务器部署文档 河南中电高科计算机技术有限公司 http://www.ceht.com.cn 2020.5.12 适用于java微服务开发运行基础软件环境部署,实测通过. CentOS 7. ...

  3. 通过106短信平台群发的营销短信内容如何编辑

    在CRM客户关系管理的众多手段里面,短信一直有着举足轻重的地位.假如能利用好短信的即时性.抵达率等优势,加上不错的案牍,就能够收获不错的营销作用,但不少商家发送的短信让用户非常反感,乃至被列入废物短信 ...

  4. 手机短信备份文件sms.vmsg文件解析(Java版)

    sms.vmsg文件是可以直接用Windows记事本打开的,打开后看到的内容格式如下 BEGIN:VMSG VERSION:1.1 BEGIN:VCARD TEL:10010 END:VCARD BE ...

  5. 打造建筑行业数字化新标杆: 软通动力联合华为云AI+RPA助力中铁十一局智能化升级

    "十四五"规划纲要提出"迎接数字时代,激活数据要素潜能,推进网络强国建设,加快建设数字经济.数字社会.数字政府,以数字化转型整体驱动生产方式.生活方式和治理方式变革&qu ...

  6. 提升软件质量?为什么不试试华为云CodeArts Check

    1996年,欧洲最新的无人卫星发射火箭阿丽亚娜5号在首次发射后仅仅36秒,工程师就不得不按下了自毁按钮. 事后经分析查明,由于它重用了其前身阿丽亚娜4号的系统软件,发动机遭遇了之前没有被发现的漏洞,系 ...

  7. 【SAP解决方案干货合集】满满的干货,是您了解华为云SAP解决方案的必备利器

    [SAP解决方案干货合集]满满的干货,是您了解华为云SAP解决方案的必备利器 https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&am ...

  8. 【全球软件大会】华为前端工程师分享:华为云官网的智能化实践

    摘要:在第七届全球软件大会上,华为软件开发工程师禹继波和开发者聊了聊华为云官网的智能化实践, 主要集中在内容运营的内容生产.内容解析.内容质检.内容分发.内容消费和用户反馈等6个流程,以及在此过程中遇 ...

  9. 【云图说合集】阅识风云之云图说系列,是您了解华为云的必备利器

    类别 服务名 云图说链接 引言 引言 [云图说]重磅开启:天啦噜,毕加索都干不出这种事 [云图说]第100期   元旦快乐!陪您跨年的华为云"云图说",了解一下 开篇 华为云 [云 ...

最新文章

  1. 如何设计一个通用的权限管理系统
  2. NLTK命名实体识别NER
  3. 第十七届智能车竞赛个分赛区承办学校
  4. Java方法案例--比较两个值是否相等
  5. 百度AI原生云实践: 基于容器云打造 AI 开发基础设施
  6. 原生sql 查询返回一个实体_python连接SQLServer执行给定的查询SQL语句,并返回结果数据...
  7. kademlia java_分布式哈希表原理与实现(Python版和Java版)
  8. SAP Spartacus B2cStorefrontModule里提供的默认配置
  9. 新浪微博iOS版SDK“宝玉XP”框架学习笔记
  10. 华为mstp多生成树配置_网络工程师(30):多实例生成树如何计算
  11. 怎么能让宝贝快点入睡?
  12. Android计算器输入错误纠正,Android计算器低级错误?都是二进制惹的祸!
  13. 如何打开windows的服务管理
  14. 【pycharm】复制粘贴快捷键失效
  15. JES专栏:Portlets的国际化和本地化(eNews 第二十八期/2007.09)
  16. 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
  17. 2022-2027年中国吉他行业市场调研及未来发展趋势预测报告
  18. IDEA中Git暂存代码暂存区的使用
  19. 深入理解java虚拟机之——垃圾回收(垃圾判断,垃圾收集算法,垃圾收集器)
  20. 一行Python都可以做什么?这35行看懂十行就算入门,全能看懂必是高手

热门文章

  1. 买了个新键盘,雷柏V56,也没有个说明书,只好自己写个了。
  2. Win7共享设置(xp访问win7的共享)
  3. 磷酸铁锂离子蓄电池的特点
  4. 漫画趣解Flink实时数仓
  5. Cubieboard的U-boot以太网驱动移植
  6. 【观察】谁是中国容器软件市场TOP厂商?权威研究机构IDC发布最新报告
  7. ai背景合成_ai全自动视频剪辑软件,每天批量制作800条原创视频
  8. 赛扬处理器_英特尔发布11代奔腾、赛扬处理器 均支持AVX指令集
  9. 物联网LoRa系列-24:LoRa终端--PingPong应用程序常见问题解析
  10. 信息化领导小组关于我国电子政务建设指导意见