功能说明 功能说明本项目是云片短信发送接口的Java项目,基于Apache HttpClient v4.3.操作类必须依赖jar包 httpcore-4.3.2.jar httpclient-4.3.5.jar commons-codec-1.6.jar commons-logging-1.1.3.jar常见问题提示1. 代
功能说明 本项目是云片短信发送接口的Java项目,基于Apache HttpClient v4.3. 操作类必须依赖jar包 httpcore-4.3.2.jar httpclient-4.3.5.jar commons-codec-1.6.jar commons-logging-1.1.3.jar 常见问题提示 1. 代码打开是乱码 项目代码格式为UTF-8,请注意您的开发环境设置。 2. 发送返回“非法的apikey” 请用您注册的账号登录云片官网(http://www.yunpian.com),在账户中心首页查看您自己的apikey,检查是否和代码中设置的一致。 3. 发送返回“IP没有权限” 请用您的注册的账号登录云片官网(http://www.yunpian.com),在“账户设置”的“IP白名单”设置中将自己测试机的外网IP加进去。 如不清楚是哪个IP,可以用错误提示信息里显示的IP,或访问http://www.ip138.com/查看自己的IPJavaSmsApi.java
package com.yunpian.demo; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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; /*** * @ProjectName: yunpian * @PackageName: com.yunpian.demo * @ClassName: JavaSmsApi * @Description: 短信http接口的java代码调用 基于Apache HttpClient 4.3 * @Author: 伏永正 * @Date: 2017年11月1日 上午11:49:53 */ public class JavaSmsApi { //修改为您的apikey.apikey可在官网(http://www.yuanpian.com)登录后获取 private static String apikey = "官网获取apikey"; //查账户信息的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_BATCH_SEND_SMS = "https://sms.yunpian.com/v2/sms/batch_send.json"; //批量发送不同内容短信http地址 private static String URI_MULTI_SEND_SMS = "https://sms.yunpian.com/v2/sms/multi_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_TPL_BATCH_SEND_SMS = "https://sms.yunpian.com/v2/sms/tpl_batch_send.json"; //发送语音验证码接口的http地址 private static String URI_SEND_VOICE = "https://voice.yunpian.com/v2/voice/send.json"; //编码格式。发送编码格式统一用UTF-8 private static String ENCODING = "UTF-8"; /*** * @MethodName: getUserInfo * @Description: 取账户信息 * @Return: String json格式字符串 * @Author: 伏永正 * @Date: 2017年11月1日上午11:34:40 * @throws IOException * @throws URISyntaxException */ public static String getUserInfo() throws IOException, URISyntaxException { Maphttpcore-4.3.2.jar httpcore-4.3.2.jar httpclient-4.3.5.jar httpclient-4.3.5.jar commons-codec-1.6.jar commons-codec-1.6.jar commons-logging-1.1.3.jar commons-logging-1.1.3.jarparams = new HashMap (); params.put("apikey", apikey); return post(URI_GET_USER_INFO, params); } /*** * @MethodName: sendSms * @Description: 单条短信发送,智能匹配短信模板 * @Params: text 需要使用已审核通过的模板或者默认模板 * @Params: mobile 接收的手机号,仅支持单号码发送 * @Return: String json格式字符串 * @Author: 伏永正 * @Date: 2017年11月1日上午11:40:24 * @throws: IOException */ public static String sendSms(String text, String mobile) throws IOException { Map params = new HashMap (); params.put("apikey", apikey); params.put("text", text); params.put("mobile", mobile); return post(URI_SEND_SMS, params); } /*** * @MethodName: batchSend * @Description: 批量发送短信,相同内容多个号码,智能匹配短信模板 * @Params: text 需要使用已审核通过的模板或者默认模板 * @Params: mobile 接收的手机号,多个手机号用英文逗号隔开 * @Return: String json格式字符串 * @Author: 伏永正 * @Date: 2017年11月1日下午12:15:30 */ public static String batchSend(String text, String mobile) { Map params = new HashMap ();//请求参数集合 params.put("apikey", apikey); params.put("text", text); params.put("mobile", mobile); return post(URI_BATCH_SEND_SMS, params);//请自行使用post方式请求,可使用Apache HttpClient } /*** * @MethodName: tplSendSms * @Description: 通过指定模板发送短信(不推荐) * @Params: tpl_id 模板id * @Params: tpl_value 模板变量值 * @Params: mobile 接受的手机号 * @Return: String json格式字符串 * @Author: 伏永正 * @Date: 2017年11月1日上午11:41:48 * @throws IOException */ public static String tplSendSms(long tpl_id, String tpl_value, String mobile) throws IOException { Map params = new HashMap (); 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); } /*** * @MethodName: multiSend * @Description: 批量发送不同短信,多个号码,智能匹配短信模板 * @Params: @param text 需要使用已审核通过的模板或者默认模板 * @Params: @param mobile 接收的手机号,多个手机号用英文逗号隔开 * @Return: String json格式字符串 * @Author: 伏永正 * @Date: 2017年11月1日下午12:32:27 * @throws UnsupportedEncodingException */ public static String multiSend(String text,String mobile) throws UnsupportedEncodingException { Map params = new HashMap ();//请求参数集合 params.put("apikey", apikey); params.put("text", text); params.put("mobile", mobile); return post(URI_MULTI_SEND_SMS, params);//请自行使用post方式请求,可使用Apache HttpClient } /*** * @MethodName: sendVoice * @Description: 通过接口发送语音验证码 * @Params: mobile 接收的手机号、固话(需加区号) * @Params: code 验证码,支持4~6位阿拉伯数字 * @Return: String * @Author: 伏永正 * @Date: 2017年11月1日上午11:43:52 */ public static String sendVoice(String mobile, String code) { Map params = new HashMap (); params.put("apikey", apikey); params.put("mobile", mobile); params.put("code", code); return post(URI_SEND_VOICE, params); } /*** * @MethodName: post * @Description: 基于HttpClient 4.3的通用POST方法 * @Params: url 提交的URL * @Params: paramsMap 提交<参数,值>Map * @Return: String 提交响应 * @Author: 伏永正 */ public static String post(String url, Map paramsMap) { CloseableHttpClient client = HttpClients.createDefault(); String responseText = ""; CloseableHttpResponse response = null; try { HttpPost method = new HttpPost(url); if (paramsMap != null) { List paramList = new ArrayList (); for (Map.Entry 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); } } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (Exception e) { e.printStackTrace(); } } return responseText; } }