JAVA折腾微信公众平台(Token验证)

BAE的JAVA还在内测的时候,抱着好奇的态度发邮件申请了内测权限,当时折腾了一天,然后就没折腾了。现在BAE的JAVA都已经正式开放使用了,我又蛋疼的想写点什么,否则每天仅仅只是工作上的使用,是得不到多大的进步的。

最近微信的公众平台比较火,于是我也想弄个微信来玩玩。如何注册微信公众号?点击之后就可以看到官方的答案了(额,比较坑爹)。

注册之后,可以选择编辑模式和开发模式,这里要说的是开发模式。

首先要开启开发模式必须要进行Token的一个验证,你给出一个地址,微信发送请求,然后你给出相应,就这么简单。虽然说是简单,但是这是事后才说的,官方只有PHP的DEMO,我用JAVA开发的时候各种蛋疼不会弄,不过好在还是弄出来了。

上传代码

以下代码是校验Token的关键代码,其中还有一个SHA1加密的类在附件中,这里就不贴出来了。需要注意的是,这里的类我是继承的HttpServlet,也就是说要进行web.xml的配置,这个就不多说了。

无问题后上传到你的空间,我用的是BAE,大家也可以试试。

package net.binjoo.wechat;

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.binjoo.utils.SHA1;

@SuppressWarnings("serial")
public class WechatCallbackApi extends HttpServlet {
    // 自定义 token
    private String TOKEN = "这个地方由你自己定义";

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 微信加密签名
        String signature = request.getParameter("signature");
        // 随机字符串
        String echostr = request.getParameter("echostr");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");

        String[] str = { TOKEN, timestamp, nonce };
        Arrays.sort(str); // 字典序排序
        String bigStr = str[0] + str[1] + str[2];
        // SHA1加密
        String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();

        // 确认请求来至微信
        if (digest.equals(signature)) {
            response.getWriter().print(echostr);
        }
    }
}

开启消息接口

进入微信公众平台,选择导航菜单栏中的【高级设置 - 开发模式 - 成为开发者】或者点击这里进入,进入后填写网址URL和Token,其中Token可由可以任意填写,用作生成签名,但必须与WechatCallbackApi类中的常量TOKEN一致,否则不能通过校验,成不了开发者。

一切填写无问题之后,点击提交就可以了。是否通过的结果马上就可以得到响应,希望大家都能够看到【提交成功】的提示。

下载地址:CSDN蓝奏云BOX

THE-END

添加评论

