C# 微信公众号
2024-08-26 03:53:21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;namespace Web
{
public partial class Test : System.Web.UI.Page
{
//用户id
public string openid = ""; //公众号信息部分
public string appid = ConfigurationManager.AppSettings["AppId"];
public string appsecret = ConfigurationManager.AppSettings["AppSecret"]; public string redirect_uri = HttpUtility.UrlEncode("需返回的URL"); #region 显示页面
public string accesstoken;
public string nickname;
public string sex;
public string headimgurl;
public string province;
public string country;
public string language;
public string city; public string privilege = ""; public string errorMsg = "";
public string errorUrl = "";
#endregion protected void Page_Load(object sender, EventArgs e)
{
// 微信官方文档
// https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
// /* *微信认证获取openid部分: *临时认证code */
string code = Request["code"];
if (string.IsNullOrEmpty(code))
{
//判断session不存在
if (Session["openid"] == null)
{
//认证第一步:重定向跳转至认证网址
// 1.snsapi_base 不弹出授权页面,直接跳转,只能获取用户openid
string urlbase = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", appid, redirect_uri);
// 2.snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
string usrinfo = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect", appid, redirect_uri); Response.Redirect(urlbase);
}
//判断session存在
else
{
//跳转到前端页面.aspx
Response.Redirect(Request.Url.ToString());
}
return;
}
//第三步 获得openid
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, appsecret, code);
string result = HttpHelper.GetResponse(url);
Log.Instance.SaveLog(result);
JObject outputObj = JObject.Parse(result);
if (outputObj["errmsg"] != null)
{
errorMsg = outputObj["errmsg"].ToString();
errorUrl = url;
return;
}
accesstoken = outputObj["access_token"].ToString();
openid = outputObj["openid"].ToString(); GetUserInfo(openid);//通过基础接口获取数据, 不弹出授权页面
GetUserInfo(accesstoken, openid);//通过授权页面获取信息, 会弹出确认页面,需要第一步传入userinfo
} /// <summary>
/// 通过基础接口获取用户信息
/// </summary>
public void GetUserInfo( string openid )
{
//第一步 获取基础支持access_token
string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret);
string result = HttpHelper.GetResponse(url);
Log.Instance.SaveLog(result);
JObject outputObj = JObject.Parse(result);
if (outputObj["errmsg"] != null)
{
errorMsg = outputObj["errmsg"].ToString();
errorUrl = url;
return;
}
string token = outputObj["access_token"].ToString(); //第二步 获取用户基本信息
url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}", token, openid);
result = HttpHelper.GetResponse(url);
Log.Instance.SaveLog(result);
outputObj = JObject.Parse(result);
if (outputObj["errmsg"] != null)
{
errorMsg = outputObj["errmsg"].ToString();
errorUrl = url;
return;
} //以下是第四步获得的信息:
nickname = outputObj["nickname"].ToString(); //昵称
sex = outputObj["sex"].ToString()==""?"男":"女"; //性别什么的
headimgurl = outputObj["headimgurl"].ToString(); //头像url
province = outputObj["province"].ToString();
country = outputObj["country"].ToString(); ;
language = outputObj["language"].ToString(); ;
city = outputObj["city"].ToString(); ;
//将获得的用户信息填入到session中
Session["openid"] = outputObj["openid"];
} /// <summary>
/// 通过网页授权方式获取用户信息
/// </summary>
public void GetUserInfo(string token, string openid)
{
//微信认证部分:第四步 获得更多信息
string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accesstoken, openid);
string result = HttpHelper.GetResponse(url);
Log.Instance.SaveLog(result);
JObject outputObj = JObject.Parse(result);//将json转为数组 if (outputObj["errmsg"] != null)
{
errorMsg = outputObj["errmsg"].ToString();
errorUrl = url;
return;
} //以下是第四步获得的信息:
nickname = outputObj["nickname"].ToString(); //昵称
sex = outputObj["sex"].ToString(); //性别什么的
headimgurl = outputObj["headimgurl"].ToString(); //头像url
province = outputObj["province"].ToString(); ;
country = outputObj["country"].ToString(); ;
language = outputObj["language"].ToString(); ;
city = outputObj["city"].ToString(); ;
//将获得的用户信息填入到session中
Session["openid"] = outputObj["openid"];
//转向回入口
//OpenAccess();
} } }
最新文章
- JS倒计时执行操作
- PCb过孔大小设置 / 丝印层字符尺寸设置
- Spring-boot访问MongoDB
- 【解决】exited with a non-zero exit code 1
- 开发错误日志之No matching bean of type [xxx] found for dependency
- mac 安装maven 和改动java环境变量
- [每日一题] 11gOCP 1z0-052 :2013-09-17 DRA--Data Recovery Advisor.............................B31
- Servlet过滤器——创建过滤器
- 手机web下拉加载
- ArrayList源码解析(四)
- IOS 状态栏(UIStatusBar)
- Algorithms code
- [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列
- hdu 5427(水)
- asp.net core系列 54 IS4用客户端凭据保护API
- 201772020113李清华《面向对象程序设计(java)》第十周学习总结
- 2018-01-11 Antlr4的分析错误处理
- Sublime美化配置
- vps 切换内核
- linux内核分析 第一周