美文网首页
云之讯返回错误码code = -31 msg = 缂栫爜閿欒问

云之讯返回错误码code = -31 msg = 缂栫爜閿欒问

作者: EraJieZhang | 来源:发表于2018-12-25 10:44 被阅读0次
    最近刚接触java开发,boss给我安排任务让我写注册页面,刚开始觉得任务超简单啊页面时这样的:

    其他不多说,短信用的云之讯得。

    好了测试一下把,短信失败,漂亮 我就说么 怎么会没有问题 不然怎么会有这篇简书。

    看下问题是什么把:短信请求返回值是这个东西,能给个汉字不,完全看不懂好么?

    {"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 运行通过,终于收到我期盼已久的短信验证码了。
    希望本篇文章能对用云之讯的朋友有所帮助。

    相关文章

      网友评论

          本文标题:云之讯返回错误码code = -31 msg = 缂栫爜閿欒问

          本文链接:https://www.haomeiwen.com/subject/qqixlqtx.html