收藏
回答

H5分享提示签名错误,是后端还是前端的问题?

在后端返回的:随机字符串,时间戳,和后端生成的签名,还有url;经过http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign这个验证,后端返回的签名与验证工具生成的签名一致.但是前端用到的时候,报

wx-js-sdk config:fail,Error: invalid signature签名无效错误
想问下大佬,是后端还是前端的问题

最后一次编辑于  11-11
回答关注问题邀请回答
收藏

3 个回答

  • 微盟
    微盟
    11-11

    出现这种问题 基本上是前端调用后端签名接口时所传当前url不对。

    通常遇到这种情况的话,在分享的页面打印一下当前页面的url 和在wx.init 的页面打印一下url 如果不一样 分享是不会成功的,如果发现不一样的话 需要在wx.init的时候重新做一次init。单页面应用的history模式 会有一部分安卓机器出现这种问题

    11-11
    赞同
    回复 5
    • 。。。
      。。。
      11-11
      wx.init 页面是哪个,能说一下吗
      11-11
      回复
    • 微盟
      微盟
      11-11回复。。。
      啊? 你们页面不做wx.init? 先看下这个文档吧
       https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4
      11-11
      回复
    • 微盟
      微盟
      11-11
      11-11
      回复
    • 。。。
      。。。
      11-11回复微盟
      能告诉下怎么打印的吗
      11-11
      回复
    • 微盟
      微盟
      11-11回复。。。
      你是后端? 如果是后端 跟前端伙伴确认下我第一次回复里面的东西。打印的话 就是输出 location.href
      11-11
      回复
  • 。。。
    。。。
    11-11
    public Map<String, String> SHA1(String url, String jsapiTicket) {
            Map<String, String> map = new HashMap<>(6);
            String nonceStr = getRandomStr(16);//生成16位随机字符串
            String timestamp = createTimestamp();
            String string1;
            String signature = ""; //签名
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapiTicket +
                    "&noncestr=" + nonceStr +
                    "&timestamp=" + timestamp +
                    "&url=" + url;
            try {
                MessageDigest digest = MessageDigest
                        .getInstance("SHA-1");
                digest.update(string1.getBytes());
                byte messageDigest[] = digest.digest();
                StringBuffer hexStr = new StringBuffer();
                for (int i = 0; i < messageDigest.length; i++) {
                    String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                    if (shaHex.length() < 2) {
                        hexStr.append(0);
                    }
                    hexStr.append(shaHex);
                }
                signature = hexStr.toString(); //签名
                map.put("url", url);
                map.put("jsapi_ticket", jsapiTicket);
                map.put("nonceStr", nonceStr);
                map.put("timestamp", timestamp);
                map.put("signature", signature);
                return map;
            catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }

    这个是签名生成方法


    11-11
    赞同
    回复
  • Hanks🇨🇳
    Hanks🇨🇳
    11-11

    不管谁的问题,仔细比对参数,后端签名方法肯定没有问题了,就是参数没用对

    11-11
    赞同
    回复 9
    查看更多(4)
问题标签