微信公众号开发总结

申请公众号,申请服务器,申请域名这些都是基础步骤,跳过不说了。

如果是第一次开发,即使按照微信的接入指南操作,也要花费很长时间,这里说一下注意事项:

1. 服务器的url地址必须是域名!ip不行。而且url接口只能有一个!否则,频繁的token验证失败会烦死你。

2. 微信开发文档给的例子是python的,我用的tomcat+java,token验证时是从网上找的java代码,确实可用,但接口必须严格按照微信的来,否则。。。多几个回车都不行,微信不会单独给你trim,自己想办法吧。

3. get和post接口调试工具是必须的,我下载了一个postman客户端,才找到问题。

4. url接口只能有一个带来的问题就是:token验证和消息接口只能用一个,只好用get和post方式来区分。这个微信开发文档里没写,后来在简书上才找到一篇文章,难道这个问题太低级?很多人不好意思说? tmd

5. 我要处理xml和json串,需要导入一堆的jar包:

<%@ page import="java.io.*,java.util.*,java.net.*,java.security.MessageDigest,java.security.NoSuchAlgorithmException"%><%@ page import="org.apache.commons.httpclient.*,org.apache.commons.httpclient.methods.PostMethod,org.apache.commons.httpclient.methods.RequestEntity,org.apache.commons.httpclient.methods.StringRequestEntity"%><%@ page import="com.alibaba.fastjson.*,org.dom4j.Document,org.dom4j.DocumentHelper,org.dom4j.DocumentException"%><%@ page import="org.dom4j.io.OutputFormat,org.dom4j.io.XMLWriter"%><%@ page import="org.dom4j.Element,org.dom4j.io.SAXReader,org.xml.sax.InputSource"%><%@ page import="javax.xml.parsers.DocumentBuilder,javax.xml.parsers.DocumentBuilderFactory,javax.xml.parsers.ParserConfigurationException"%><%@ page import="javax.xml.transform.Transformer,javax.xml.transform.TransformerConfigurationException"%><%@ page import="javax.xml.transform.TransformerException,javax.xml.transform.TransformerFactory,javax.xml.transform.dom.DOMSource,javax.xml.transform.stream.StreamResult"%>

眼晕吗? 凑合看吧,我可是一个一个贴上去的。

6. 记得写日志,便于调试。

公开一部分源码:

    String postToNlu(String in_url,String in_data){    
        //关闭   
        //创建httpclient工具对象   
        HttpClient client = new HttpClient();
        //创建post请求方法   
        PostMethod myPost = new PostMethod(in_url);
        //设置请求超时时间   
        client.setConnectionTimeout(5*1000);
        String responseString = "start postToNlu...";    
        try{
            //设置请求头部类型
            myPost.setRequestHeader("Accept","text/plain");
            //myPost.setRequestHeader("Content-Type","text/xml");
            //myPost.setRequestHeader("charset","utf-8");

            //设置请求体,即xml文本内容,注:这里写了两种方式,一种是直接获取xml内容字符串,一种是读取xml文件以流的形式
            //myPost.setRequestBody(in_data);
            //responseString = "set setRequestBody...";
              
            //InputStream body=this.getClass().getResourceAsStream("/data/"+xmlFileName);
            //myPost.setRequestBody(body);
            myPost.setRequestEntity(new StringRequestEntity(in_data,"application/json","utf-8"));
            responseString = "set setRequestEntity...";
            
            long len = myPost.getRequestEntity().getContentLength();
            responseString = "set getContentLength:" + len;
            myPost.setRequestHeader("Content-Length", len + "");
            
            int statusCode = client.executeMethod(myPost);
            if(statusCode == HttpStatus.SC_OK){
                responseString = "statusCode:" + statusCode;
                BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream());
                byte[] bytes = new byte[1024];
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                int count = 0;    
                while((count = bis.read(bytes))!= -1){
                    bos.write(bytes, 0, count);
                }
                byte[] strByte = bos.toByteArray();
                responseString = new String(strByte,0,strByte.length,"utf-8");
                bos.close();    
                bis.close();
            }
            else
            {responseString = "nlu http error: " + statusCode;}
        }catch (Exception e) {    
            e.printStackTrace();
            responseString = responseString + "---"+ e.toString(); 
        }    
        myPost.releaseConnection();    
        return responseString;
    }

 

其它的就不公开了,代码很乱,我又不是很精通java,没用任何框架,也没封装, 我喜欢用手。。。。。。

调通以后,出现第一个回复还是很兴奋的,现在已经可以自动回复了,下一步是增加图文、语音回复,路漫漫。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值