先在微信公众号里面配置js接口安全域名
HTML代码部分
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
//if(!(/MicroMessenger/i.test(navigator.userAgent)))
//{
// document.body.innerHTML="请在微信打开此链接";
//}
// 注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
// 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
// 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
wx.config({
debug: false,
appId: 'xxxxx',
timestamp: '<%=wx.timestamp%>',
nonceStr: '<%=wx.noncestr%>',
signature: '<%=wx.signature%>',
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
});
wx.ready(function () {
// 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
wx.onMenuShareTimeline({
title: '好帮人平台-',
link: 'xxxxxx',
desc: "分享给您的好友吧",
imgUrl: 'xxxx',
trigger: function (res) {
// alert("分享到朋友圈按钮点击");
},
success: function (res) {
alert("分享成功");
},
cancel: function (res) {
// alert('已取消');
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
alert("errorMSG:" + res);
});
});
</script>
<script type="text/javascript">
<script type="text/javascript">
//if(!(/MicroMessenger/i.test(navigator.userAgent)))
//{
// document.body.innerHTML="请在微信打开此链接";
//}
// 注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
// 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
// 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
wx.config({
debug: false,
appId: 'xxxxx',
timestamp: '<%=wx.timestamp%>',
nonceStr: '<%=wx.noncestr%>',
signature: '<%=wx.signature%>',
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
});
wx.ready(function () {
// 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
wx.onMenuShareTimeline({
title: '好帮人平台-',
link: 'xxxxxx',
desc: "分享给您的好友吧",
imgUrl: 'xxxx',
trigger: function (res) {
// alert("分享到朋友圈按钮点击");
},
success: function (res) {
alert("分享成功");
},
cancel: function (res) {
// alert('已取消');
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
alert("errorMSG:" + res);
});
});
</script>
<script type="text/javascript">
#endregion
/// <summary>
/// 微信的js_api票
/// </summary>
public WeiXinJsapi_ticketJs wx { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
WeiXinOAuth au = new WeiXinOAuth();
// WeiXinAccessTokenResult result = null;
string AppID = "xxxx";
string AppSecret = "xxxx";
if (HttpContext.Current.Session["jsapi"] == null)
{
string actoken = "";
if (HttpContext.Current.Session["token"] != null)
{
actoken = HttpContext.Current.Session["token"] as string;
}
else
{
Access_token ac = au.GetAcess_token(AppID, AppSecret);
if (ac != null)
{
HttpContext.Current.Session["token"] = ac.access_token;
actoken = ac.access_token;
// HttpContext.Current.Session.Timeout = 72000;
}
}
WeiXinJsapi_ticket jsapi = au.GetTickect(actoken);
string ms = JsonSerializeUtils.JsSerializer(jsapi);
WeiXinJsapi_ticketJs jsapis = new WeiXinJsapi_ticketJs();
jsapis.errcode = jsapi.errcode;
jsapis.errmsg = jsapi.errmsg;
jsapis.expires_in = jsapi.expires_in;
jsapis.ticket = jsapi.ticket;
long time = au.GetTimeStamp();
string noncestr = au.GetNoncestr();
jsapis.noncestr = noncestr;
string signature = au.GetSignature(jsapis.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取
jsapis.timestamp = time.ToString();
jsapis.signature = signature;
HttpContext.Current.Session["jsapi"] = jsapis;
HttpContext.Current.Session.Timeout = 72000;
string mss = JsonSerializeUtils.JsSerializer(jsapis);
wx = jsapis;
}
else
{
wx = HttpContext.Current.Session["jsapi"] as WeiXinJsapi_ticketJs;
string mss = JsonSerializeUtils.JsSerializer(wx);
long time = au.GetTimeStamp();
string noncestr = au.GetNoncestr();
wx.noncestr = noncestr;
string signature = au.GetSignature(wx.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取
wx.timestamp = time.ToString();
wx.signature = signature;
}
}
}
}
/// <summary>
/// 微信的js_api票
/// </summary>
public WeiXinJsapi_ticketJs wx { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
WeiXinOAuth au = new WeiXinOAuth();
// WeiXinAccessTokenResult result = null;
string AppID = "xxxx";
string AppSecret = "xxxx";
if (HttpContext.Current.Session["jsapi"] == null)
{
string actoken = "";
if (HttpContext.Current.Session["token"] != null)
{
actoken = HttpContext.Current.Session["token"] as string;
}
else
{
Access_token ac = au.GetAcess_token(AppID, AppSecret);
if (ac != null)
{
HttpContext.Current.Session["token"] = ac.access_token;
actoken = ac.access_token;
// HttpContext.Current.Session.Timeout = 72000;
}
}
WeiXinJsapi_ticket jsapi = au.GetTickect(actoken);
string ms = JsonSerializeUtils.JsSerializer(jsapi);
WeiXinJsapi_ticketJs jsapis = new WeiXinJsapi_ticketJs();
jsapis.errcode = jsapi.errcode;
jsapis.errmsg = jsapi.errmsg;
jsapis.expires_in = jsapi.expires_in;
jsapis.ticket = jsapi.ticket;
long time = au.GetTimeStamp();
string noncestr = au.GetNoncestr();
jsapis.noncestr = noncestr;
string signature = au.GetSignature(jsapis.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取
jsapis.timestamp = time.ToString();
jsapis.signature = signature;
HttpContext.Current.Session["jsapi"] = jsapis;
HttpContext.Current.Session.Timeout = 72000;
string mss = JsonSerializeUtils.JsSerializer(jsapis);
wx = jsapis;
}
else
{
wx = HttpContext.Current.Session["jsapi"] as WeiXinJsapi_ticketJs;
string mss = JsonSerializeUtils.JsSerializer(wx);
long time = au.GetTimeStamp();
string noncestr = au.GetNoncestr();
wx.noncestr = noncestr;
string signature = au.GetSignature(wx.ticket, noncestr, time, HttpContext.Current.Request.Url.ToString(), "");//必须动态获取
wx.timestamp = time.ToString();
wx.signature = signature;
}
}
}
}
注:获取的Access_Token必须是全局Access_Token不是网页的Access—_Token,全局Access_token缓存72000秒,也就是两个小时,微信端不宜频繁访问。
signature 签名每次访问都要更新,切勿保存到session里面
MOdel实体类
/// <summary>
/// 这是获取基础的access_token 每天最多获取2000次
/// </summary>
public class Access_token
{
public string access_token { get; set; }
public string expires_in { get; set; }
}
/// <summary>
/// 微信Js-jdk的票据信息
/// </summary>
public class WeiXinJsapi_ticket
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public string expires_in { get; set; }
}
public class WeiXinJsapi_ticketJs : WeiXinJsapi_ticket
{
/// <summary>
/// 随机数
///
/// </summary>
public string noncestr { get; set; }
/// <summary>
/// 时间戳
/// </summary>
public string timestamp { get; set; }
/// <summary>
/// 签名
/// </summary>
public string signature { get; set; }
}
/// 微信Js-jdk的票据信息
/// </summary>
public class WeiXinJsapi_ticket
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public string expires_in { get; set; }
}
public class WeiXinJsapi_ticketJs : WeiXinJsapi_ticket
{
/// <summary>
/// 随机数
///
/// </summary>
public string noncestr { get; set; }
/// <summary>
/// 时间戳
/// </summary>
public string timestamp { get; set; }
/// <summary>
/// 签名
/// </summary>
public string signature { get; set; }
}
访问微信端类在上一篇文章。