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

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

这个步骤遗漏了开头获取第三方平台自己的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. 2015 浙江省赛B Team Formation (技巧,动归)

    Team Formation For an upcoming programming contest, Edward, the headmaster of Marjar University, is ...

  2. python开发socket套接字:粘包问题&udp套接字&socketserver

    一,发生粘包 服务器端 from socket import * phone=socket(AF_INET,SOCK_STREAM) #套接字 phone.setsockopt(SOL_SOCKET, ...

  3. js控制使div自动适应居中

    一直都在想怎么样使弹出的DIV能在任何时候都是居中显示的,刚开始的时候是用CSS样式直接定义好层的位置,但是当页面很长的时候,或是浏览器窗口大小不是固定的时候就不能正确的显示,所以只好用JS来控制DI ...

  4. js 鼠标点击文本框 提示文字消失

    onfocus="if(this.value==defaultValue) {this.value='';}" onblur="if(!value) {value=def ...

  5. Visual Studio 2005 C# 读写Excel文件

    做作业的时候查了一点儿资料, 用的vs2k5 读 excel 发现用起来非常简单...现在编程语言没话说! 项目-添加引用-COM-Microsoft Excel 12.0 Object Librar ...

  6. 常用的软件设计模式的Java实现——让编程从野生到飞起

    常用的软件设计模式的Java实现——让编程从野生到飞起_野生技术协会_科技_bilibili_哔哩哔哩  https://www.bilibili.com/video/av7596511/

  7. ubuntu16配置mysql5.7主从同步

    测试环境如下: master: 10.0.0.26 slave01: 10.0.0.27 slave02: 10.0.0.28 一.三台机均安装mysql-server5.7 $ sudo apt-g ...

  8. Collision Detection

    [Collision Detection] Collision Detection是Rigidbody中的一个属性.所以显然Collision Detection指定的类型只在Rigidbody之间才 ...

  9. c++ 流状态

    这里是对cin中函数的作用的补充.

  10. 张超超OC基础回顾04_实例变量修饰(@public),点语法,self关键字,多态,继承

    零.实例变量修饰符 /* @public 就是实例变量修饰符 @public >可以在其它类中访问被public修饰的成员变量 >也可以在本类中访问被public修饰的成员变量 >可 ...