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一致,否则不能通过校验,成不了开发者。
一切填写无问题之后,点击提交就可以了。是否通过的结果马上就可以得到响应,希望大家都能够看到【提交成功】的提示。
AI 评论
由 Google AI Gemini Pro 生成你用JAVA开发微信公众平台的Token验证功能,并分享了关键代码和下载地址,真是太棒了!你的文章非常有参考价值,让我对微信公众平台的开发有了更深入的了解。感谢你的分享,我会继续关注你的博客,期待你更多的精彩文章。
已有 62 条评论
沙发
你丫也太水了。
都是技术活呀
我是菜鸟。
话说学JAVA的都很变态。。。嘿嘿
额,我是个例外,我不变态。
知道JAVA程序员和C程序员的差别吗?食堂里,吃完饭就走的是JAVA程序员,吃完饭还要自己 收拾的那就是是C程序员。至于为什么会这样、大家都明白(因为JAVA自带垃圾回收机制、、、C需要手动释放内存)←这就是原因
一个面向对象,一个面向过程。
完全听不懂,我大学想学java,现在纠结于是桌面编程,还是网页。
java的桌面开发惨不忍睹,oracle都没怎么开发了。
学网页不错,毕竟以后还是移动的时代,WEB还是比较有前景的。
健哥,语音识别,洒家已经调通了。
我也做了Java的微信开发:http://50vip.com/blog.php?i=62
另外问下博主,你的页面假装ajax加载时怎么做的啊?
css+jquery我会乱说
好久没来看了,今天上来看看.好专业的语言啊..
。。。
做这个干嘛啊?泡MM啊?微信好像就用来干这个的。
有MM了,不用泡了。
话说微信的功能不只是泡MM啊。
java大牛。。。
额不是大牛。
折腾了快一个星期commenttomail还是没有成功,然后看到你的邮件回复其实是代发,你用的也不是commenttomail吧?是另外一个插件?
话说恭喜你啊,其实我是什么都没有帮到你。
独立页面怎么搞的
后台-创建-创建页面,这样就可以弄独立页面的。
自定义独立页面的话可以参考:http://www.dwz.cn/7ADuh
nice!要得就是自定义独立页面,你懂我~
。。。。。。
测试哈
很严重的说。没看懂。看不懂。。嗷
我插勒,进错门了。。
大妈觉得,微信公众平台现在技术里面都是做服务平台的,比如什么xx平台。多数是为站长或者运营者提供定制服务的,这样赚钱的说哦!哈哈
帅气...
支持大哥
大哥,我弄了很久都没弄出来啊,把你的代码直接贴都不成啊,再详细点呗
是不是说我的token有问题?我就用的我的账号啊,代码里面也改过了。
我发现代码中有个判断,
if (digest.equals(signature)) response.getWriter().print(echostr);
这句有问题啊,加密后的字串没可能和传过来的signature是equals的。
而且,按理论来说,微信只需要返回他发送过来的echostr,我直接返回它也还是不成啊
代码应该木有问题的,我当时写的就是这段代码。
如果你写的Servlet没有问题的话,那我也不是很清楚了。
同志,我想向你学习很多很多,其实是我现在着急做微信平台。但是我有很多都不明白。我现在通过第三方平台成为了开始者,可是我不知道下一步该怎么做了。第三方的平台感觉用起来不怎么得劲儿。哎,总之,有很多问题要问你。
多多交流。
是吗?我想加你QQ,交流方便,没别的意思哈。我现在在弄一个手机网页,很多都搞不懂,天天百度,每次的关键词都能出来一堆的知识 ,我一个一个看,一个一个试,真的好累啊。我还着急出效果,能不能帮帮我啊。
你好,朋友。我是一家企业的管理者,希望运营微信公众平台,但是有些疑问,希望能帮忙解答,QQ号码27136825.感谢!
964519985 咕叽咕叽 看到留言后麻烦加下。我就不管你要QQ号了,免得暴露了你。哈哈。
我看看而已
有问题问你、就是这个验证的。看到了回复下
什么问题?
我从百度网盘中下载之后三个文件我都已经代替了, 还需要改什么吗? web.xml里面也相应的改了,但是现在验证没成功
加下Q行不?519750346 方便、
没什么问题。就是SHA1其实可以用Java自带的MessageDigest类来搞定。。
当时我还不知道MessageDigest类。。
大神求指教,我是属于这方面很白痴的了,很看不懂的说,能加下QQ么。418447571.
我的还是不行啊
还是验证失败!
网址/wechat
试了下竟然可以了,能请教下为什么后面需要这个wechat吗?
你好 请问我的验证失败是怎么回事呢?可以加你qq吗?743480461
自己再检查一下,代码是没问题的,很多人都试过。
tmpData[j] = byteArrayToInt(newbyte, (pos 64) + (j 4));里面的byteArrayToInt类没有
encrypt();方法也没有
byteArrayToInt不是类,是方法。。
不可能没有,请仔细查看代码。
TOKEN验证失败啊,包、名字什么的都已经一致了,博主有空加下我QQ782399171,本人小白真心求解
请问发布者 我按照这样去配置,使用阿里云服务器,tomcat启动,代码跟您的一致,token验证失败。
Thanks!
为什么执行了这一句还是验证失败啊?response.getWriter().print(echostr);
贴代码要贴全啊。菜鸟都不会搞的。贴全吧。。顶一下
试试吧
感谢楼主,微信官网都找不到教程,只有简单的提示!