已有 62 条评论

  • Jr
    Jr 四川

    话说学JAVA的都很变态。。。嘿嘿

    • 冰剑
      冰剑 MOD 广东

      额,我是个例外,我不变态。

  • RazerWang
    RazerWang 陕西

    知道JAVA程序员和C程序员的差别吗?食堂里,吃完饭就走的是JAVA程序员,吃完饭还要自己 收拾的那就是是C程序员。至于为什么会这样、大家都明白(因为JAVA自带垃圾回收机制、、、C需要手动释放内存)←这就是原因

    • 冰剑
      冰剑 MOD 广东

      一个面向对象,一个面向过程。

      • RazerWang
        RazerWang 陕西

        完全听不懂,我大学想学java,现在纠结于是桌面编程,还是网页。

        • 冰剑
          冰剑 MOD 广东

          java的桌面开发惨不忍睹,oracle都没怎么开发了。
          学网页不错,毕竟以后还是移动的时代,WEB还是比较有前景的。

  • 小码哥
    小码哥 广东

    健哥,语音识别,洒家已经调通了。

  • 红色石头
    红色石头 湖北

    我也做了Java的微信开发:http://50vip.com/blog.php?i=62

    另外问下博主,你的页面假装ajax加载时怎么做的啊?

  • 吴稀罕
    吴稀罕 广东

    好久没来看了,今天上来看看.好专业的语言啊..

  • 阿飞
    阿飞 四川

    做这个干嘛啊?泡MM啊?微信好像就用来干这个的。

    • 冰剑
      冰剑 MOD 广东

      有MM了,不用泡了。
      话说微信的功能不只是泡MM啊。

  • rainzee
    rainzee 陕西

    折腾了快一个星期commenttomail还是没有成功,然后看到你的邮件回复其实是代发,你用的也不是commenttomail吧?是另外一个插件?

    • 冰剑
      冰剑 MOD 广东

      话说恭喜你啊,其实我是什么都没有帮到你。

  • rainzee
    rainzee 陕西

    独立页面怎么搞的

    • 冰剑
      冰剑 MOD 广东

      后台-创建-创建页面,这样就可以弄独立页面的。

      自定义独立页面的话可以参考:http://www.dwz.cn/7ADuh

      • rainzee
        rainzee 陕西

        nice!要得就是自定义独立页面,你懂我~

  • ccc
    ccc 广东

    我插勒,进错门了。。

  • 胸怀伟大邹大妈
    胸怀伟大邹大妈 云南

    大妈觉得,微信公众平台现在技术里面都是做服务平台的,比如什么xx平台。多数是为站长或者运营者提供定制服务的,这样赚钱的说哦!哈哈

  • 刺菊幽蓝
    刺菊幽蓝 北京

    大哥,我弄了很久都没弄出来啊,把你的代码直接贴都不成啊,再详细点呗

    • 刺菊幽蓝
      刺菊幽蓝 北京

      是不是说我的token有问题?我就用的我的账号啊,代码里面也改过了。
      我发现代码中有个判断,
      if (digest.equals(signature)) response.getWriter().print(echostr);
      这句有问题啊,加密后的字串没可能和传过来的signature是equals的。

      而且,按理论来说,微信只需要返回他发送过来的echostr,我直接返回它也还是不成啊

      • 冰剑
        冰剑 MOD 广东

        代码应该木有问题的,我当时写的就是这段代码。
        如果你写的Servlet没有问题的话,那我也不是很清楚了。

        • 刺菊幽蓝
          刺菊幽蓝 北京
  • 草一依
    草一依 辽宁

    同志,我想向你学习很多很多,其实是我现在着急做微信平台。但是我有很多都不明白。我现在通过第三方平台成为了开始者,可是我不知道下一步该怎么做了。第三方的平台感觉用起来不怎么得劲儿。哎,总之,有很多问题要问你。

    • 冰剑
      冰剑 MOD 广东

      多多交流。

      • 草一依
        草一依 北京

        是吗?我想加你QQ,交流方便,没别的意思哈。我现在在弄一个手机网页,很多都搞不懂,天天百度,每次的关键词都能出来一堆的知识 ,我一个一个看,一个一个试,真的好累啊。我还着急出效果,能不能帮帮我啊。

      • 风絮飞扬
        风絮飞扬 河南

        你好,朋友。我是一家企业的管理者,希望运营微信公众平台,但是有些疑问,希望能帮忙解答,QQ号码27136825.感谢!

  • 草一依
    草一依 北京

    964519985 咕叽咕叽 看到留言后麻烦加下。我就不管你要QQ号了,免得暴露了你。哈哈。

  • 张敏鹏
    张敏鹏 河北

    我看看而已

  • Not·双鱼座
    Not·双鱼座 福建

    有问题问你、就是这个验证的。看到了回复下

    • 冰剑
      冰剑 MOD 广东

      什么问题?

      • Not·双鱼座
        Not·双鱼座 福建

        我从百度网盘中下载之后三个文件我都已经代替了, 还需要改什么吗? web.xml里面也相应的改了,但是现在验证没成功

      • Not·双鱼座
        Not·双鱼座 福建

        加下Q行不?519750346 方便、

  • 穿越异次元
    穿越异次元 天津

    没什么问题。就是SHA1其实可以用Java自带的MessageDigest类来搞定。。

    • 冰剑
      冰剑 MOD 广东

      当时我还不知道MessageDigest类。。

  • -人生若只如初见
    -人生若只如初见 北京

    大神求指教,我是属于这方面很白痴的了,很看不懂的说,能加下QQ么。418447571.

  • 达浪
    达浪 江苏

    网址/wechat

    • 邓溢榕
      邓溢榕 江苏

      试了下竟然可以了,能请教下为什么后面需要这个wechat吗?

  • 娇
    广东

    你好 请问我的验证失败是怎么回事呢?可以加你qq吗?743480461

    • 冰剑
      冰剑 MOD 广东

      自己再检查一下,代码是没问题的,很多人都试过。

      • 刘怀杰
        刘怀杰 山东

        tmpData[j] = byteArrayToInt(newbyte, (pos 64) + (j 4));里面的byteArrayToInt类没有

        encrypt();方法也没有

        • 冰剑
          冰剑 MOD 广东

          byteArrayToInt不是类,是方法。。
          不可能没有,请仔细查看代码。

  • 一夢千尋琥珀川
    一夢千尋琥珀川 广西

    TOKEN验证失败啊,包、名字什么的都已经一致了,博主有空加下我QQ782399171,本人小白真心求解

  • CopyStick
    CopyStick 浙江

    请问发布者 我按照这样去配置,使用阿里云服务器,tomcat启动,代码跟您的一致,token验证失败。

  • 郑青青
    郑青青 四川

    为什么执行了这一句还是验证失败啊?response.getWriter().print(echostr);

  • 缥缈峰
    缥缈峰 北京

    贴代码要贴全啊。菜鸟都不会搞的。贴全吧。。顶一下

  • D★J◎H
    D★J◎H 广东

    感谢楼主,微信官网都找不到教程,只有简单的提示!