微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)

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

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

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

先说下流程

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

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

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

 1             using (var streamReader = new StreamReader(Request.InputStream))
 2             {
 3                 string stringInput = streamReader.ReadToEnd();
 4                 string sMsg = "";  //解析之后的明文
 5                 int ret = 0;
 6                 ret = wxcpt.DecryptMsg(signature, timestamp, nonce, stringInput, ref sMsg);
 7                 if (ret != 0)
 8                     return Content(string.Format("解析错误{0}", ret));
 9                 var xDoc = XDocument.Parse(sMsg);
10                 var q = (from c in xDoc.Elements() select c).ToList();
11                 var infoType = q.Elements("InfoType").First().Value;
12                 switch (infoType)
13                 {
14                     case "component_verify_ticket":
15                         var ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value;
16                         var wxOpen = (WebProject_GlobalConfig)WCFHelper.Invoke("WebProject_GlobalConfig", WcfFunName.SelectSingle.ToString(),
17                             new object[] { "4add738c-369d-4570-ad18-77542e18a47a"});//这条请无视,只是wcf取数据。
18                         wxOpen.KeyValue = ComponentVerifyTicket;
19                         wxOpen.ModifyTime = DateTime.Now;
20                         wxOpen = (WebProject_GlobalConfig)WCFHelper.Invoke("WebProject_GlobalConfig", WcfFunName.Save.ToString(),
21                             new object[] { wxOpen });
22                         return Content("success");
23                     case "unauthorized":
24                         return Content(string.Format("{0} 已取消授权", q.Elements("AuthorizerAppid").First().Value));
25                     default:
26                         break;
27                 }
28             }
29             return Content("参数错误!");

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

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

拿accesstoken

                var accessTokenTime = wxOpen.ModifyTime;
                if (accessTokenTime < DateTime.Now.AddSeconds(-7200) | 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 > 0 ? (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

 若有问题请评论留言~

时间: 2024-08-07 04:11:49

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

公众号第三方平台开发 教程三 微信公众号授权第三方平台

这一部分挺简单的,其实就是在页面上放一个链接,引导用户跳转即可 链接的格式如下: https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx, 这里对参数做一下说明 component_appid即第三方平台的APPID(如下图) pre_auth_code为预授权码,用获得的第三方平台AccessToken作为参数进行获取,具体

Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件

这篇的内容很简单,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个按钮分别命名了吧? 现在要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/918 文章来源:笨木头与游戏开发 根据名字查找控件 首先给TollgateScene再include一些头文件,不然等会编译又报错了: #include "editor-support/cocostudio/CCSGUIReader.h&quo

微信公众号授权--前端

公众号授权操作 开发微信公众号时,需要获取到用户的信息,因而不得不设计到微信公众号授权问题(本质是利用OAuth登陆) 开发模式如何进行授权操作 微信公众号提供了两种环境的授权模式,生产环境 开发环境 生产环境也就是正式上线环境,具体不做讨论 重点谈论开发环境(因为道理一样,主要是在开发时,如何能够更好地模拟生产环境下,获取用户信息) 开发环境 申请开发环境微信公众号 获取到用户的 appid 找到对应的网页授权获取用户基本信息,添加域名 填写的域名本地服务器地址(域名 / ip)即可,不区分内

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

“出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也就是说我们在获取access_token的时候是要先得到component_verify_ticket的,而component_verify_ticket是每10分钟向我们的接收地址推送一次. 而域名地址是由我们自己去服务器上去部署,如下图: /// <summary> /// 一.推送compo

PHP之路——微信公众号授权获取用户信息

官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public function actionGetCode() { $response_type = 'code'; $scope = 'snsapi_userinfo'; $conf = yii::$app->params['oauth_conf']['oauth_wx_in']; $url = 'https:/

微信公众号授权登录,提示“redirect_uri 参数错误”

做微信公众号开发授权登录的时候遇到的坑... 后台服务用node,index.js相关代码如下: const oauth = new OAuth(conf.appid, conf.appsecret) router.get('/wxAuthorize', async ctx => { const state = ctx.query.id redirectUrl = ctx.href redirectUrl = redirectUrl.replace('wxAuthorize', 'wxCallb

asp.net core 微信支付工具类(H5支付,扫码支付,公众号支付,app支付)之2-H5支付

上一篇说到微信扫码支付,今天来分享下微信H5支付,适用场景为手机端非微信浏览器调用微信H5支付惊醒网站支付业务处理.申请开通微信H5支付工作不多做介绍,直接上代码. 首先是微信支付业务类(WxPayService)中的方法,传上必要的参数,该方法将会构造请求XML字符串到微信api接口,H5支付用到的是返回XML参数的mweb_url的值,控制器中的Aciton方法调用该业务层方法得到mweb_url的值,此时,前端ajax调用控制器返回mweb_url值,直接将window.localtion

微信第三方平台定时接收component_verify_ticket

背景: 获取第三方平台令牌(component_access_token),增加了component_verify_ticket参数.component_verify_ticket由公众平台每隔10分钟,持续推送给第三方平台方(在创建公众号第三方平台审核通过后,才会开始推送). 目标: 接收微信服务器推送的component_verify_ticket 文档说明:(参见微信开放平台文档) 推送component_verify_ticket协议 在公众号第三方平台创建审核通过后,微信服务器会向其“

微信携手第三方再造新平台 - 公众号第三方平台介绍

微信携手第三方,再造新平台,即我们平常所说的公众号第三方平台,是通过微信公众号登录授权,帮助各行各业公众号解决业务需求的第三方网站.是必须基于公众号登录授权,提供解决方案而非一律外包的第三方网站,微信公众号第三方平台是许多开发团队的未来出路. 公众号第三方平台介绍 公众号第三方平台介绍目录 公众号第三方平台是什么? 公众号第三方平台的两种典型业务场景(亦即商业机会) 公众号如何使用第三方平台? 公众号授权流程详解 为什么要成为第三方平台? 为什么要通过登录授权接入?有哪三大优势? 为什么要通过登