服务器-关于用java开发微信公众平台开发 token验证失败的问题

问题描述

关于用java开发微信公众平台开发 token验证失败的问题

大家好,最近在学习用java开发微信公众平台,第一次写的代码token验证通过了,用的是阿里云的服务器换系统(server2008->2003)后就怎么也通过不过验证。直接输入域名www.zhenggufang.com/aip/longin网页显示404.域名也已经备过案。服务器上的tomcat也启动正常tomcat/conf/server也修改了。多谢提交还是token验证失败。请各位帮忙看看代码如下:

package service;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map;

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

import message.resp.TextMessage;

import util.ValidationUtil;

public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

System.out.println(get 请求);
String signature = request.getParameter(signature);
String timestamp = request.getParameter(timestamp);
String nonce= request.getParameter(nonce);
String echostr=request.getParameter(echostr);
PrintWriter out=response.getWriter();
System.out.println(signature+ signature);
System.out.println(timestamp+ timestamp);
System.out.println(nonce+ nonce);
System.out.println(echostr+ echostr);
验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则
if(ValidationUtil.chechSignature(signature, timestamp, nonce))
{
    out.print(echostr);
}
out.close();
}

接受微信服务器发过来的xml数据包(通过post)形式发过来的

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String respXml=;响应的xml串
    request.setCharacterEncoding(utf-8);
response.setCharacterEncoding(utf-8);
String signature = request.getParameter(signature);
String timestamp = request.getParameter(timestamp);
String nonce= request.getParameter(nonce);
PrintWriter out=response.getWriter();
if(ValidationUtil.chechSignature(signature, timestamp, nonce))
{
    接收并解析来自用户的xml数据包中的内容
    MapString,String reqMap=MessageUtil.parseXml(request);
    String ToUserName=reqMap.get(ToUserName);
    String FromUserName=reqMap.get(FromUserName);
    String MsgType=reqMap.get(MsgType);
    String Content=reqMap.get(Content);
    System.out.println(用户给公众号发的消息+Content);
    开始响应消息给用户
    String respContent=;要响应的文本内容

    构建一条文本消息
    TextMessage textMsg=new TextMessage();
    textMsg.setFromUserName(FromUserName);
    textMsg.setFromUserName(ToUserName);
    textMsg.setCreateTime(new Date().getTime());
    textMsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
    if(MsgType.equals(MessageUtil.RESP_MESSAGE_TYPE_TEXT))
    {
        respContent=大家好,来自工作公众平台的测试消息!!;
    }
    textMsg.setContent(respContent);
    respXml=MessageUtil.messageToXml(textMsg);
    System.out.println(respXml+respXml);
    接受打印的字符
    out.println(respXml);
}
out.close();
out=null;

}

}

package util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**

  • 微信请求校验工具类
  • @author y
    *
    */
    public class ValidationUtil
    {
    private static String token="wlghr0479";
    public static boolean chechSignature(String signature,String timestamp,String nonce)
    {
    //1.将token,timestamp,nonce三个参数排序
    String[] str= new String[]{token,timestamp,nonce};
    Arrays.sort(str);
    //2.将三个参数字符串接成一个字符串
    StringBuilder buff=new StringBuilder();
    for (int i=0;i<str.length;i++)
    {
    buff.append(str[i]);
    }
    //3.进行sha1加密
    MessageDigest md=null;
    String result="";
    try {
    md= MessageDigest.getInstance("SHA-1");
    byte[]date =md.digest(buff.toString().getBytes());
    //将字节数组转换成字符串
    result=bytesToStr(date);
    System.out.println("加密后的"+result);

    } catch (NoSuchAlgorithmException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return result!=null ?(result.equals(signature.toUpperCase())) :false;
    }
    //将直接数组转换成十六进制字符串
    private static String bytesToStr(byte[] byteArray)
    {
    String strDigest="";
    for (int i=0;i<byteArray.length;i++)
    {
    strDigest += byteToHexStr(byteArray[i]);
    }
    return strDigest;
    }
    //将一个字节转换成16进制字符串

private static String byteToHexStr(byte mByte)
{
char[]Digit ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[]temp1=new char[2];
temp1[0]=Digit[mByte>>>4 & 0X0F];
temp1[1]=Digit[mByte & 0X0F];
String str=new String(temp1);
return str;
}

}

<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>service.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/api/login</url-pattern>
</servlet-mapping>

index.jsp

解决方案

http://www.vzhushou.com/helpView_106.html
http://www.cnblogs.com/txw1958/p/token-verify.html

解决方案二:

看下你服务器上的日志,doGet方法中的日志有没有打印呢?如果没有的话,说明你微信配置的公众号服务器地址配置错误了。
直接访问域名报404错误,说明你的项目部署到服务器上都没有正确部署。建议找个阿里云部署项目的教程看看你。

解决方案三:

应该是这个问题,但是就查不出来啊,都困扰我好几天了,毕小宝老师可以给我远程指导一下吗?不胜感激!!

解决方案四:

你上面的地址是www.zhenggufang.com/aip/longin,但是你配置的地址是http://www.zhenggufang.com/api/login,你是打字太快打错了还是微信那边回调地址写错了?

时间: 2024-10-29 15:56:59

服务器-关于用java开发微信公众平台开发 token验证失败的问题的相关文章

node.js微信公众平台开发教程_node.js

用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现).服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端:通信协议为:HTTP:数据格式为:XML. 具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,做出响应.具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,

