微信接口开发,包含服务端(采用.net),前端js
//服务端
namespace EatWorld
{
public partial class Default : System.Web.UI.Page
{
string Token = System.Configuration.ConfigurationManager.AppSettings["Token"];
string appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
string appsecret = System.Configuration.ConfigurationManager.AppSettings["appsecret"];
/// <summary>
/// 用户登录验证 验证成功后返回用户json信息
/// </summary>
public void User_Redirect_Uri()
{
if (!string.IsNullOrEmpty(Request["code"]))
{
string userCode = Request["code"].ToString();
string postStr = GetWXAPI_Data("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + userCode + "&grant_type=authorization_code");
WXUserInfo wxu = JsonConvert.DeserializeObject(postStr, typeof(WXUserInfo)) as WXUserInfo;
Session["WXUserInfo"] = wxu;
Session.Timeout = 60 * 2;
WriteText(wxu.refresh_token);
Response.Redirect("/PhoneCarmeor.htm?refresh_token=" + DateTime.Now.ToString("yyyy-MM-dd") + "|" + wxu.refresh_token);
//Response.Write("<script>localStorage['refresh_token']='" + DateTime.Now.ToString("yyyy-MM-dd") + "|" + wxu.refresh_token + "';location.href='" + Request.Url + "';</script>");
}
else
{
string refresh_token = Request["refresh_token"].ToString().Split('|')[0];
if (Session["WXUserInfo"] == null)
{
string postStr = GetWXAPI_Data("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + appid + "&grant_type=refresh_token&refresh_token=" + refresh_token);
WXUserInfo wxu = JsonConvert.DeserializeObject(postStr, typeof(WXUserInfo)) as WXUserInfo;
Session["WXUserInfo"] = wxu;
}
WXUserInfo.UserInfo = Session["WXUserInfo"] as WXUserInfo;
string postUserStr = GetWXAPI_Data("https://api.weixin.qq.com/sns/userinfo?access_token=" + WXUserInfo.UserInfo.access_token + "&openid=" + WXUserInfo.UserInfo.openid + "&lang=zh_CN");
WXUserInfo.UserDetailed = JsonConvert.DeserializeObject(postUserStr, typeof(WXUserDetailed)) as WXUserDetailed;
Response.Clear();
Response.Write(JsonConvert.SerializeObject(WXUserInfo.UserDetailed));
Response.End();
Response.Flush();
}
}
/// <summary>
/// 创建全局Token文件 并且返回Token
/// </summary>
/// <param name="pamFileUrl"></param>
/// <param name="pamSeconds"></param>
/// <param name="pamAccessToken"></param>
public string CreateAccessToken(string pamFileUrl, string pamColumnName)
{
//文件存放地址
pamFileUrl = Server.MapPath(pamFileUrl);
//当前操作
string Operating = "Add";
//数据集
DataSet ds = new DataSet();
//如果磁盘存在此文件则直接加载到数据集上 否则 就重新创建
if (!File.Exists(pamFileUrl))
ds = new Access_Token();
else
ds.ReadXml(pamFileUrl);
//筛选当前数据集中ColumnName是当前key的行
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "ColumnName='" + pamColumnName + "' and ColumnValue<>''";
DataRow dr = null;
//判断是否找到当前ColumnName的行 如果有 临时认为是修改 否则是添加
if (dv.Count > 0)
{
dr = dv[0].Row;
Operating = "Update";
}
else
dr = ds.Tables[0].NewRow();
//获取当前时间
DateTime nowdatetime = DateTime.Now;
DateTime enddatetime = DateTime.Now;
//如果是修改的话 则取出当前行中的时间
if (Operating == "Update")
enddatetime = new DateTime(long.Parse(dr[1].ToString()));
//获取当前时间和修改时间的差
TimeSpan nowtimespan = new TimeSpan(nowdatetime.Ticks);
TimeSpan endtimespan = new TimeSpan(enddatetime.Ticks);
TimeSpan timespan = nowtimespan.Subtract(endtimespan).Duration();
//操作为添加或者生成的值失效后触发
if (Operating == "Add" || timespan.TotalSeconds >= 7200)
{
//定义变量 获取当前秒,
//和从微信API中获取的值一并保存到文件中,
//用来检测是否已失效
long pamSeconds = DateTime.Now.Ticks;
//访问微信API接口返回的值
string postStr = "";
//微信反馈信息临时储存类
WXHelper helper;
//把当前秒和ColumnName加到文件里
dr[1] = pamSeconds;
dr[0] = pamColumnName;
//根据获取ColumnName名称 访问相应的接口 并存储相应的值
switch (pamColumnName)
{
case "globle_access_token":
postStr = GetWXAPI_Data("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret);
helper = Newtonsoft.Json.JsonConvert.DeserializeObject(postStr, typeof(WXHelper)) as WXHelper;
dr[2] = helper.access_token;
break;
case "jsapi_ticket":
postStr = GetWXAPI_Data("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + Request["ACCESS_TOKEN"].ToString() + "&type=jsapi");
helper = Newtonsoft.Json.JsonConvert.DeserializeObject(postStr, typeof(WXHelper)) as WXHelper;
dr[2] = helper.ticket;
break;
}
if (Operating == "Update")
{
ds.Tables[0].AcceptChanges();
ds.WriteXml(pamFileUrl, XmlWriteMode.WriteSchema);
}
else
{
ds.Tables[0].Rows.Add(dr);
ds.WriteXml(pamFileUrl, XmlWriteMode.WriteSchema);
}
}
//返回当前接口返回的值
return dr[2].ToString();
}
/// <summary>
/// 根据地址远程访问web服务器
/// </summary>
/// <param name="pamUrl">要访问的地址</param>
/// <returns></returns>
public string GetWXAPI_Data(string pamUrl)
{
WebRequest webReq = WebRequest.Create(pamUrl);
//接收远程WEB服务器发回的响应
WebResponse webRes = webReq.GetResponse();
//获取文件长度
long fileLength = webRes.ContentLength;
//创建一个文件流,接收返回的流信息
Stream srm = webRes.GetResponseStream();
//使用特殊编码读取流信息
StreamReader srmReader = new StreamReader(srm);
//定义缓冲区
byte[] bufferbyte = new byte[fileLength];
//缓冲区长度
int allByte = (int)bufferbyte.Length;
int startByte = 0;
//读取缓冲区内容
while (fileLength > 0)
{
int downByte = srm.Read(bufferbyte, startByte, allByte);
if (downByte == 0) { break; };
startByte += downByte;
allByte -= downByte;
}
string postStr = Encoding.UTF8.GetString(bufferbyte);
return postStr;
}
protected void Page_Load(object sender, EventArgs e)
{
WriteText("开放平台进来了!\r\n");
WriteText(Request.HttpMethod.ToLower());
if (!string.IsNullOrEmpty(Request["Method"]))
{
switch (Request["Method"].ToString())
{
case "createToken":
if (!Directory.Exists(Server.MapPath("/CDT/XML")))
Directory.CreateDirectory(Server.MapPath("/CDT/XML"));
string token = CreateAccessToken("/CDT/XML/Access_Token.xml", "globle_access_token");
Response.Clear();
Response.Write(token);
Response.End();
Response.Flush();
break;
case "getJsapi_ticket":
if (!Directory.Exists(Server.MapPath("/CDT/XML")))
Directory.CreateDirectory(Server.MapPath("/CDT/XML"));
string jsapi_ticket = CreateAccessToken("/CDT/XML/Access_Token.xml", "jsapi_ticket");
Response.Clear();
Response.Write(jsapi_ticket);
Response.End();
Response.Flush();
break;
case "User_Redirect_Uri":
User_Redirect_Uri();
break;
case "login":
Valid();
break;
}
}
if (IsPostBack)
return;
string postStr = "";
if (Request.HttpMethod.ToLower() == "post")
{
Stream s = System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = Encoding.UTF8.GetString(b);
WriteText("开始");
if (!string.IsNullOrEmpty(postStr))
{
WriteText("进来了1");
//封装请求类
XmlDocument doc = new XmlDocument();
doc.LoadXml(postStr);
XmlElement rootElement = doc.DocumentElement;
XmlNode MsgType = rootElement.SelectSingleNode("MsgType");
WxUser.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
WxUser.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
WxUser.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
WxUser.MsgType = MsgType.InnerText;
WriteTxt("----------粉丝发送过来的消息,消息类型:" + WxUser.MsgType + "----------:" + WxUser.FromUserName);
if (WxUser.MsgType == "text")
{
WxUser.Content = rootElement.SelectSingleNode("Content").InnerText;
WxUser.MsgId = rootElement.SelectSingleNode("MsgId").InnerText;
WriteText(rootElement.SelectSingleNode("Content").InnerText);
ResponseMsg();
}
else if (WxUser.MsgType == "location")
{
WxUser.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
WxUser.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
WxUser.Scale = rootElement.SelectSingleNode("Scale").InnerText;
WxUser.Label = rootElement.SelectSingleNode("Label").InnerText;
}
else if (WxUser.MsgType == "image")
{
WxUser.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
ResponseMsg();
}
else if (WxUser.MsgType == "event")
{
WxUser.Wxevent = rootElement.SelectSingleNode("Event").InnerText;
WxUser.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
}
//WriteText("我终于获取到用户的openid了 哈哈哈 这是FromUserName: " + user.FromUserName + " ,这是ToUserName: " + user.ToUserName);
//Response.Write("<script>alert('" + user.ToUserName + "');</script>");
//WxUser u = Session["WxUser"] as WxUser;
//WriteTxt("----------粉丝发送过来的消息,消息类型:" + u.MsgType + "----------:" + u.ToUserName);
//Session["UserId"] =
string UserId = FuncUser_CDS.FuncUser_CreateOne(WxUser.FromUserName, "", "", "", 0);
WxUser.UserId = Convert.ToInt32(UserId);
//Session["UserId"] = WxUser.UserId;
//WriteText("UserIdDown1:" + UserId);
//Response.Write("<script>alert('" + UserId + "');return;</script>");
WriteText("进来了");
}
}
else
{
Response.Write("没进来");
//Valid();
}
if (!string.IsNullOrEmpty(WxUser.UserId.ToString()) && WxUser.UserId > 0)
{
SessionWx.Add(WxUser.FromUserName, WxUser.UserId);
}
//WriteText(WxUser.FromUserName + ",UserId=" + UserId);
if (WxUser.FromUserName != "")
{
//NavType=
if (!string.IsNullOrEmpty(Request["NavType"]))
{
switch (Request["NavType"])
{
case "BusinessView":
Response.Redirect("/Business_View.html?BusinessKey=" + Request["BusinessKey"]);
break;
}
}
else
{
Response.Redirect("/Business_List.html");
}
}
//}
//Response.Write("<script>alert('抱歉,因为网络问题获取用户资料失败!请重新点餐!');return;</script>");
}
/// <summary>
/// 调试写入文件
/// </summary>
/// <param name="context"></param>
public void WriteText(string context)
{
FileStream fs = new FileStream(Server.MapPath("/TextFile1.txt").ToString(), FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
sw.Write(context);
sw.Close();
fs.Close();
}
/// <summary>
/// 验证微信签名
/// </summary>
/// * 将token、timestamp、nonce三个参数进行字典序排序
/// * 将三个参数字符串拼接成一个字符串进行sha1加密
/// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
/// <returns></returns>
private bool CheckSignature()
{
string signature = Request.QueryString["signature"];
string timestamp = Request.QueryString["timestamp"];
string nonce = Request.QueryString["nonce"];
string[] ArrTmp = { Token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join("", ArrTmp);
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}
private void Valid()
{
string echoStr = Request.QueryString["echoStr"];
if (CheckSignature())
{
if (!string.IsNullOrEmpty(echoStr))
{
Response.Clear();
Response.Write(echoStr);
Response.Flush();
Response.End();
}
}
}
/// <summary>
/// 回复消息(微信信息返回)
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(/*WxUser user*/)
{
string resxml = "<xml><ToUserName><![CDATA[" + WxUser.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + WxUser.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";
try
{
if (WxUser.MsgType == "text")
{
int count = 0;
if (WxUser.Content.Trim() == "单图")
{
count = 1;
resxml += "<MsgType><![CDATA[news]]></MsgType><ArticleCount>" + count + "</ArticleCount><Articles>";
resxml += "<item><Title><![CDATA[这里是标题]]></Title><Description><![CDATA[这里是描述,当是单图文的时候描述才会展示]]></Description><PicUrl><![CDATA[http://imgsrc.baidu.com/product_name/pic/item/32374836acaf2edd470a31508d1001e93801934a.jpg]]></PicUrl><Url><![CDATA[http://www.baidu.com]]></Url></item>";//URL是点击之后跳转去那里,这里跳转到百度
resxml += "</Articles><FuncFlag>0</FuncFlag></xml>";
}
else if (WxUser.Content.Trim() == "多图")
{
count = 10;
resxml += "<MsgType><![CDATA[news]]></MsgType><ArticleCount>" + count + "</ArticleCount><Articles>";
for (int i = 0; i < count; i++)
{
resxml += "<item><Title><![CDATA[这里是标题" + (i + 1) + "]]></Title><Description><![CDATA[这里是描述,当是单图文的时候描述才会展示]]></Description><PicUrl><![CDATA[http://imgsrc.baidu.com/product_name/pic/item/32374836acaf2edd470a31508d1001e93801934a.jpg]]></PicUrl><Url><![CDATA[http://www.baidu.com]]></Url></item>";//URL是点击之后跳转去那里,这里跳转到百度
}
resxml += "</Articles><FuncFlag>0</FuncFlag></xml>";
}
else
{
if (WxUser.Content == "1234")
{
resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[http://17haidai.cn/IFrame_Jb.htm]]></Content><FuncFlag>0</FuncFlag></xml>";
WriteText("\n\n返回给粉丝的消息:" + resxml);
System.Web.HttpContext.Current.Response.Write(resxml);
System.Web.HttpContext.Current.Response.End();
Response.End();
}
}
}
else if (WxUser.MsgType == "location")
{
resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你发过来的是地理消息\n哈哈]]></Content><FuncFlag>0</FuncFlag></xml>";
}
else if (WxUser.MsgType == "image")
{
resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你发一张图片过来我怎么识别啊,你以为我有眼睛啊\n哈哈]]></Content><FuncFlag>0</FuncFlag></xml>";
}
else if (WxUser.MsgType == "event")
{
if (WxUser.Wxevent == "unsubscribe")
{
//取消关注
}
else
{
//新增关注
resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[谢谢你关注我。]]></Content><FuncFlag>0</FuncFlag></xml>";
}
}
}
catch (Exception ex)
{
WriteTxt("异常:" + ex.Message);
}
DataView dv = ReplyTemp_CDS.ReplyTemp_ByKeyWordGet(WxUser.Content).Tables[0].DefaultView;
if (dv.Count > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append(" <xml> ");
sb.Append(" <ToUserName><![CDATA[" + WxUser.FromUserName + "]]></ToUserName> ");
sb.Append(" <FromUserName><![CDATA[" + WxUser.ToUserName + "]]></FromUserName> ");
sb.Append(" <CreateTime>" + WxUser.CreateTime + "</CreateTime> ");
sb.Append(" <MsgType><![CDATA[news]]></MsgType> ");
sb.Append(" <ArticleCount>1</ArticleCount> ");
sb.Append(" <Articles> ");
sb.Append(" <item> ");
sb.Append(" <Title><![CDATA[" + dv[0]["TempTitle"].ToString() + "]]></Title> ");
sb.Append(" <Description><![CDATA[" + dv[0]["TempContent"].ToString() + "]]></Description> ");
sb.Append(" <PicUrl><![CDATA[http://eat.onkm.net/asd/" + dv[0]["BusinessKey"].ToString() + "/ReplyTemp/img/" + dv[0]["TempId"].ToString() + "." + ((enmHasPic)dv[0]["TempExtend"]).ToString() + "]]></PicUrl>");
//sb.Append(" <PicUrl><![CDATA[http://eat.onkm.net/asd/GLMyinyuect/ReplyTemp/img/1.jpg]]></PicUrl>");
WriteText(dv[0]["TempExtend"].ToString());
string pamTempUrl = Convert.ToInt32(dv[0]["TempType"]) == Convert.ToInt32(enmReplyTempType.内部链接) ? "http://eat.onkm.net/Default.aspx?BusinessKey=" + dv[0]["BusinessKey"].ToString() + "&TypeId=0&NavType=BusinessView" : dv[0]["TempUrl"].ToString();
sb.Append(" <Url><![CDATA[" + pamTempUrl + "]]></Url> ");
sb.Append(" </item> ");
sb.Append(" </Articles> ");
sb.Append(" </xml> ");
System.Web.HttpContext.Current.Response.Write(sb.ToString());
System.Web.HttpContext.Current.Response.End();
Response.End();
}
}
/// <summary>
/// unix时间转换为datetime
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
private DateTime UnixTimeToTime(string timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
/// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// 记录bug,以便调试
/// </summary>
///
/// <returns></returns>
public bool WriteTxt(string str)
{
try
{
FileStream fs = new FileStream(Server.MapPath("/bugLog.txt"), FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.WriteLine(str);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
catch (Exception)
{
return false;
}
return true;
}
}
//微信请求类
/// <summary>
/// 微信请求类
/// </summary>
public class WeiXinRequest
{
private string toUserName;
/// <summary>
/// 消息接收方微信号,一般为公众平台账号微信号
/// </summary>
public string ToUserName
{
get { return toUserName; }
set { toUserName = value; }
}
private string fromUserName;
/// <summary>
/// 消息发送方微信号
/// </summary>
public string FromUserName
{
get { return fromUserName; }
set { fromUserName = value; }
}
private string createTime;
/// <summary>
/// 创建时间
/// </summary>
public string CreateTime
{
get { return createTime; }
set { createTime = value; }
}
private string msgType;
/// <summary>
/// 信息类型 地理位置:location,文本消息:text,消息类型:image,音频:voice,视频:video,取消关注:Action
/// </summary>
public string MsgType
{
get { return msgType; }
set { msgType = value; }
}
private string content;
/// <summary>
/// 信息内容
/// </summary>
public string Content
{
get { return content; }
set { content = value; }
}
private string msgId;
/// <summary>
/// 消息ID(文本)
/// </summary>
public string MsgId
{
get { return msgId; }
set { msgId = value; }
}
private string wxevent;
/// <summary>
/// 取消关注时的Event节点
/// </summary>
public string Wxevent
{
get { return wxevent; }
set { wxevent = value; }
}
private string eventKey;
/// <summary>
/// 取消关注时的EventKey节点
/// </summary>
public string EventKey
{
get { return eventKey; }
set { eventKey = value; }
}
private string location_X;
/// <summary>
/// 地理位置纬度
/// </summary>
public string Location_X
{
get { return location_X; }
set { location_X = value; }
}
private string location_Y;
/// <summary>
/// 地理位置经度
/// </summary>
public string Location_Y
{
get { return location_Y; }
set { location_Y = value; }
}
private string scale;
/// <summary>
/// 地图缩放大小
/// </summary>
public string Scale
{
get { return scale; }
set { scale = value; }
}
private string label;
/// <summary>
/// 地理位置信息
/// </summary>
public string Label
{
get { return label; }
set { label = value; }
}
private string picUrl;
/// <summary>
/// 图片链接,开发者可以用HTTP GET获取
/// </summary>
public string PicUrl
{
get { return picUrl; }
set { picUrl = value; }
}
}
//前端
WX_Login: function (sucessUrl) {
if ((Request["code"] == "" || Request["code"] == null || Request["code"] == undefined))
location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + sky.params.appid + "&redirect_uri=" + encodeURIComponent("http://17haidai.cn/IFrame_Jb.htm?successurl=" + sucessUrl + "&BusinessKey=" + scope.BusinessKey + (Request["navType"] != null && Request["navType"] != undefined ? "&navType=share" : "") + "&TypeParent=" + (scope.TypeParent == undefined ? "" : scope.TypeParent)) + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
else
$.get("/ase/WXLogin.ashx", { "Method": "Get_UserInfo", "Wx_Method": "user_access_token", "code": Request["code"] }, function (msg) {
msg = eval("[" + msg + "]");
sky.setCookie("user_access_token", msg[0].access_token, 24);
sky.setCookie("user_refresh_token", msg[0].refresh_token, 720);
sky.setCookie("user_openId", msg[0].openid, 24);
});
},
Get_User_Access_Token: function () {
$.get("/ase/WXLogin.ashx", { "Method": "Get_UserInfo", "Wx_Method": "user_refresh_token", "user_refresh_token": sky.getCookie("user_refresh_token") }, function (msg) {
msg = eval("[" + msg + "]");
sky.setCookie("user_access_token", msg[0].access_token, 24);
sky.setCookie("user_refresh_token", msg[0].refresh_token, 720);
sky.setCookie("user_openId", msg[0].openid, 24);
});
}, Get_Globle_Access_Token: function () {
if (sky.getCookie("globle_access_token") == "") {
$.get("/ase/WXLogin.ashx", { "Method": "Get_UserInfo", "Wx_Method": "globle_access_token" }, function (msg) {
msg = eval("[" + msg + "]");
sky.setCookie("globle_access_token", msg[0].access_token, 2);
sky.Get_Jsapi_Ticket();
});
}
else
sky.Get_Jsapi_Ticket();
}, Get_Jsapi_Ticket: function () {
if (sky.getCookie("jsapi_ticket") == "")
$.get("/ase/WXLogin.ashx", { "Method": "Get_UserInfo", "Wx_Method": "jsapi_ticket", "globle_access_token": sky.getCookie("globle_access_token") }, function (msg) {
msg = eval("[" + msg + "]");
sky.setCookie("jsapi_ticket", msg[0].ticket, 2);
sky.WX_Js_Valid(sky.getCookie("jsapi_ticket"));
});
else
sky.WX_Js_Valid(sky.getCookie("jsapi_ticket"));
}, WX_Js_Valid: function (jsapi_ticket) {
var qm = sign(jsapi_ticket, location.href);
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: sky.params.appid, // 必填,公众号的唯一标识
timestamp: qm.timestamp, // 必填,生成签名的时间戳
nonceStr: qm.nonceStr, // 必填,生成签名的随机串
signature: qm.signature, // 必填,签名,见附录1
jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'previewImage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
},
getCookie: function (c_name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=")
if (c_start != -1) {
c_start = c_start + c_name.length + 1
c_end = document.cookie.indexOf(";", c_start)
if (c_end == -1) c_end = document.cookie.length
return unescape(document.cookie.substring(c_start, c_end))
}
}
return "";
}, setCookie: function (c_name, value, expiredays) {
var exdate = new Date();
exdate.setHours(exdate.getHours() + expiredays);
document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
},//调用微信js准备方法
Wx_JSRead: function (pamTitle, pamImgUrl, pamLink, pamDesp) {
//当微信js验证成功后触发此函数
wx.ready(function () {
// $(".loading").hide();
wx.onMenuShareTimeline({
title: pamTitle, // 分享标题
link: pamLink, // 分享链接
imgUrl: pamImgUrl, // 分享图标
trigger: function (res) {
//alert('用户点击分享到朋友圈');
},
success: function () {
var sky_initComplete = setInterval(function () {
clearInterval(sky_initComplete);
sky.Alter("您已分享到朋友圈!");
var Alter_Inver = setTimeout(function () {
clearInterval(Alter_Inver);
$(".sky_alter .sky_alter_close").click();
}, 1000);
}, 1);
// alert("分享朋友圈成功");
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
},
fail: function (res) {
//alert('wx.onMenuShareTimeline:fail: ' + JSON.stringify(res));
}
});
// pamTitle = "能帮您快速定位附近商家,查看商家详情、楼层图、所售品牌、规划路线,助您在海外旅行时快速找到想要的商家,是您海外旅行的必备好帮手。";
wx.onMenuShareAppMessage({
title: pamTitle, // 分享标题
desc: pamDesp, // 分享描述
link: pamLink, // 分享链接
imgUrl: pamImgUrl, // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
}