protected string GetTimeStamp_Str=""; protected string nonceStr_Str = ""; protected string signature_Str = ""; protected void Page_Load(object sender, EventArgs e) { GetTimeStamp_Str = GetTimeStamp(); //nonceStr_Str = new Guid().ToString("N"); var GetTakenStr = HttpHelper.HttpGetConnectToServer("https://api.weixin.qq.com/cgi-bin/token", "grant_type=client_credential&appid=wx6596bfb9388cc63c&secret=eb0c0d643d4e7bd3a43b61fd1031a2f2");//get Taken_Model taken_Model=JsonHelper.DeserializeObject<Taken_Model>(GetTakenStr); var jsapi_ticket_Str = HttpHelper.HttpGetConnectToServer("https://api.weixin.qq.com/cgi-bin/ticket/getticket", "access_token=" + taken_Model.access_token + "&type=jsapi");//get Jsapi_Ticket jsapi_ticket = JsonHelper.DeserializeObject<Jsapi_Ticket>(jsapi_ticket_Str); TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); var tstem = GetTimeStamp_Str;// Convert.ToInt64(ts.TotalSeconds).ToString(); var noncestr = "tianpeng"; //var jsapi_ticket = "sM4AOVdWfPE4DxkXGEs8VF-YEiVh31f4b2Z4rz5E1kuduFEPIz0RgvSnRKebdULuK-yWvsNB_21vVh3IhyR1yg"; var jmdata = "jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}"; jmdata = string.Format(jmdata, jsapi_ticket.ticket, noncestr, tstem, "http://hstwx.wisdom-gps.com:52539/SignUp/SignUp.aspx"); signature_Str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(jmdata, "sha1"); nonceStr_Str = noncestr; } protected void btn_Login_Click(object sender, EventArgs e) { } public static string GetTimeStamp() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(ts.TotalSeconds).ToString(); } } public class Taken_Model { public string access_token { get; set; } public int expires_in { get; set; } } public class Jsapi_Ticket { public int errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public int expires_in { get; set; } }
前端的写法
前端的写法
<script> var GetTimeStamp_Str="<%=GetTimeStamp_Str%>"; var nonceStr_Str ="<%=nonceStr_Str%>"; var signature_Str = "<%=signature_Str%>"; wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: ‘wx6596bfb9388cc63c‘, // 必填,公众号的唯一标识 timestamp: GetTimeStamp_Str, // 必填,生成签名的时间戳 nonceStr: nonceStr_Str, // 必填,生成签名的随机串 signature: signature_Str,// 必填,签名,见附录1 jsApiList: [‘chooseImage‘, ‘previewImage‘] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 }); wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); function aaaaa() { wx.chooseImage({ count: 1, // 默认9 sizeType: [‘original‘, ‘compressed‘], // 可以指定是原图还是压缩图,默认二者都有 sourceType: [‘album‘, ‘camera‘], // 可以指定来源是相册还是相机,默认二者都有 success: function (res) { var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片 alert("fsdfsfsd"); } }); } </script>
如果
signature不合法的话 可以在测试地址中比对http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
如果url不合法的话 在js安全域名里面处理
JS接口安全域名
hstwx.wisdom-gps.com:52539 成功~~~~~(前端还要加个引用)
测试地址:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index