微信公众平台java版本token验证
以下是token.jsp 本人项目中使用的方法,仅供参考,方便自己后期使用
<%@page import="java.util.Date"%>
<%@page import="org.dom4j.Element"%>
<%@page import="org.dom4j.DocumentHelper"%>
<%@page import="org.dom4j.Document"%>
<%@page import="java.io.IOException"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.Reader"%>
<%@page import="java.security.MessageDigest"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<%@page import="com.cjt.base.util.comm.SysOptionsValues"%>
<%@page import="com.sides.vms.web.violation.service.MessageResolveBiz"%>
<%@page import="com.sides.vms.web.violation.service.ViolationInfoBiz"%>
<%@page import="com.sides.vms.web.violation.bean.RequsetBean"%>
<%@page import="com.sides.vms.web.violation.action.ViolationAction"%>
<%@page import="com.sides.vms.web.violation.bean.Violation"%>
<%@page import="com.sides.vms.web.violation.MainConfig"%>
<%
String path = request.getContextPath();
%>
<%
//WeiXinHandler为内部类不能使用非final类型的对象
final String TOKEN="weixin";
final HttpServletRequest final_request=request;
final HttpServletResponse final_response=response;
final HttpSession final_session =session;
final ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
final MessageResolveBiz msgResolveBiz = (MessageResolveBiz)context.getBean("msgResolveBiz");
final ViolationInfoBiz violationInfoBiz = (ViolationInfoBiz)context.getBean("violationInfoBiz");
final String localIp = MainConfig.LOCALIP;
%>
<%
class WeiXinHandler{
public void valid(){
String echostr=final_request.getParameter("echostr");
if(null==echostr||echostr.isEmpty()){
try{
responseMsg();
}catch(Exception ex){
ex.printStackTrace();
}
}else{
if(this.checkSignature()){
this.print(echostr);
}else{
this.print("error");
}
}
}
//自动回复内容
public void responseMsg()throws Exception{
String postStr=null;
postStr=this.readStreamParameter(final_request.getInputStream());
System.out.println("22:"+postStr);
//存入用户信息及消息及验证用户
String result = msgResolveBiz.insertMseeage(msgResolveBiz.pageContent2Bean(postStr));
if("invalidUser".equals(result)){
//非法用户
final_response.setHeader("REFRESH","5;URL=userManager/login.jsp");
}
if (null!=postStr&&!postStr.isEmpty()){
Document document=null;
try{
document = DocumentHelper.parseText(postStr);
}catch(Exception e){
e.printStackTrace();
}
if(null==document){
this.print("");
return;
}
Element root=document.getRootElement();
String fromUsername = root.elementText("FromUserName");
String toUsername = root.elementText("ToUserName");
String keyword = root.elementTextTrim("Content"); //消息内容
String msgtype =root.elementTextTrim("MsgType"); //消息类型
String event =root.elementTextTrim("Event"); //事件推送 click 表示自定义菜单点击事件
String eventKey =root.elementTextTrim("EventKey"); //自定义菜单接口中KEY值对应
String location_x =root.elementTextTrim("Location_X"); //地理位置纬度
String location_y =root.elementTextTrim("Location_Y"); //地理位置经度
String scale = root.elementTextTrim("Scale");//地图缩放大小
String label = root.elementTextTrim("Label");//地理位置信息
String time = new Date().getTime()+"";
System.out.println("keyword: "+keyword);
System.out.println("msgtype: "+msgtype);
//文本消息
String textTpl = "<xml>"+
"<ToUserName><![CDATA[%1$s]]></ToUserName>"+
"<FromUserName><![CDATA[%2$s]]></FromUserName>"+
"<CreateTime>%3$s</CreateTime>"+
"<MsgType><![CDATA[%4$s]]></MsgType>"+
"<Content><![CDATA[%5$s]]></Content>"+
"<FuncFlag>0</FuncFlag>"+
"</xml>";
//图文消息
String textTpl2 = "<xml>"+
"<ToUserName><![CDATA["+fromUsername+"]]></ToUserName>"+
"<FromUserName><![CDATA["+toUsername+"]]></FromUserName>"+
"<CreateTime>"+new Date().getTime()+"</CreateTime>"+
"<MsgType><![CDATA[news]]></MsgType>"+
"<Content><![CDATA[]]></Content>"+
"<ArticleCount>2</ArticleCount>"+
"<Articles>"+
"<item>"+
"<Title><![CDATA[%1$s]]></Title>"+
"<Description><![CDATA[]]></Description>"+
"<PicUrl><![CDATA[%2$s]]></PicUrl>"+
"<Url><![CDATA[%3$s]]></Url>"+
"</item>"+
"<item>"+
"<Title><![CDATA[%4$s]]></Title>"+
"<Description><![CDATA[]]></Description>"+
"<PicUrl><![CDATA[]]></PicUrl>"+
"<Url><![CDATA[%5$s]]></Url>"+
"</item>"+
"</Articles>"+
"<FuncFlag>0</FuncFlag>"+
"</xml>";
}
}
//微信接口验证
public boolean checkSignature(){
String signature = final_request.getParameter("signature");
String timestamp = final_request.getParameter("timestamp");
String nonce = final_request.getParameter("nonce");
String token=TOKEN;
String[] tmpArr={token,timestamp,nonce};
Arrays.sort(tmpArr);
String tmpStr=this.ArrayToString(tmpArr);
tmpStr=this.SHA1Encode(tmpStr);
if(tmpStr.equalsIgnoreCase(signature)){
return true;
}else{
return false;
}
}
//向请求端发送返回数据
public void print(String content){
try{
final_response.getWriter().print(content);
final_response.getWriter().flush();
final_response.getWriter().close();
}catch(Exception e){
}
}
//数组转字符串
public String ArrayToString(String [] arr){
StringBuffer bf = new StringBuffer();
for(int i = 0; i < arr.length; i++){
bf.append(arr[i]);
}
return bf.toString();
}
//sha1加密
public String SHA1Encode(String sourceString) {
String resultString = null;
try {
resultString = new String(sourceString);
MessageDigest md = MessageDigest.getInstance("SHA-1");
resultString = byte2hexString(md.digest(resultString.getBytes()));
} catch (Exception ex) {
}
return resultString;
}
public final String byte2hexString(byte[] bytes) {
StringBuffer buf = new StringBuffer(bytes.length * 2);
for (int i = 0; i < bytes.length; i++) {
if (((int) bytes[i] & 0xff) < 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) bytes[i] & 0xff, 16));
}
return buf.toString().toUpperCase();
}
//从输入流读取post参数
public String readStreamParameter(ServletInputStream in){
StringBuilder buffer = new StringBuilder();
BufferedReader reader=null;
try{
reader = new BufferedReader(new InputStreamReader(in));
String line=null;
while((line = reader.readLine())!=null){
buffer.append(line);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(null!=reader){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return buffer.toString();
}
}
%>
<%
WeiXinHandler handler=new WeiXinHandler();
handler.valid();
%>
相关推荐
[点微]微信平台Discuz 论坛微信运营首选平台微信接口提交提示:TOKEN验证失败、URL请求超时我们在提交开发者中心设置的URL和TOKEN的时候,往往会
微信公众平台Token验证源码,java版!
.net微信公众平台验证Token并在关注时发送欢迎语,vs2010源码;.net微信公众平台验证Token并在关注时发送欢迎语;.net微信公众平台验证Token并在关注时发送欢迎语;.net微信公众平台验证Token并在关注时发送欢迎语;...
首先要开启开发模式必须要进行Token的一个验证,你给出一个地址,微信发送请求,然后你给出相应,就这么简单。虽然说是简单,但是这是事后才说的,官方只有PHP的DEMO,我用JAVA开发的时候各种蛋疼不会弄,不过好在...
微信公众平台JAVA版 【绝对可用】 部分代码: String signature=request.getParameter("signature"); String timestamp=request.getParameter("timestamp"); String nonce=request.getParameter("nonce...
微信企业号 开发平台token验证,修改为自己的token和随机数,企业号id即可。
主要介绍了PHP实现微信公众号验证Token的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
描述:微信公众平台TOKEN验证PHP网页文件。在服务器端的PHP网页,测试通过。 资源名称:微信公众平台TOKEN验证
微信公众平台企业号验证接口、回调 PHP版,本人为了解决这个企业号的验证和发送消息的问题,整整研究了几天时间,因为微信企业号刚推出来,网上资料太少了!后来在一些朋友的帮助下和本人反复调试完善下,终于整理...
java实现公众号绑定域名,微信消息接收和token验证功能
// 后台填写的token,在微信公众平台启用 $wechatObj = new wechatAPI(); $wechatObj->isValid(); class wechatAPI { public function isValid()//验证微信接口,验证函数以外的代码和微信公众号开发token设置相同 ...
微信公众平台token,如果有需要,可以下载看看。
利用java实现微信公众平台接入,实现TOKEN验证,以及信息的回复接口实现。
微信登录换取token的流程 如何将code变成openid和session_key 抛出错误异常和派发令牌 一:微信登录换取token的流程 多说无益,直接上图 小程序获取token.png 这里介绍的主要是后端开发的流程,前端的不是本文...
可以直接复制代码进行验证,带有自动回复功能,经测试,效果很好,android和ios全面兼容
博客教程《微信公众平台开发教程第22篇-如何保证access_token长期有效》的配套代码,教程地址如下: http://blog.csdn.net/lyq8479/article/details/25076223
Java写的微信公众号token验证+实现你问我答功能小项目
微信绑定域名token验证,代码加入项目中编译后放到需要绑定的服务器运行
基于BAE的微信java开发的token验证war包,token是bangbang。做了好几天终于出来了。
关于这个服务器的配置我也是绕了好多弯路,说白了腾讯就是想通过你填的这个URL和Token去验证你有一个自己的服务器(外网可以访问的服务器),其实就是想让你证明你是你自己,呵呵…. 关于这个token随便填不要纠结,...