微信分享报invalid signature签名错误解决方法

原创 2017年01月19日 14:47:14

2.invalid signature签名错误。建议按如下顺序检查:

   1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

   2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

   3.确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。

   4.确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

   5.确保一定缓存access_token和jsapi_ticket。

   6.确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

下面就是分享的URL格式

var url=location.href.split('#')[0];
        url = encodeURIComponent(url);


签名算法:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class WeixinSign {
/*    public static void main(String[] args) {
        String jsapi_ticket = "jsapi_ticket";
        // 注意 URL 一定要动态获取,不能 hardcode
        String url = "http://example.com";
        Map<String, String> ret = sign(jsapi_ticket, url);
        for (Map.Entry entry : ret.entrySet()) {
            System.out.println(entry.getKey() + ", " + entry.getValue());
        }
    };
*/
    public static Map<String, String> sign(String jsapi_ticket, String url) {
        Map<String, String> ret = new HashMap<String, String>();
        String nonce_str = create_nonce_str();
        String timestamp = create_timestamp();
        String string1;
        String signature = "";


        //注意这里参数名必须全部小写,且必须有序
        string1 = "jsapi_ticket=" + jsapi_ticket +
                  "&noncestr=" + nonce_str +
                  "&timestamp=" + timestamp +
                  "&url=" + url;
        System.out.println(string1);


        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(string1.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }


        ret.put("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);


        return ret;
    }


    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }


    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }


    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
}

微信分享报invalid signature签名错误解决方法

微信分享报invalid signature签名错误,解决方法
  • gong0585
  • gong0585
  • 2017年01月19日 14:47
  • 3323

微信分享链接后再次分享提示config:invalid signature

一种解决办法,并不是都是这样。我遇到的是这样。 js端ajax请求传递参数url的时候php接收会丢失参数。 需要:url = encodeURIComponent(url); 之后再传...
  • Android_Xiaoqi
  • Android_Xiaoqi
  • 2017年10月13日 14:50
  • 637

关于前端微信分享jssdk config:invalid signature 签名错误

关于前端微信分享jssdk config:invalid signature 签名错误这几天刚刚把微信写完,说出来你可能不信,我写个微信分享一起用了2个礼拜。中间各种心酸,一开始后台老大哥帮我把后台签...
  • StevenTang957
  • StevenTang957
  • 2017年08月25日 11:29
  • 1856

解决微信分享iphone端报invalid signature

之前分享用的好好的,但是没有用苹果机测试. 后来才发现页面会报错误. 直接写解决方法了. 把targetUrl进行encode一下就行了. 原先是这样的 var targetUr...
  • z670707170
  • z670707170
  • 2017年09月25日 15:40
  • 129

微信js sdk invalid signature签名错误 问题解决。

转自:http://my.oschina.net/u/2308739/blog/371414 1 2 3 /**最近在做微信js sdk...
  • wyx100
  • wyx100
  • 2015年06月06日 15:52
  • 5989

微信JS-SDK 调用config 出现invalid signature签名错误的部分解决方法

网络中常见的问题,都有提到这里就不说了,我只提一下自己出现invalid signature签名错误的解决方法 在我解决了一系列参数值的获取问题后,在传入配置的时候还是出现了invalid signa...
  • et198901
  • et198901
  • 2016年02月18日 09:31
  • 12496

微信js sdk invalid signature签名错误

准备工作也说一下 获取accesstoken: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183&token=&l...
  • bestcxx
  • bestcxx
  • 2016年04月20日 11:18
  • 3108

微信公众号之:JSSDK接入以及invalid signature等常见错误问题

最近在搞微信公众号开发,进行到网页开发部分被坑了一天,最坑的问题就是invalid signature,而网上大部分解答这个问题的都没有说清楚,都直接丢文档。博主决定这样很不好。本文是博主结合自身遇到...
  • u011225099
  • u011225099
  • 2017年07月31日 17:42
  • 4550

微信invalid signature签名错误可能原因

这两天在搞微信分享自定义,wx.config的时候总是报invalid signature错误,错误原因总结如下: 1时间戳timestamp一定要是10位数字 ,我使用nodejs写的var ti...
  • TC1031
  • TC1031
  • 2015年10月14日 20:16
  • 604

App微信分享包签名错误和更改

场景:调试Android应用的微信分享功能,包签名更改后无法分享。 之前看了一片文章说,调试过的appid和包签名会缓存在微信本地应用里...
  • Leytton
  • Leytton
  • 2017年03月18日 18:15
  • 2959
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信分享报invalid signature签名错误解决方法
举报原因:
原因补充:

(最多只允许输入30个字)