本帖最后由 songwenqi 于 2015-1-14 16:17 编辑
最近在搞一个关于微信分享的项目,之前做的分享,因为微信版本的升级问题导致不可用了,本人测的几个版本是这样的,之前的老的js引用微信版本6.0.0.54实测还是可以继续使用的,但是版本6.0.2.56以上就不能继续了。所以不得不跟随腾讯的脚步继续升级项目的微信分享js功能。
现在微信js SDk比之前相比更加的规范了,所以需要使用的话必须按照微信开放平台的微信JS-SDK说明文档来,步骤很简单。步骤我就不多说了可以到开放平台自己看,个人感觉就是步骤2里的通过config接口注入权限验证配置麻烦一点,这里需要写对应的接口程序来获取签名。[JavaScript] 纯文本查看 复制代码 wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表
});
appId就是公众号id,登陆公众号后台可以看到,我们需要写个接口来实现获取signature签名:[C#] 纯文本查看 复制代码 /// 获取JS-SDK权限验证的签名
/// </summary>
/// <param name="timestamp"></param>
/// <param name="nonceStr"></param>
/// <param name="url"></param>
/// <returns></returns>
public static string GetSignature(long timestamp, string nonceStr, string url)
{
try
{
//这里是获取jsapi_ticket 方法就不粘贴了
var jsapi_ticket = GetJSApi_ticket();
//对所有待签名参数按照字段名的ASCII 码从小到大排序
var string1 = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapi_ticket, nonceStr, timestamp, url);
// 对string1进行sha1签名,得到signature
var signature = FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1");
return signature;
}
catch
{
return string.Empty;
}
} 获取jsapi_ticket 的方法很简单,就是先获取access_token,在通过access_token去get一下官网给的url地址,就会得到jsapi_ticket ,得到这个jsapi_ticket 后就可以通过上面的代码实现来获取签名。需要强调的是jsapi_ticket 过期时间是2小时,需要自己在服务端缓存一下,因为频繁get来获取jsapi_ticket 导致api调用受限,影响自身业务。我们可以采用后台拼接字符串的方式来生成config接口注入权限验证配置,看代码:[C#] 纯文本查看 复制代码 string config = @"wx.config({
debug: false,
appId: 'appid',
timestamp:{0} ,
nonceStr:'{1}',
signature:'{2}',
jsApiList: ['onMenuShareTimeline']
});";
var timestamp = DateTime.Now.Ticks.ToString().Substring(0, 10);//时间戳 我是这样生成的
var noncestr = "kjkjkjkjljkjjjjkj";//这里是随机字符串,可以自己写个算法之类的实现
var uri = Request.Url.ToString().Replace("#", "");//当前网页的URL,不包含#及其后面部分,#后面有参数的需要处理,我这个没对#后参数处理
var signature = WeiXin.GetSignature(Convert.ToInt64(timestamp), noncestr, uri);//调取上面的获取signature的方法
config = config.Replace("{0}", timestamp.ToString()).Replace("{1}", noncestr).Replace("{2}", signature); config可以在aspx页面以<%=config%>来实现,也可以通过ScriptManager.RegisterStartupScript方法注册到页面上。然后就可以调用官方给的分享等js方法来实现自己的功能了。以上就是本人最近做的关于微信分享引用js等的实现方法,写出来和大家一块研究一下。
|