微信公众号授权给开放平台

公众号授权给第三方平台的技术实现流程比较简单

这个步骤遗漏了开头获取第三方平台自己的accessToken

先说下流程

如何注册开放平台的第三方信息看截图

其他不说了,此文只说代码部分。

先获取第三方10分一次的ticket。

             using (var streamReader = new StreamReader(Request.InputStream))
{
string stringInput = streamReader.ReadToEnd();
string sMsg = ""; //解析之后的明文
int ret = ;
ret = wxcpt.DecryptMsg(signature, timestamp, nonce, stringInput, ref sMsg);
if (ret != )
return Content(string.Format("解析错误{0}", ret));
var xDoc = XDocument.Parse(sMsg);
var q = (from c in xDoc.Elements() select c).ToList();
var infoType = q.Elements("InfoType").First().Value;
switch (infoType)
{
case "component_verify_ticket":
var ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value;
var wxOpen = (WebProject_GlobalConfig)WCFHelper.Invoke("WebProject_GlobalConfig", WcfFunName.SelectSingle.ToString(),
new object[] { "4add738c-369d-4570-ad18-77542e18a47a"});//这条请无视,只是wcf取数据。
wxOpen.KeyValue = ComponentVerifyTicket;
wxOpen.ModifyTime = DateTime.Now;
wxOpen = (WebProject_GlobalConfig)WCFHelper.Invoke("WebProject_GlobalConfig", WcfFunName.Save.ToString(),
new object[] { wxOpen });
return Content("success");
case "unauthorized":
return Content(string.Format("{0} 已取消授权", q.Elements("AuthorizerAppid").First().Value));
default:
break;
}
}
return Content("参数错误!");

获取到的信息解密,并保存component_verify_ticket。

然后就开始做第三方的token事情!

拿accesstoken

                var accessTokenTime = wxOpen.ModifyTime;
if (accessTokenTime < DateTime.Now.AddSeconds(-) | String.IsNullOrEmpty(wxOpen.KeyValue))
{
dynamic authorizerResult = ComponenToken();
wxOpen.ModifyTime = DateTime.Now;
wxOpen.KeyValue = authorizerResult.component_access_token;
WCFHelper.Invoke("WebProject_GlobalConfig", WcfFunName.Save.ToString(), new object[] { wxOpen });
} /// <summary>
/// Ticket票据读取第三方token
/// </summary>
/// <returns></returns>
public static dynamic ComponenToken()
{
var url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
var jsonDate = new
{
component_appid = GetConfig("ComponentAppid"),
component_appsecret = GetConfig("ComponentSercet"),
component_verify_ticket = GetConfig("ComponentVerifyTicket")
};
return CommonJsonSend.Send<dynamic>(null, url, jsonDate);
}

然后就可以做授权跳转

        /// <summary>
/// 跳转授权
/// </summary>
/// <returns></returns>
public ActionResult WxRedirect()
{
var url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid={0}&pre_auth_code={1}&redirect_uri={2}";//跳转网页
var proResult = WeChatTokenHelper.GetProCode();//预授权码
url = String.Format(url, WeChatTokenHelper.GetConfig("ComponentAppid"), proResult.pre_auth_code, "http://XXXXX/DptWxOpen/AuthInfo");
return Redirect(url);
}

不知道怎么拿预授权码?好吧,看代码!

        /// <summary>
/// 第三方token读取预授权读取
/// </summary>
/// <param name="Ticket"></param>
/// <returns></returns>
public static dynamic GetProCode()
{
var url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={0}";
var jsonData = new
{
component_appid = GetConfig("ComponentAppid")
};
return CommonJsonSend.Send<dynamic>(GetOpenToken(), url, jsonData);
}

最后的悲哀授权成功回调~

        /// <summary>
/// 微信回调url
/// </summary>
/// <param name="auth_code"></param>
/// <returns></returns>
public ActionResult AuthInfo(String auth_code)
{
var admin = Session["WebAdmin"] as WebProject_Admin; //登陆身份而已,别太在意
if (admin == null)
return Redirect("/DptPages/Login");
dynamic tokenResult = WeChatTokenHelper.GetWeChat(auth_code);//换授权码
dynamic authorizationInfo = tokenResult.authorization_info;
String appId = authorizationInfo.authorizer_appid;
var authorizerInfo = (WebProject_AuthorizerWeChat)WCFHelper.Invoke("WebProject_AuthorizerWeChat", WcfFunName.SelectSingle.ToString(),
new object[] { "x.WebId == " + admin.WebId, true });
if (authorizerInfo == null)
{
authorizerInfo = new WebProject_AuthorizerWeChat
{
WebId = admin.WebId
};
authorizerInfo = (WebProject_AuthorizerWeChat)WCFHelper.Invoke("WebProject_AuthorizerWeChat", WcfFunName.Save.ToString(),
new object[] { authorizerInfo });
}
if (authorizerInfo == null)
return Content("对象报错!");
authorizerInfo.AppId = appId;
authorizerInfo.AccessToken = authorizationInfo.authorizer_access_token;
authorizerInfo.AccessTokenTime = DateTime.Now;
authorizerInfo.RefreshToken = authorizationInfo.authorizer_refresh_token;
var Func = JSON.Deserialize<func_info>(funcinfo(authorizationInfo.func_info));
var Json = "";
foreach (var i in Func.Info)
{
i.funcscope_category.FuncType = i.funcscope_category.id > ? (FuncType)i.funcscope_category.id : FuncType.Error;
Json += JSON.ToJson(i);
}
authorizerInfo.FuncInfo = Json;
authorizerInfo = (WebProject_AuthorizerWeChat)WCFHelper.Invoke("WebProject_AuthorizerWeChat", WcfFunName.Save.ToString(),
new object[] { authorizerInfo });
return Redirect("WeChatInfo?state=true");
}

