自学微信二次开发(1)

在二次开发微信,首先要成为微信开发者,在微信开发者平台注册,还要注册一个微信公众号,注册过程很简单,唯一的要求就是要绑定银行卡的微信账号扫一下二维码.然后就能注册成功微信公众号了.
在注册微信公众号之后有两种模式,一个是编辑模式,还有一个就是开发者模式.编辑模式其实也是一个后台操作的过程,在编辑模式下基本上一些基本的功能都能实现,像关键字回复,被关注的时候回复,还有订阅号每天能够推送一条信息给关注此微信的人,这些功能都能符合宣传人的功能,但是我们是开发者,怎么能满足于这些了,我们要动态信息,比如像用户发送一个地名回复那个地名的天气等.
在正式开发的过程中我们首先要搭建好我们的环境,首先我是准备将我的项目上传到百度BAE上面,需要费用,但是每天只要四毛钱,但是我首先还是没有直接将应用上传上去,我是使用一个工具将我自己的ip地址映射到公网上面去的,然后自己打开tomcat,通过映射的地址就能访问到我电脑的应用.
前面有一个很好用的工具,但是现在好像是没用了,我是用的这个ngrok.exe,这个工具的服务器是在美国所以用起来有点慢,但是我觉得是很是适合我们初学者使用,错误能在MyEclipse控制台打印.便于调错!
使用方法:
打开cmd,将目录切到此工具的目录下面
输入nrgok 端口号(tomcat的端口号)然后回车:
然后就会显示映射的地址了
复制http:一直到->前就是你将本地的应用映射到公网的网址了,加上你的项目名,就能访问到应用了
这就是ngrok
自学微信二次开发(1)_第1张图片
然后在开启开发者模式首先要这几个步骤:
第一步:填写服务器配置:
将映射的地址接上项目名然后加上servlet的访问名字
第二步:验证服务器地址的有效性
由于验证是GET方法,所以在servlet中doGet()方法中实现:
第三步:依据接口文档实现业务逻辑
验证的具体步骤:
1.在doGet方法中获取到微信服务器中发过去的数据,有这几个数据:
signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp:时间戳
nonce::随机数
echostr:随机字符串
2.在request中获取到这几个数据后,创建一个验证的方法传入signature,nonce,timestamp,创建一个token(可以随便写,但是要和微信填写url的时候的token是一样的)
3.验证方法:
贴代码吧:

private static final String TOKEN="weixin";
    public static boolean cheackWeinxi(String signature,String nonce,String timestamp){
        //将数据存到一个数组中
        String[] arr=new String[]{TOKEN,timestamp,nonce};
        //排序
        Arrays.sort(arr);
        //生成字符串
        StringBuffer sbf=new StringBuffer();
        for(int i=0;inull;
        try {
            MessageDigest md=MessageDigest.getInstance("SHA-1");
            //拼接后额字符串进行sha1
            byte[] digest=md.digest(content.toString().getBytes());
            con=byteTOStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return con.equals(signature.toUpperCase());
    }
    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',  
         '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 
    private static String byteTOStr(byte[] arrs){
        String strs="";
        for(int i=0;ireturn strs;
    }
    /**
     * 将字节转换成十六进制的字符
     * @param by
     * @return
     */
    private static String byteToHexStr(byte by){
        char[] tempArr=new char[2];
        tempArr[0]=HEX_DIGITS[(by>>>4) & 0X0F];
        tempArr[1]=HEX_DIGITS[by & 0X0F];
        String s=new String(tempArr);
        return s;
    }

    private static String getFormattedText(byte[] bytes) {  
        int len = bytes.length;  
        StringBuilder buf = new StringBuilder(len * 2);  
        // 把密文转换成十六进制的字符串形式  
        for (int j = 0; j < len; j++) {  
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0X0F]);  
            buf.append(HEX_DIGITS[bytes[j] & 0X0F]);  
        }  
        return buf.toString();  
    }  

    public static String encode(String str) {  
        if (str == null) {  
            return null;  
        }  
        try {  
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");  
            messageDigest.update(str.getBytes());  
            return getFormattedText(messageDigest.digest());  
        } catch (Exception e) {  
            throw new RuntimeException(e);  
        }  
    }  

在servlet中判断,如果是真则返回echostr,则验证成功,
然后在微信的后台会提醒你验证成功!
写这个博客只是让我以后没有事可以看看,不喜勿喷!

你可能感兴趣的:(自学微信二次开发)