如何通过微信自定义菜单跳转到自己的网站
2014-05-12 00:20
519 查看
每个人注册微信后都会有个都有的ID即(OPENID),所以如果你的移动端使用了一些公司内网需要分享的信息,并且需要登录才可以共享,那么你可以通过微信实现自动跳转.OK,下面是如何实现的步骤:
首先,你的登录用户的表结构需要增加一列,暂且我们就叫它OPID吧,每个人在库中都是一条都有的信息,因此,在登录后我们将相应的OPENID填到这个字段中,作为登录的凭证即可实现整个登录的验证,思想和通过文本框输入用户名密码一样.
这里必须引入个链接:http://www.cnblogs.com/szw/
下载链接中的https://github.com/JeffreySu/WeiXinMPSDK并打开。
现在的关键点就落在如何找到这个OPENID上了。
这个有两种解决方案:
1.暂未通过验证的微信号
未通过认证的微信号可以通过页面获取OPENID,后打开找到CustomMessageHandler_Events.cs找到case"OneClick"事件,修改里面的内容,小测一下是否可以使用.
以下步骤请登录.
1.1获取Token:
http请求方式:GEThttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
利用你登录微信好的APPID和APPSECRET替换黄色部分访问你将得到
微信提供了两种访问方式,区别如下
如果上面一段消息发送过去,微信官网的接收消息告诉我们你会得到如下XML:
注意这里的FromUserName节点就是登录者的OPENID哦。
这也就是为什么OnClick事件中的要带opid这个参数的原因。
1.4在Login.aspx中做验证
OPENID都已经取来了然后就是登录的处理了:
1.4.1第一次登录的时候,让用户转到登录界面,输入用户名密码,顺便将当前人的OPENID写到表中,然后再让用户登录。
1.4.2第二次登录时,首先验证登录者传过来的opid是否在表中存在,存在就跳过登录直接进入主界面,否则就重复1.4.1步骤。
[b]2.通过验证的微信号[/b]
黄色的是你的回调地址,注意替换APPID。
有些节点并不需要。
2.3现在可以写Login.aspx.cs了
执行以上之后,用户首次登录获取Token的同时会获取用户OpenID,之后再用用户名和密码登录,此时系统将用户的OPenID写到库中。再次登录的时候奇迹出现了,直接跳到主页面,无需登录。
首先,你的登录用户的表结构需要增加一列,暂且我们就叫它OPID吧,每个人在库中都是一条都有的信息,因此,在登录后我们将相应的OPENID填到这个字段中,作为登录的凭证即可实现整个登录的验证,思想和通过文本框输入用户名密码一样.
这里必须引入个链接:http://www.cnblogs.com/szw/
下载链接中的
现在的关键点就落在如何找到这个OPENID上了。
这个有两种解决方案:
1.暂未通过验证的微信号
未通过认证的微信号可以通过页面获取OPENID,后打开找到CustomMessageHandler_Events.cs找到case"OneClick"事件,修改里面的内容,小测一下是否可以使用.
以下步骤请登录.
1.1获取Token:
http请求方式:GET
利用你登录微信好的APPID和APPSECRET替换黄色部分访问你将得到
{"access_token":"ACCESS_TOKEN","expires_in":7200} 1.2填写移动端的显示信息 打开https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create 输入Token并填写按钮信息:
{ "button":[ { "type":"click", "name":"进入微站", "key":"OneClick" } ] }
微信提供了两种访问方式,区别如下
click: 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; view: 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。 1.3修改显示信息
找到CustomMessageHandler_Events.cs找到case"OneClick"事件,修改如下:
varstrongResponseMessage=CreateResponseMessage<ResponseMessageText>(); reponseMessage=strongResponseMessage; varstr=string.Format("Hi亲,<ahref='{0}?opid={1}'>猛击这里登录</a>.","http://mobile.YOURURL.com/pages/login.aspx",requestMessage.FromUserName); strongResponseMessage.Content=str;
如果上面一段消息发送过去,微信官网的接收消息告诉我们你会得到如下XML:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[thisisatest]]></Content> <MsgId>1234567890123456</MsgId> </xml>
注意这里的FromUserName节点就是登录者的OPENID哦。
这也就是为什么OnClick事件中的要带opid这个参数的原因。
1.4在Login.aspx中做验证
OPENID都已经取来了然后就是登录的处理了:
1.4.1第一次登录的时候,让用户转到登录界面,输入用户名密码,顺便将当前人的OPENID写到表中,然后再让用户登录。
1.4.2第二次登录时,首先验证登录者传过来的opid是否在表中存在,存在就跳过登录直接进入主界面,否则就重复1.4.1步骤。
[b]2.通过验证的微信号[/b]
上面的步骤要先点击自定义菜单,收到回复消息后才可以进行登录,用户体验并不好.既然我有了个按钮,那么我直接点击这个按钮登录不就OK了吗? OK,这个就需要关注1.2中的View事件了,这个需要高级用户的授权认证.
微信使用的是OAuth2认证,关于如何进行此认证请参考:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html 我这里只关心登录。注意上面链接里的一句话【应用授权作用域:由于snsapi_base只能获取到openid,意义不大,所以我们使用snsapi_userinfo】,我们只关心OPENID的获取,因此我们的回调链接中使用
snsapi_base即可。微信自定义菜单如下:
{ "button":[ { "type":"view", "name":"进入微站", "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://wx.YOURURL.com/Pages/Login.aspx&response_type=code&scope=snsapi_base&state=1#wechat_redirect" } ] }
黄色的是你的回调地址,注意替换APPID。
具体实现步骤如下: 2.1建立四个个需要的类OAuth_Token.cs/Config.cs/JsonHelper.cs
publicclassOAuth_Token { publicOAuth_Token() { // //TODO:在此处添加构造函数逻辑 // } //access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同 //expires_inaccess_token接口调用凭证超时时间,单位(秒) //refresh_token用户刷新access_token //openid用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID //scope用户授权的作用域,使用逗号(,)分隔 publicstringaccess_token{get;set;} publicstringexpires_in{get;set;} publicstringrefresh_token{get;set;} publicstringopenid{get;set;} publicstringscope{get;set;} }
publicstructConfig
{
publicstaticreadonlyConfigDefault;
staticConfig()
{
Default.AppID=ConfigurationManager.AppSettings["AppID"];
Default.AppSecret=ConfigurationManager.AppSettings["AppSecret"];
Default.Token=ConfigurationManager.AppSettings["Token"];
Default.UrlPrefix=ConfigurationManager.AppSettings["WebChatUrl"];
}
publicstringAppID{get;set;}
publicstringAppSecret{get;set;}
publicstringToken{get;set;}
publicstringUrlPrefix{get;set;}
}
publicclassJsonHelper
{
///<summary>
///生成Json格式
///</summary>
///<typeparamname="T"></typeparam>
///<paramname="obj"></param>
///<returns></returns>
publicstaticstringGetJson<T>(Tobj)
{
DataContractJsonSerializerjson=newDataContractJsonSerializer(obj.GetType());
using(MemoryStreamstream=newMemoryStream())
{
json.WriteObject(stream,obj);
stringszJson=Encoding.UTF8.GetString(stream.ToArray());returnszJson;
}
}
///<summary>
///获取Json的Model
///</summary>
///<typeparamname="T"></typeparam>
///<paramname="szJson"></param>
///<returns></returns>
publicstaticTParseFromJson<T>(stringszJson)
{
Tobj=Activator.CreateInstance<T>();
using(MemoryStreamms=newMemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializerserializer=newDataContractJsonSerializer(obj.GetType());
return(T)serializer.ReadObject(ms);
}
}
}
2.2修改Web.config
<appSettings>
<addkey="AppID"value="wxxxxxxxxxxxx"/>
<addkey="AppSecret"value="b98xxxxxxxxxxxxxx"/>
<addkey="Token"value="wxxxxxx"/>
<addkey="WebChatUrl"value="http://mobile.MYURL.com/pages/login.aspx"/>
</appSettings>
有些节点并不需要。
2.3现在可以写Login.aspx.cs了
publicpartialclassLogin:System.Web.UI.Page
{
protectedstringopenID{get;set;}protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
if(!string.IsNullOrEmpty(Request.QueryString["code"]))
{
stringCode=Request.QueryString["code"].ToString();//获得Token
OAuth_TokenModel=Get_token(Code);
//这里验证用户是否存在并写信息OpenID,请根据世纪情况修改
varperson=GetPersonInfo(Model.openid);
if(person!=null)
{
Session["person"]=person;
Login.passportID=person.ID.ToString();
Response.Redirect("home.aspx");
}
}
}
}
//获得Token
protectedstaticOAuth_TokenGet_token(stringCode)
{
stringStr=GetJson("https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Config.Default.AppID+"&secret="+Config.Default.AppSecret+"&code="+Code+"&grant_type=authorization_code");
OAuth_TokenOauth_Token_Model=JsonHelper.ParseFromJson<OAuth_Token>(Str);
returnOauth_Token_Model;
}
protectedstaticstringGetJson(stringurl)
{
WebClientwc=newWebClient();
wc.Credentials=CredentialCache.DefaultCredentials;
wc.Encoding=Encoding.UTF8;
stringreturnText=wc.DownloadString(url);
if(returnText.Contains("errcode"))
{
//可能发生错误
}
//Response.Write(returnText);
returnreturnText;
}
}
执行以上之后,用户首次登录获取Token的同时会获取用户OpenID,之后再用用户名和密码登录,此时系统将用户的OPenID写到库中。再次登录的时候奇迹出现了,直接跳到主页面,无需登录。
相关文章推荐
- 微信如何通过自己的网站获取粉丝?
- 在微信网页中,实现微信通过菜单‘在浏览器中打开’跳转到指定的url
- Android如何通过https协议下载自己的https网站上的文件/apk等
- 微信的多客服功能放在自定义菜单里面 这个功能如何实现?
- 如何在微信的自定义菜单上实现“历史消息”功能?
- 如何将自己的网站分享到QQ空间,微信,微博等等。
- 如何让局域网其他电脑通过IP直接访问自己电脑的网站
- 如何在自己程序跳转至微信,新浪,腾讯微博,QQ空间等
- WebView 如何自定义自己的右键菜单?
- 【第26篇】通过Gson解析微信自定义菜单多个Button的数组数据
- 微信自定义菜单,php配置一个多维数组,通过json_encode()生成json字符串,中文会转为\uxxxx,微信报错!
- 微信开发模式下如何进行自定义菜单配置
- 如何将自己的网站分享到QQ空间,微信,微博等等。
- [技术分享 - ISA 篇] 如何通过ISA2006发布网站时实现URL跳转
- 小翼微信机器人-如何创建自己的微信机器人挂机网站,WEB服务器设置教程
- 如何在自己程序跳转至微信,新浪,腾讯微博,QQ空间等
- 外贸多语言网站SEO设计,如何实现微信自定义分享?
- 如何在discuz中使用微信登陆,又使用微信自定义菜单
- 问答推广之如何通过回答别人的问题来推广自己的网站
- 如何将自己喜爱的网站添加到Win7系统中的右键菜单