收藏
回答

servlet跳转到的页面里调用wx.config出现invalid signature 错误?

情况如下:

1 直接由微信菜单里调用JSP页面,页面里调用wx.config没有问题,调试都通过,能正确调用API,具体方法是在JSP中直接调用生成signature的类,代码大致如下

    HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();

Map<String, String> signature = new HashMap<String, String>();

signature = SdkConfig.getSignature(req);

String appID = signature.get("appID");

String timestamp = signature.get("timestamp");

String nonceStr = signature.get("nonceStr");

String sign = signature.get("signature");

2 为了实现只有绑定内部系统的粉丝才能访问页面,加入了一个servlet(例如名为controller)控制,判断粉丝如已绑定就重定向原来的页面,否则转向无权限页面,代码大致如下:

request.setCharacterEncoding("UTF-8");

        response.setCharacterEncoding("UTF-8");        

        String code = request.getParameter("code");

        TicketUser ticketUser = new TicketUser();

        Boolean isBinded = ticketUser.valid(code);

        String url = request.getScheme()+"://"+ request.getServerName()+request.getRequestURI()+"?"+request.getQueryString();

        logger.info("url: "+url);

        if (isBinded){

            request.getRequestDispatcher("/SubmitRequest.jsp").forward(request, response);

        }

        else {

            request.getRequestDispatcher("/NoAuthority.jsp").forward(request, response);

        }

3 将菜单里的调用改成从controller进入页面,结果出现invalid signature错误

4 用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 测试生成的signature和程序中生成的是一致的

怀疑request.getRequestDispatcher导致的问题,请大神们帮助看下该怎么处理呢?

回答关注问题邀请回答
收藏

1 个回答

  • 方芳
    方芳
    10-14

    自己顶一下,原来问题出在url上,

    1 用request.getRequestDispatcher("/SubmitRequest.jsp").forward(request, response); 跳转页面后,其实url还是之前调用controller的地址,

    2 但是在SubmitRequest.jsp中调用request.getScheme()+"://"+ request.getServerName()+request.getRequestURI()+"?"+request.getQueryString();取到的url是SubmitRequest.jsp,程序中用这个url得到的签名就不对了

    3 生成签名的类中获取url的方法换成

    url = request.getScheme()+"://"+ request.getServerName()+"/WeiXin/Controller"+"?"+request.getQueryString();

    和controller的url一致,然后再测试,发现wx.config执行成功了。


    10-14
    有用
    回复
登录 后发表内容
问题标签