消息关闭
    暂无新消息!
也在微信的微信 JS 接口签名校验工具上测试了生成的签名与我的只是大小写不同
这是后台代码

protected void Page_Load(object sender, EventArgs e) {
        int nonceStrLength = 16;
        timestamp = GetTimeStamp();
        nonceStr = GetRnd(nonceStrLength, true, true, true, false, "" );
        url = Request.Url.AbsoluteUri.ToString() + "?params=value";
        jsapi_ticket = GetJsapi_ticket(); 
        //拼接字符串
        string string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;
        //进行SHA1加密
        signature = GetPwd(string1);
    }

    #region 通过accessToken获取jsapi_ticket
    public static string GetJsapi_ticket()
    {
        string accesstoken ;
        string jsapi_ticket = string.Empty;
        accesstoken = FC.GetAccessToken();
        string getUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi";
        getUrl = string.Format(getUrl, accesstoken);
        Uri uri = new Uri(getUrl);
        HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(uri);
        webReq.Method = "GET";
        //获取返回信息
        HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
        StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.Default);
        string returnJason = streamReader.ReadToEnd();
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        Dictionary<string, object> json = (Dictionary<string, object>)serializer.DeserializeObject(returnJason);
        object value;
        if (json.TryGetValue("ticket", out value))
        {
            jsapi_ticket = value.ToString();
        }
        MC.WriteLog(jsapi_ticket);
        return jsapi_ticket;
    }
    #endregion

    #region 获取时间戳
    public static string GetTimeStamp()
    {
        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return Convert.ToInt64(ts.TotalSeconds).ToString();
    } 
    #endregion

    #region 生成随机字符串nonceStr
    ///<summary>
    ///生成随机字符串
    ///</summary>
    ///<param name="length">目标字符串的长度</param>
    ///<param name="useNum">是否包含数字,1=包含,默认为包含</param>
    ///<param name="useLow">是否包含小写字母,1=包含,默认为包含</param>
    ///<param name="useUpp">是否包含大写字母,1=包含,默认为包含</param>
    ///<param name="useSpe">是否包含特殊字符,1=包含,默认为不包含</param>
    ///<param name="custom">要包含的自定义字符,直接输入要包含的字符列表</param>
    ///<returns>指定长度的随机字符串</returns>
    public string GetRnd(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
    {
        byte[] b = new byte[4];
        new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
        Random r = new Random(BitConverter.ToInt32(b, 0));
        string s = null, str = custom;
        if (useNum == true) { str += "0123456789"; }
        if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
        if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
        if (useSpe == true) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
        for (int i = 0; i < length; i++)
        {
            s += str.Substring(r.Next(0, str.Length - 1), 1);
        }
        return s;
    }
    #endregion

    #region SHA1加密
    public static string GetPwd( string str)
    {
        byte[] cleanBytes = Encoding.Default.GetBytes(str);
        byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes);
        return BitConverter.ToString(hashedBytes).Replace("-", "");
    }
    #endregion


这是前端JS代码


wx.config({
debug: true,
appId: '<%= appId%>',
timestamp: '<%= timestamp%>',
nonceStr: '<%= nonceStr%>',
signature: '<%= signature%>',
jsApiList: ['chooseImage']
})
wx.ready(function() {
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function(res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
}
});
})
wx.error(function(res) {
    alert(JSON.stringify(res))
})

3个回答

︿ 0
看了下你上面的图片,JSAPITICKET,很明显签名工具上的签名是kgt8ON,  但是你另外一张是  80N,一个是字母O,一个是数字0,最好的方式就是,你把签名工具上的TICKET复制到文本中,然后再复制QQ上的TICKET去查找刚刚复制的文本,你就知道你这两串东西是不是一致了