翼度科技»论坛 编程开发 .net 查看内容

C#-公众号H5页面授权获取用户code、openid、unionid

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
一:配置信息
公众号设置:
  1:设置 IP白名单(所在的服务器ip)、记录公众号APPID和APPsecret;
  2:设置 网页授权域名;
 二:页面授权----【html中获取code】
  1:页面引入js  
  2: js 跳转授权
    (snsapi_userinfo指跳转页面授权!123处可随意替换随机数!)
  1. var AppID="公众号APPID";
  2. const { origin } = window.location //获取域名
  3. const currentUrl = encodeURIComponent(`${origin}/HTML/Index.html?z=`)//对URL进行转码<br>//跳转授权
  4. window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + APPID+ '&redirect_uri=' + currentUrl + '&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect';<br>//跳转授权后>会返回【currentUrl】指定页面并追加参数code!  此时仅需--获取地址参数【code】<br>//注意:注意:注意:<strong>currentUrl 中域名不能带端口号</strong>!!!不能带端口号!!!不能带端口号!!!【me遇到了这个问题找半天!】<br>//获取地址参数code<br>const code = GetQueryString('code')
复制代码
  1. <em id="__mceDel">//获取地址参数值<br>function GetQueryString(name) {</em>
复制代码
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
      var r = window.location.search.substr(1).match(reg);
      if (r != null) return decodeURI(r[2]); return null;
}

 
三:C#--后台获取--openid、unionid  (创建wx.ashx.cs)
  1. using Common;
  2. using HealthApp.Common.wx;
  3. using Newtonsoft.Json.Linq;
  4. using System.Net;
  5. using System.Text;
  6. using System.Web;
  7. using System.Web.Script.Serialization;
  8. namespace HealthApp.Ashx
  9. {
  10.     /// <summary>
  11.     /// wx 的摘要说明
  12.     /// </summary>
  13.     public class wx : IHttpHandler
  14.     {
  15.         public static string AppID = "";//公众号APPID
  16.         public static string AppSecret = "";//公众号AppSecret
  17.         
  18.          public static string GetOpenid(string code)
  19.         {
  20.             //微信认证部分:第二步 获得openid
  21.             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);
  22.             string result = HttpClientHelper.GetResponse(url);
  23.             JObject outputObj = JObject.Parse(result);
  24.             return outputObj["openid"].ToString();
  25.         }
  26.         public static string GetUser(string access_token, string openID)
  27.         {
  28.             //微信认证部分:第三步 获得unionid
  29.             string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", access_token, openID);
  30.             string result = HttpClientHelper.GetResponse(url);
  31.             JavaScriptSerializer js = new JavaScriptSerializer();
  32.             Access_Token amodel = js.Deserialize<Access_Token>(result);//此处为定义的类,用以将json转成model
  33.             //JObject outputObj = JObject.Parse(result);
  34.             //return outputObj["unionid"].ToString();
  35.             return amodel.unionid;
  36.         }     
  37.         /// <summary>
  38.         /// 通过code获得access_token
  39.         /// </summary>
  40.         /// <param name="appid"></param>
  41.         /// <param name="appsecret"></param>
  42.         /// <returns></returns>
  43.         public static Access_Token Get_Access_token(string code)
  44.         {
  45.             string a_token = string.Empty;
  46.             WebClient webclient = new WebClient();
  47.             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);
  48.             byte[] bytes = webclient.DownloadData(url);//在指定的path上下载
  49.             string result = Encoding.GetEncoding("utf-8").GetString(bytes);//转string
  50.             //WriteTextLogHelper.WriteTextLog("获取token", result, DateTime.Now);
  51.             JavaScriptSerializer js = new JavaScriptSerializer();
  52.             Access_Token amodel = js.Deserialize<Access_Token>(result);//此处为定义的类,用以将json转成model
  53.             return amodel;
  54.         }   
  55.         public class Access_Token
  56.         {
  57.             public string access_token { get; set; }
  58.             public string expires_in { get; set; }
  59.             public string openid { get; set; }
  60.             public string unionid { get; set; }
  61.             public string errcode { get; set; }
  62.         }
  63.     }
  64. }
复制代码
  c#后台调用示例
  1. //传参-页面授权的code
  2. string code = context.Request["code"].ToString();
  3. if (string.IsNullOrEmpty(code))
  4. {
  5.     //未授权!需要授权
  6.     //wx.OpenAccess(tj);
  7.     context.Response.Write("未授权");
  8. }
  9. //第二部获取access_token
  10. var access_token = wx.Get_Access_token(code);
  11. //第三部拉取用户信息
  12. var unionid = wx.GetUser(access_token.access_token, access_token.openid);
  13. var openID = access_token.openid;
复制代码
 
检验 网页授权域名 是否通过:
(公众平台测试账号----登录公众号管理账号》输入域名进行检验)网址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

微信官方文档---授权网址  https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
 

来源:https://www.cnblogs.com/BMxxx/p/18567538/baimao
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具