好人做到底,授权码方法:

        /// <summary>
/// 授权码code换身份
/// </summary>
/// <param name="authCode"></param>
/// <returns></returns>
public static dynamic GetWeChat(String authCode)
{
var url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={0}";
var jsonData = new
{
component_appid = GetConfig("ComponentAppid"),
authorization_code = authCode
};
return CommonJsonSend.Send<dynamic>(GetOpenToken(), url, jsonData);
}

几个关于授权信息的类工具:

        #region AuthorInfo Helper

        public string funcinfo(dynamic info)
{
string newinfo = "{\"Info\":" + info + "}";
return newinfo;
}
public class func_info
{
public List<InfoList> Info { get; set; }
}
public class InfoList
{
public Info funcscope_category { get; set; }
} public class Info
{
public Int32 id { get; set; }
public FuncType FuncType { get; set; }
} #endregion

 若有问题请评论留言~

微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)的更多相关文章

  1. 微信公众号授权,支付,退款总结【shoucang】

    1.支付前准备 1.1首先两个平台接入账户. 商户平台:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F 公众平台: ...

  2. 【tp5.1】微信公众号授权登录及获取信息录入数据库

    微信公众号开发文档链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 微信公众号授权登录分为两种: 1.以 ...

  3. uniapp - 微信公众号授权登录

    [缘由] 采用uniapp进行微信小程序和微信公众号双版本开发:考虑到用户唯一性,我们后端确定了以“unionid”.作为唯一标识. 有的小伙伴估计也是刚入这坑,我就简单说一下步骤流程   [摸索] ...

  4. Python3 itchat微信获取好友、公众号、群聊的基础信息

    Python3 itchat微信获取好友.公众号.群聊的基础信息 一.简介 安装 itchat pip install itchat 使用个人微信的过程当中主要有三种账号需要获取,分别为: 好友 公众 ...

  5. 基于.net5 wtm框架、uni-app微信公众号开发一、公众号授权

    前端公众号授权 公众号设置 0.首先用IIS创建一个空目录的网站用于公众号域名验证,接着把该网站内网穿透出去,推荐用utools工具,官网:https://u.tools/ 下载安装好后搜索内网穿透并 ...

  6. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)

    “出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也 ...

  7. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

  8. 公众号第三方平台开发 component_verify_ticket和accessToken的获取

    公众号第三方平台审核通过之后,微信的服务器会定时(10分钟一次)给"授权事件接收URL"发送component_verify_ticket,这里我们需要及时更新component_ ...

  9. 微信开放平台创建android应用时怎么获取应用签名

    之前微信开放平台中申请创建应用,没有整理,过了好久,又重新百度,今天索性整理了,以供童鞋们备用. 1.微信开发平台注册申请成开发者账号,就此略过 2.在管理中心选择创建移动应用.按照严格要求填写.上传 ...

随机推荐

  1. PL/SQL本地远程连接数据库

    记录自己在开发中只用一次,但是容易忘记的问题,PL/SQL-ORACLE配置远程数据库访问: 1,下载PL/SQL连接工具,链接: https://pan.baidu.com/s/1kVeeLNp 密 ...

  2. android选中radiobutton后改变TextColor

    首先,看下效果图,以护照为例 然后选中护照后 可以看到 字体由黑色变成了白色 下面说下实现方法. 首先 在values文件夹下的color.xml文件中加入<drawable/>标签的颜色 ...

  3. 融云rongCloud聊天室的使用

    融云提供了两种途径的接口, 一个是app端,一个是服务器端的. app端 1.连接融云,监听消息 rong = api.require('rongCloud2'); rong.init(functio ...

  4. Java微信公众平台开发(八)--多媒体消息回复

    转自:http://www.cuiyongzhi.com/post/46.html 之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消 ...

  5. Oracle行转列LISTAGG函数

    工作过程中需要将查询的数据分组并显示在一行.以往的工作经验,在sql server中可以用for xml path来实现. 现提供Oracle数据库的行转列方式 oracle11g官方文档简介如下: ...

  6. 第01章 开发准备(对最新版的RN进行了升级)1-2+项目技术分解

  7. Linux服务器防火墙白名单设置

    公司最近对网络安全抓的比较严,要求防火墙必须开启,但是项目的服务器有五六台,三台用于负载均衡,服务器之间必须要进行各种连接,那就只能通过添加白名单的方式. 登上服务器,编辑防火墙配置文件 vi /et ...

  8. 717. 1-bit and 2-bit Characters最后一位数是否为0

    [抄题]: We have two special characters. The first character can be represented by one bit 0. The secon ...

  9. Python PyPI中国镜像

    from:http://blog.makto.me/post/2012-11-01/pypi-mirror from:http://www.pypi-mirrors.org/ from:http:// ...

  10. CF1073F Choosing Two Paths

    发现从顶点入手不太方便,我们从这个“公共部分最长”开始考虑问题,因为要求这一条公共部分的链最长,可以联想到树的直径,那么本题就是要求一条类似于直径的东西使两个端点除了直径这一条链之外还有不少于两个的儿 ...