Java语言实现的短信接入实例,各公司大同小异
作者:网络转载 发布时间:[ 2015/8/11 10:27:48 ] 推荐标签:编程语言 测试开发技术
和几家短信平台接触过,都进行了接入测试。总体来说短信发送又快,覆盖率又全的,价格相对贵些。简易选两家分开使用,短信验证码的用一家贵的快的,普通的推广群发短信用一个便宜的。
下面显示下测试代码
1 public class HttpSMSSender {
2
3 protected final Logger logger = LoggerFactory.getLogger(getClass());
4
5 // 短信接口地址
6 private String postUrl = "http://ip:port/webservice.asmx";
7 @Autowired
8 private AppVars vars;
9
10
11 private String sname = "username"; // 提交账户
12 private String spwd = "password"; // 提交账户的密码
13
14
15
16 private String spnumber = ""; // 企业代码(扩展号,可空着)
17 private String key = "【某某公司】";
18
19 @Deprecated
20 String sdst; // 接收号码,每次只能提交1个号码
21 @Deprecated
22 String smsg; // 信息内容,通常为70汉字以内,具体由平台内部决定
23
24 /**
25 * @param phoneNum
26 * 手机号码
27 * @param msg
28 * 短信内容
29 * @return 成功返回0
30 */
31 public static void main(String[] args) {
32 HttpSMSSender sms = new HttpSMSSender();
33 // String msg = "您正通过" + vars2.websiteNameCn
34 // + "提现至银行卡(尾号0908),金额90元,请确认无误后方可输入短信验证码:289002。如非本人操作,请拨打客服电话"
35 // + vars2.servicePhone;
36 String msg = "您好!用户哈哈,您好!您" + "平台的手机绑定验证码为:989887,请确认。";
37 sms.send("186****5286", msg);
38 }
39
40 public int send(String phoneNum, String msg) {
41 StringBuilder postData = new StringBuilder();
42
43 try {
44
45 // sb
46 String pwdd = MD5.EncoderByMd5(sname + spwd);
47 postData.append("sn").append("=").append(sname).append("&");
48 postData.append("pwd").append("=").append(pwdd).append("&");
49 postData.append("Ext").append("=").append("").append("&");
50 postData.append("stime").append("=").append("").append("&");
51 postData.append("mobile").append("=").append(phoneNum).append("&");
52 postData.append("Rrid").append("=").append("").append("&");
53 postData.append("Content").append("=")
54 .append(java.net.URLEncoder.encode(msg + key, "GBK"));
55 return send(postData.toString());
56 } catch (Exception x) {
57 logger.error("发送短信时发生异常", x);
58 return -1;
59 }
60 }
61
62 private int send(String postData) throws UnsupportedEncodingException,
63 IOException, ParserConfigurationException, SAXException {
64 logger.info("请求短信接口内容[{}]", postData);
65 HttpURLConnection conn = null;
66 try {
67 final URL url = new URL(postUrl + "?" + postData);
68 conn = (HttpURLConnection) url.openConnection();
69 conn.setRequestMethod("GET");
70 conn.connect();
71
72
73 // 获取响应状态
74 if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
75 logger.error("连接短信服务器失败");
76 return -1;
77 }
78
79 InputStream is = conn.getInputStream();
80 ByteArrayOutputStream baos = new ByteArrayOutputStream();
81 int i = -1;
82 while ((i = is.read()) != -1) {
83 baos.write(i);
84 }
85 logger.info("请求短信接口返回内容[{}]", baos.toString());
86 int resultCode = -1;
87
88 try {
89 resultCode = 0;
90
91 } catch (Exception e) {
92 resultCode = -1;
93 // TODO: handle exception
94 }
95
96 return resultCode;
97 } finally {
98 if (conn != null) {
99 conn.disconnect();
100 }
101 }
102 }
103
104 private int parseResultCode(InputStream is)
105 throws ParserConfigurationException, SAXException, IOException {
106 final Map<String, String> map = new HashMap<String, String>();
107 SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
108 saxParser.parse(is, new DefaultHandler() {
109
110 private String tag = "";
111
112 public void endElement(String uri, String localName, String qName)
113 throws SAXException {
114 tag = "";
115 }
116
117 public void startElement(String uri, String localName,
118 String qName, Attributes attributes) throws SAXException {
119 tag = qName;
120 }
121
122 public void characters(char[] ch, int start, int length)
123 throws SAXException {
124 if (!tag.isEmpty()) {
125 map.put(tag, new String(ch, start, length));
126 }
127 }
128
129 });
130 logger.info("短信接口返回码[{}]描述[{}]", map.get("State"), map.get("MsgState"));
131 return Integer.valueOf(map.get("State"));
132 }
133
134 public String getPostUrl() {
135 return postUrl;
136 }
137
138 public String getSname() {
139 return sname;
140 }
141
142 public String getSpwd() {
143 return spwd;
144 }
145
146 public void setPostUrl(String postUrl) {
147 this.postUrl = postUrl;
148 }
149
150 public void setSname(String sname) {
151 this.sname = sname;
152 }
153
154 public void setSpwd(String spwd) {
155 this.spwd = spwd;
156 }
157 }
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11