最近由于公司的业务拓展,需要给国外用户发送国际短信,像西班牙、葡萄牙、意大利这些国家都要发,还有中国的香港、澳门、台湾(港澳台)这些地区也要发,不过现在已经有许多公司提供国际短信的业务了,之前使用过云片的验证码业务,顺便看到他们也有国际短信的业务,并且更重要的是,不需要修改任何代码,只要添加下国际短信模板,就可以直接使用之前的代码继续发送国际短信,简直太方便了。
废话不多说,直接上代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
/** * Created by bingone on 15/12/16. */ import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.net.URISyntaxException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 短信http接口的java代码调用示例 * 基于Apache HttpClient 4.3 * * @author songchao * @since 2015-04-03 */ public class JavaSmsApi { //查账户信息的http地址 private static String URI_GET_USER_INFO = "https://sms.yunpian.com/v2/user/get.json" ; //智能匹配模板发送接口的http地址 private static String URI_SEND_SMS = "https://sms.yunpian.com/v2/sms/single_send.json" ; //模板发送接口的http地址 private static String URI_TPL_SEND_SMS = "https://sms.yunpian.com/v2/sms/tpl_single_send.json" ; //发送语音验证码接口的http地址 private static String URI_SEND_VOICE = "https://voice.yunpian.com/v2/voice/send.json" ; //绑定主叫、被叫关系的接口http地址 private static String URI_SEND_BIND = "https://call.yunpian.com/v2/call/bind.json" ; //解绑主叫、被叫关系的接口http地址 private static String URI_SEND_UNBIND = "https://call.yunpian.com/v2/call/unbind.json" ; //编码格式。发送编码格式统一用UTF-8 private static String ENCODING = "UTF-8" ; public static void main(String[] args) throws IOException, URISyntaxException { //修改为您的apikey.apikey可在官网(http://www.yunpian.com)登录后获取 String apikey = "xxxxxxxxxxxxxxxxxxxxx" ; //修改为您要发送的手机号 String mobile = "130xxxxxxxx" ; /**************** 查账户信息调用示例 *****************/ System.out.println(JavaSmsApi.getUserInfo(apikey)); /**************** 使用智能匹配模板接口发短信(推荐) *****************/ //设置您要发送的内容(内容必须和某个模板匹配。以下例子匹配的是系统提供的1号模板) String text = "【云片网】您的验证码是1234" ; //发短信调用示例 // System.out.println(JavaSmsApi.sendSms(apikey, text, mobile)); /**************** 使用指定模板接口发短信(不推荐,建议使用智能匹配模板接口) *****************/ //设置模板ID,如使用1号模板:【#company#】您的验证码是#code# long tpl_id = 1 ; //设置对应的模板变量值 String tpl_value = URLEncoder.encode( "#code#" ,ENCODING) + "=" + URLEncoder.encode( "1234" , ENCODING) + "&" + URLEncoder.encode( "#company#" ,ENCODING) + "=" + URLEncoder.encode( "云片网" ,ENCODING); //模板发送的调用示例 System.out.println(tpl_value); System.out.println(JavaSmsApi.tplSendSms(apikey, tpl_id, tpl_value, mobile)); /**************** 使用接口发语音验证码 *****************/ String code = "1234" ; //System.out.println(JavaSmsApi.sendVoice(apikey, mobile ,code)); /**************** 使用接口绑定主被叫号码 *****************/ String from = "+86130xxxxxxxx" ; String to = "+86131xxxxxxxx" ; Integer duration = 30 * 60 ; // 绑定30分钟 // System.out.println(JavaSmsApi.bindCall(apikey, from ,to , duration)); /**************** 使用接口解绑主被叫号码 *****************/ // System.out.println(JavaSmsApi.unbindCall(apikey, from, to)); } /** * 取账户信息 * * @return json格式字符串 * @throws java.io.IOException */ public static String getUserInfo(String apikey) throws IOException, URISyntaxException { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); return post(URI_GET_USER_INFO, params); } /** * 智能匹配模板接口发短信 * * @param apikey apikey * @param text 短信内容 * @param mobile 接受的手机号 * @return json格式字符串 * @throws IOException */ public static String sendSms(String apikey, String text, String mobile) throws IOException { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); params.put( "text" , text); params.put( "mobile" , mobile); return post(URI_SEND_SMS, params); } /** * 通过模板发送短信(不推荐) * * @param apikey apikey * @param tpl_id 模板id * @param tpl_value 模板变量值 * @param mobile 接受的手机号 * @return json格式字符串 * @throws IOException */ public static String tplSendSms(String apikey, long tpl_id, String tpl_value, String mobile) throws IOException { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); params.put( "tpl_id" , String.valueOf(tpl_id)); params.put( "tpl_value" , tpl_value); params.put( "mobile" , mobile); return post(URI_TPL_SEND_SMS, params); } /** * 通过接口发送语音验证码 * @param apikey apikey * @param mobile 接收的手机号 * @param code 验证码 * @return */ public static String sendVoice(String apikey, String mobile, String code) { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); params.put( "mobile" , mobile); params.put( "code" , code); return post(URI_SEND_VOICE, params); } /** * 通过接口绑定主被叫号码 * @param apikey apikey * @param from 主叫 * @param to 被叫 * @param duration 有效时长,单位:秒 * @return */ public static String bindCall(String apikey, String from, String to , Integer duration ) { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); params.put( "from" , from); params.put( "to" , to); params.put( "duration" , String.valueOf(duration)); return post(URI_SEND_BIND, params); } /** * 通过接口解绑绑定主被叫号码 * @param apikey apikey * @param from 主叫 * @param to 被叫 * @return */ public static String unbindCall(String apikey, String from, String to) { Map<String, String> params = new HashMap<String, String>(); params.put( "apikey" , apikey); params.put( "from" , from); params.put( "to" , to); return post(URI_SEND_UNBIND, params); } /** * 基于HttpClient 4.3的通用POST方法 * * @param url 提交的URL * @param paramsMap 提交<参数,值>Map * @return 提交响应 */ public static String post(String url, Map<String, String> paramsMap) { CloseableHttpClient client = HttpClients.createDefault(); String responseText = "" ; CloseableHttpResponse response = null ; try { HttpPost method = new HttpPost(url); if (paramsMap != null ) { List<NameValuePair> paramList = new ArrayList<NameValuePair>(); for (Map.Entry<String, String> param : paramsMap.entrySet()) { NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue()); paramList.add(pair); } method.setEntity( new UrlEncodedFormEntity(paramList, ENCODING)); } response = client.execute(method); HttpEntity entity = response.getEntity(); if (entity != null ) { responseText = EntityUtils.toString(entity, ENCODING); } } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (Exception e) { e.printStackTrace(); } } return responseText; } } |
代码看上去有点乱了,不过我们用到的API接口也就那么几个,具体的可以看这篇文章如何使用云片API发送短信验证码,只要把那三个接口搞定了,无论是国际短信、国内短信还是短信验证码、手机验证码,都可以轻松搞定,so easy!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.jianshu.com/p/59bcca9692c3