微信公众平台开发(67)百度百科

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 百度百科 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin67-baike.html     百度百科是一部内容开放.自由的网络百科全书,旨在创造一个涵盖所有领域知识.服务所有互联网用户的中文知识性百科全书.百度百科以平等.协作.分享.自由的互联网精神,提倡网络面前人人平等,所有人共同协作编写百科全书,让知识在一定的技术规则和文化脉络下得以不断组合和拓展. 百度百科 为用户提供一个创造

微信公众平台开发(55)刮刮乐

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 刮刮乐 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin-55-ScratchTicket.html   关于wScratchPad wScratchPad.js,A jQuery plugin to mimic a scratch card or pad behaviour. Allowing you to scratch off an overlay as either a col

微信公众平台开发(54)翻板抽奖

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 砸金蛋 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/crack-golden-eggs.html原文:http://www.helloweba.com/view-blog-218.html   在电视节目中有一种抽奖形式暂且叫做翻板抽奖,台上有一个墙面,墙面放置几个大方块,主持人或者抽奖者翻开对应的方块即可揭晓中奖结果.类似的抽奖形式还可以应用在WEB中,本文将使用PHP+jQuery为您讲解

微信公众平台开发(39)支付宝手机网站支付

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 微信手机支付 支付宝 在线支付 手机支付 网页支付作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/p/weixin39-wireless-alipay.html 支付宝无线产品 手机网站支付 产品简介 手机网站支付主要应用于手机.掌上电脑等无线设备的网页上,通过网页跳转或浏览器自带的支付宝快捷支付实现买家付款的功能,资金即时到账. 申请条件 1.您必须有已建设完成的无线网站(不包含淘宝网店.团购类网

微信公众平台开发(61)预约挂号

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 医院挂号 预约挂号 在线挂号  作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin61-appointment-register.html      <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset

微信公众平台开发(53)砸金蛋

  微信公众平台开发 微信公众平台开发模式 企业微信公众平台 砸金蛋 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/crack-golden-eggs.html 砸金蛋被广泛应用于庆典活动.商家促销.电视娱乐等场合,它的趣味.悬念能迅速活跃现场气氛.同样,我们也可以将砸金蛋应用到WEB网站上,用于开展线上活动.本文将使用jQuery与PHP讲解如何实现一个WEB砸金蛋程序.     准备 我们需要准备道具(素材),即相关图片,包括金蛋图片.蛋砸碎后的图

微信公众平台开发(48)星座运势

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 星座运势API 十二星座运势接口 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/p/weixin-48-horoscope.html   星座运势 星座时尚 情感故事 星座教程 心理测试题 星座运势 塔罗运势 星座今日运 星座每周运 一.获取数据 新浪星座频道提供 每日运势 每周运势 每月运势 年度运势 年度爱情运 以下是 当天的综合运势     以下是每周运势 整体运势 你最近很慷慨,但是要多小

微信公众平台开发(38)一站到底在线答题

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 微信一站到底 一战到底 在线答题 在线做题 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/archive/2013/06/11/wechat38-online_answer.html 微信一站到底 在线答题 在线做题 方倍工作室 一站到底题库 一站到底游戏 一站到底pk版   程序实现过程及源码,均在 微信公众平台开发最佳实践 有详细讲解 =============================