知识点
相关文章
更多最近更新
更多微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
2019-03-02 00:03|来源: 网路
接着上次的理论,我们这次来研究用代码实现“网页授权获取用户基本信息”,首先我们需要一个链接指向微信的授权页面,在微信开发平台中已经说了,这个链接必须在微信客户端中打开,那么我们就干脆使用文本消息来完成吧,也就是说当我们发送“授权”两个字的时候,微信给我们一个链接,我们点击这个链接然后进入“授权页面”。首先改造一下我们OnLoad函数:
- if (wx.MsgType == "text" && wx.Content == "你好")
- {
- res = sendTextMessage(wx, "你好,欢迎使用北京永杰友信科技有限公司公共微信平台!");
- }
- else if (wx.MsgType == "text" && wx.Content == "授权")
- {
- string MyAppid = "wx043225275885dafd";
- string RedirectUri = "http://wx.4ugood.net/OAuthRedirectUri.aspx";
- string URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + MyAppid + "&redirect_uri=" + RedirectUri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" ;
- string Str = "<a href='" + URL + "'>授权页面</a>";
- res = sendTextMessage(wx, Str);
- }
- else if (wx.MsgType == "voice")
- {
- res = sendTextMessage(wx, wx.Recognition);
- }
- else if (wx.MsgType == "location")
- {
- res = sendTextMessage(wx, "您发送的位置是:" + wx.Label + ";纬度是:" + wx.Location_X + ";经度是:" + wx.Location_Y + ";缩放比例为:" + wx.Scale);
- }
- else
- {
- res = sendTextMessage(wx, "你好,未能识别消息!");
- }
其中,MyAppid不用说了,RedirectUri 是我们跳转后的网页,等会儿就会看到代码,URL是微信给出的格式,我们直接使用就OK了。这样就会反馈一个链接,点击就可以进入授权的页面了。
下面我们来看看RedirectUri参数的OAuthRedirectUri.aspx页面的源码吧,因为是讲解的例子,以说明问题为主,我就简化了其中也布局,OAuthRedirectUri.aspx.cs的内容如下:
首先我们用到了两个类:OAuth_Token和OAuthUser
- public class OAuth_Token
- {
- public OAuth_Token()
- {
- //
- //TODO: 在此处添加构造函数逻辑
- //
- }
- //access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
- //expires_in access_token接口调用凭证超时时间,单位(秒)
- //refresh_token 用户刷新access_token
- //openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
- //scope 用户授权的作用域,使用逗号(,)分隔
- public string access_token { get; set; }
- public string expires_in { get; set; }
- public string refresh_token { get; set; }
- public string openid { get; set; }
- public string scope { get; set; }
- }
- public class OAuthUser
- {
- public OAuthUser()
- { }
- #region 数据库字段
- private string _openID;
- private string _searchText;
- private string _nickname;
- private string _sex;
- private string _province;
- private string _city;
- private string _country;
- private string _headimgUrl;
- private string _privilege;
- #endregion
- #region 字段属性
- /// <summary>
- /// 用户的唯一标识
- /// </summary>
- public string openid
- {
- set { _openID = value; }
- get { return _openID; }
- }
- /// <summary>
- ///
- /// </summary>
- public string SearchText
- {
- set { _searchText = value; }
- get { return _searchText; }
- }
- /// <summary>
- /// 用户昵称
- /// </summary>
- public string nickname
- {
- set { _nickname = value; }
- get { return _nickname; }
- }
- /// <summary>
- /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
- /// </summary>
- public string sex
- {
- set { _sex = value; }
- get { return _sex; }
- }
- /// <summary>
- /// 用户个人资料填写的省份
- /// </summary>
- public string province
- {
- set { _province = value; }
- get { return _province; }
- }
- /// <summary>
- /// 普通用户个人资料填写的城市
- /// </summary>
- public string city
- {
- set { _city = value; }
- get { return _city; }
- }
- /// <summary>
- /// 国家,如中国为CN
- /// </summary>
- public string country
- {
- set { _country = value; }
- get { return _country; }
- }
- /// <summary>
- /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
- /// </summary>
- public string headimgurl
- {
- set { _headimgUrl = value; }
- get { return _headimgUrl; }
- }
- /// <summary>
- /// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)其实这个格式称不上JSON,只是个单纯数组
- /// </summary>
- public string privilege
- {
- set { _privilege = value; }
- get { return _privilege; }
- }
- #endregion
- }
- public partial class OAuthRedirectUri : System.Web.UI.Page
- {
- string Appid = "wx043225275885dafd";
- string appsecret = "cb4425b24ab79ef875029cf0bf326ae9";
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- if (!string.IsNullOrEmpty(Request.QueryString["code"]))
- {
- string Code = Request.QueryString["code"].ToString();
- //获得Token
- OAuth_Token Model = Get_token(Code);
- //Response.Write(Model.access_token);
- OAuthUser OAuthUser_Model = Get_UserInfo(Model.access_token, Model.openid);
- Response.Write("用户OPENID:" + OAuthUser_Model.openid + "<br>用户昵称:" + OAuthUser_Model.nickname + "<br>性别:" + OAuthUser_Model.sex + "<br>所在省:" + OAuthUser_Model.province + "<br>所在市:" + OAuthUser_Model.city + "<br>所在国家:" + OAuthUser_Model.country + "<br>头像地址:" + OAuthUser_Model.headimgurl + "<br>用户特权信息:" + OAuthUser_Model.privilege);
- }
- }
- }
- //获得Token
- protected OAuth_Token Get_token(string Code)
- {
- string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + Appid + "&secret=" + appsecret + "&code=" + Code + "&grant_type=authorization_code");
- OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
- return Oauth_Token_Model;
- }
- //刷新Token
- protected OAuth_Token refresh_token(string REFRESH_TOKEN)
- {
- string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + Appid + "&grant_type=refresh_token&refresh_token=" + REFRESH_TOKEN);
- OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
- return Oauth_Token_Model;
- }
- //获得用户信息
- protected OAuthUser Get_UserInfo(string REFRESH_TOKEN, string OPENID)
- {
- // Response.Write("获得用户信息REFRESH_TOKEN:" + REFRESH_TOKEN + "||OPENID:" + OPENID);
- string Str = GetJson("https://api.weixin.qq.com/sns/userinfo?access_token=" + REFRESH_TOKEN + "&openid=" + OPENID);
- OAuthUser OAuthUser_Model = JsonHelper.ParseFromJson<OAuthUser>(Str);
- return OAuthUser_Model;
- }
- protected string GetJson(string url)
- {
- WebClient wc = new WebClient();
- wc.Credentials = CredentialCache.DefaultCredentials;
- wc.Encoding = Encoding.UTF8;
- string returnText = wc.DownloadString(url);
- if (returnText.Contains("errcode"))
- {
- //可能发生错误
- }
- //Response.Write(returnText);
- return returnText;
- }
- }
其中用到的JsonHelper类在 《微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题》 也提到过,不再粘贴了。这样我们就实现了授权到拉取用户信息的功能了。
转自:http://blog.csdn.net/hechurui/article/details/22399669
相关问答
更多-
微信公众平台自定义菜单java开发[2022-05-17]
不是访问你自己的服务么?追问是自己的服务器,感觉自定义菜单是应该在微信的服务器里运行才可以回答自定义的菜单 微信里只是一个链接 调用的是你自己的服务 你要自己部署一个服务器 有对外的访问ip追问那是菜单设置完成后考虑的事,链接,公网ip我都有,现在只差这个菜单设置了回答哦 终于搞懂了 那个是微信提供了一个管理的界面啊 可以设置菜单名称 链接之类的追问怪我没说明白,我现在有接口代码,问题是不知道怎么让它部署运行回答tomcat部署服务?是少这个么追问不是,微信公众平台开发者模式首先需要接口来链接你自己的服务器 ... -
能介绍一下PHP微信开发的流程吗[2023-03-13]
首先就是要先配置好微信服务器的通信,比如token验证之类的,然后才是功能开发,功能开发详见微信公众平台的文档。 -
微信公共平台如何成为开发者???[2024-01-02]
申请好公众平台后,打开开发模式就可以成为开发者了,不一定非要编程,直接接入第三方接口就行,这样会获得一些工作。 想要更多的功能就需要涉及到编程了,看你账号的需求性了。 -
微信公众平台成为开发者以后怎么操作[2022-10-08]
1. 打开一个已经注册好的微信公众账号,点击高级功能进入开发者模式先点击开启然后点击成为开发者。 2. 在成为开发者之前要确认账号资料已经完善提交并且通过审核,头像要上传,微信号要设置,功能介绍要填写,以及地区等等相关信息。 3. 勾选我同意,然后点击下一步。 4. 登录微行天下的公众平台助手,没帐号的点击注册一个账号。 5. 注册的时候要按你的实际情况填写注册信息,因为这是人工审核的,如果提供假资料就不能通过审核,审核时间一般为3天,所以建议在注册完微信公众账号的时候就可以去注册微行天下公众号助手。 6. ... -
第一种,编辑模式 登陆进入微信公众平台 点击菜单中的“高级功能” 打开“编辑模式“ 设置自动回复,添加一个图文内容,并将原文链接设置为你的网站。 用户通过为进入你的网站,后面就是你自己的事儿了。 第二种,开发模式 登陆进入微信公众平台 点击菜单中的"高级功能" 打开"开发模式" 点击”查看文档“按钮进入开发接口文档 根据接口文档开发并部署一个具有外网IP,80端口的Web服务 在微信公众平台”开发模式“界面中填写你的URL和Token OK
-
微信公众平台源代码哪个好?[2022-03-26]
刚开始还是生|意上的一位朋|友给推|荐的,对小|猪|CMS的程|序都很满意,功|能的确很强大,而且相关设|计也充分考虑了用户的实际需|求。 -
微信公众平台开发者接入 然后用代码制作网页[2022-05-10]
我是用新浪的sinaapp开发者平台里创建php代码开发的,百度开发者平台也可以,前提你必须要懂得php代码。不然做了也是白搭。其次端口对接token与Access_Token,还要引用外部链接OAuth2.0网页授权还必须微信认证。 -
微信公众平台必须要做开发吗?[2024-03-28]
如果只是做宣传发文章,建议用订阅号,服务号次数发文太少,所以基本做开发实现更多功能来弥补,官方自带的其他功能可适用性有限,公众号开发有不懂的俺可提供技术支持 -
微信公共平台开发适合的行业有哪些 ?[2022-04-10]
各个行业都有的。可以看下小猪CMS,,you shiyong