幽灵资源网 Design By www.bzswh.com
本文实例为大家分享了微信公众平台实现获取用户OpenID的方法,供大家参考,具体内容如下
Index.aspx.cs代码:
public partial class Index : 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("https://www.jb51.net");
public string scope = "【删除这个并填入请求类型,例如:snsapi_userinfo】";
#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 = "";
#endregion
protected void Page_Load(object sender, EventArgs e)
{
/*
*微信认证获取openid部分:
*临时认证code
*/
//微信认证部分:第二步 获得code
string code = Request["code"];
if (string.IsNullOrEmpty(code))
{
//如果code没获取成功,重新拉取一遍
OpenAccess();
}
//微信认证部分:第三步 获得openid
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token", appid, appsecret, code);
string result = HttpClientHelper.GetResponse(url);
LogHelper.WriteFile(result);
JObject outputObj = JObject.Parse(result);
//微信认证部分:第四步 获得更多信息
accesstoken = outputObj["access_token"].ToString();
openid = outputObj["openid"].ToString();
url = string.Format("https://api.weixin.qq.com/sns/userinfo",accesstoken,openid);
string result1 = HttpClientHelper.GetResponse(url);
LogHelper.WriteFile(result1);
JObject outputObj1 = JObject.Parse(result1);//将json转为数组
//以下是第四步获得的信息:
nickname = outputObj1["nickname"].ToString(); //昵称
sex = outputObj1["sex"].ToString(); //性别什么的
headimgurl = outputObj1["headimgurl"].ToString(); //头像url
province = outputObj1["province"].ToString(); ;
country = outputObj1["country"].ToString(); ;
language = outputObj1["language"].ToString(); ;
city = outputObj1["city"].ToString(); ;
//将获得的用户信息填入到session中
Session["openid"] = outputObj1["openid"];
//转向回入口
//OpenAccess();
}
/*
* 接入入口
* 开放到微信菜单中调用
* @param $dir_url 来源url
* @since 1.0
* @return void
*/
public void OpenAccess()
{
//判断session不存在
if (Session["openid"] == null)
{
//认证第一步:重定向跳转至认证网址
string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize", appid, redirect_uri);
Response.Redirect(url);
}
//判断session存在
else
{
//跳转到前端页面.aspx
Response.Redirect(Request.Url.ToString());
}
}
}
Index.aspx内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="TEST.Index" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
td
{
word-wrap: break-word;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="wu" runat="server">
<table style="width: 100%;">
<tr>
<td style="width: 150px;">
<p>
openid:<%=openid%></p>
</td>
<td>
<p>
nickname:<%=nickname%></p>
</td>
<td>
<p>
sex:<%=sex%></p>
</td>
</tr>
<tr>
<td>
<p>
language:<%=language%></p>
</td>
<td>
<p>
city:<%=city%></p>
</td>
<td>
<p>
country:<%=country%></p>
</td>
</tr>
<tr>
<td>
<p>
headimgurl:<img width="50px;" src="/UploadFiles/2021-04-02/<%=headimgurl %>">
HttpClientHelper.cs代码:
public class HttpClientHelper
{
/// <summary>
/// get请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetResponse(string url)
{
if (url.StartsWith("https"))
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
}
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
string result = response.Content.ReadAsStringAsync().Result;
return result;
}
return null;
}
public static T GetResponse<T>(string url)
where T : class, new()
{
if (url.StartsWith("https"))
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result;
T result = default(T);
if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
result = JsonConvert.DeserializeObject<T>(s);
}
return result;
}
/// <summary>
/// post请求
/// </summary>
/// <param name="url"></param>
/// <param name="postData">post数据</param>
/// <returns></returns>
public static string PostResponse(string url, string postData)
{
if (url.StartsWith("https"))
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpContent httpContent = new StringContent(postData);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpClient = new HttpClient();
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
if (response.IsSuccessStatusCode)
{
string result = response.Content.ReadAsStringAsync().Result;
return result;
}
return null;
}
/// <summary>
/// 发起post请求
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url">url</param>
/// <param name="postData">post数据</param>
/// <returns></returns>
public static T PostResponse<T>(string url, string postData)
where T : class, new()
{
if (url.StartsWith("https"))
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpContent httpContent = new StringContent(postData);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpClient = new HttpClient();
T result = default(T);
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
result = JsonConvert.DeserializeObject<T>(s);
}
return result;
}
/// <summary>
/// V3接口全部为Xml形式,故有此方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="xmlString"></param>
/// <returns></returns>
public static T PostXmlResponse<T>(string url, string xmlString)
where T : class, new()
{
if (url.StartsWith("https"))
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpContent httpContent = new StringContent(xmlString);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpClient = new HttpClient();
T result = default(T);
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
result = XmlDeserialize<T>(s);
}
return result;
}
/// <summary>
/// 反序列化Xml
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlString"></param>
/// <returns></returns>
public static T XmlDeserialize<T>(string xmlString)
where T : class, new()
{
try
{
var ser = new XmlSerializer(typeof (T));
using (var reader = new StringReader(xmlString))
{
return (T) ser.Deserialize(reader);
}
}
catch (Exception ex)
{
throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);
}
}
}
结果如图:
本文已被整理到了《ASP.NET微信开发教程汇总》,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
幽灵资源网 Design By www.bzswh.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
幽灵资源网 Design By www.bzswh.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
