其他不多说,短信用的云之讯得。
好了测试一下把,短信失败,漂亮 我就说么 怎么会没有问题 不然怎么会有这篇简书。
看下问题是什么把:短信请求返回值是这个东西,能给个汉字不,完全看不懂好么?
{"data":[{"code":-31,"fee":0,"mobile":"18801296302","msg":"缂栫爜閿欒","sid":"ba25b77e-3416-453a-ad11-e3ae6cc5cf0a","uid":"2d92c6132139467b989d087c84a365d8"}],"total_fee":0}
没关系 我们看文档:
云之讯文档-请求返回码
(博主内心OS:呵呵! 我查询啥了???我就是通知你给这个手机号发个短信!!!)
同事同他电脑测试了一下,竟然没有问题,嗯哼 大家代码都是svn上的 怎么的 欺负新手是不是。
联系了一下云之讯的服务人员他们只回复:
“包头保持 json格式utf-8编码, 内容部分不要重复格式”:
经过我的反复墨迹,终于得出了结论,原因是内容部分编码格式不对,需要用utf8的格式,好吧idea 和androidstudio没太大区别,编码看一下吧 ,没错啊 是utf8啊
写个测试类试一下把。同样的代码完全粘贴过来就没问题。
先上代码把:
工具类:(大家用的都是一个工具类,他的成功了,我的失败了,说明不是工具类的问题,里面的设置是正确的,这个结论大家能理解把。)
/**
* 发送代理商短信下行接口
* @param url 地址
* @param phoneNum 手机号 支持1个或多个
* @param type 0:通知短信,4:验证码短信,5:营销短信
* @param content 要发送的信息
* @param sendTime 定时发送时间 “”代表不用定时,立即发送。2016-11-11 09:00:00这种字符串就代表定时发送
* @param notice 是否需要提醒
* @return
*/
public static String sendIdentifyingCode(String url, String phoneNum,
int type, String content, String sendTime,int notice) {
String password=MD5Util.string2MD5(你的登录名);
String sjson="";
if(0==notice){
sjson="{"+
"\"clientid\":\"你自己的clientid\","+
"\"password\":\""+password+"\","+
"\"mobile\":\""+phoneNum+"\","+
"\"smstype\":\""+type+"\","+
"\"content\":\""+content+"\","+
"\"uid\":\"你自己的uid\""
+"}";
}else{
sjson="{"+
"\"clientid\":\"你自己的clientid\","+
"\"password\":\""+password+"\","+
"\"mobile\":\""+phoneNum+"\","+
"\"smstype\":\""+type+"\","+
"\"content\":\""+content+"\","+
"\"uid\":\"你自己的uid\","+
"\"sendTime\":\""+sendTime+"\""
+"}";
}
System.out.println("sjson:"+sjson);
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("host", "api.ucpaas.com");
conn.setRequestProperty("accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(sjson);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
System.out.println("短信返回值:"+result);
return result;
}
测试类:在我这本地成功发短信的:
class Test {
public static void main(String[] args) {
String content = "【你的签名】您好,本次登录的验证码为 995685 ,请于2分钟内正确输入,“+
+”切勿泄露他人。如非本人操作请忽略本信息。";
String data = VerificationCodeUrlUtil.sendIdentifyingCode(VerificationCodeUrlUtil.url,
"你的手机号", 4, content, "", 0);
}
}
我把能转成utf8 的都转了还是不行,觉得代码肯定是没问题的了,和同事商量了下,最后一致认为是环境的问题,开始找把,idea的能改的都改一下吧:
idea修改utf8编码
修改好测一下吧,还是不行~~~啊啊啊啊啊 我快崩溃了,再找找别的环境吧
测试类没问题,运行项目就不行,是不是tomcat的问题啊,百度一下tomcat怎么改默认编码:
tomcat8以后默认编码格式是utf-8;7之前的都是iso8859-1
如果默认情况下,tomcat使用的的编码方式:iso8859-1
修改tomcat下的conf/server.xml文件
找到如下代码:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这段代码规定了Tomcat监听HTTP请求的端口号等信息。
可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。
修改完成后:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
呵呵 我用的刚好是tomcat7 改一下把,改完测试下,吐血三升啊~~~~还是不对,接着从运行环境下手把,jdk 现在就剩这个东西没改了 ,改下试试把 死马当活马医:
在系统环境变量中增加一个变量,变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,保存
ok 运行通过,终于收到我期盼已久的短信验证码了。
希望本篇文章能对用云之讯的朋友有所帮助。
网友评论