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

摘要:
公众号第三方平台审核通过之后,微信的服务器会定时(10分钟一次)给"授权事件接收URL"发送component_verify_ticket,这里我们需要及时更新component_verify_ticket就是下面这个链接下面这里是我的处理函数privatevoidResponseRequest(){//WXBizMsgCrypt这个类是腾讯提供的,下载地址是http://mp.weixin.qq

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

就是下面这个链接

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

下面这里是我的处理函数

复制代码
  private void ResponseRequest()
    {
        //WXBizMsgCrypt 这个类是腾讯提供的,下载地址是http://mp.weixin.qq.com/wiki/static/assets/a5a22f38cb60228cb32ab61d9e4c414b.zip
        //这里的构造函数我自己改写了,腾讯提供的构造函数需要提供三个参数的,具体请看微信提供的示例代码
        WXBizMsgCrypt wxcpt = new WXBizMsgCrypt();

        string sReqMsgSig = Request["msg_signature"];
        string sReqTimeStamp = Request["timestamp"];
        string sReqNonce = Request["nonce"];
        string sReqData = GetPost();

        LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} 接收到的信息:{0}", sReqData, pageUrl));

        string sMsg = "";  //解析之后的明文
        int ret = 0;
        ret = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData, ref sMsg);
        if (ret != 0)
        {
            LogTool.LogToDirDest(filePath, LogType.Error, string.Format("{1} 解析出错:{0}", ret, pageUrl));

        }
        else
        {
            LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} 解析后的内容:{0}", sMsg, pageUrl));

            var xDoc = XDocument.Parse(sMsg);

            List<XElement> q = (from c in xDoc.Elements() select c).ToList();

            var infoType = q.Elements("InfoType").First().Value;

            switch (infoType)
            {
                case "component_verify_ticket":
                    //q.Elements("ComponentVerifyTicket").First()
                    //这里就是component_verify_ticket的值,保存起来就可以了,处理完成后在页面上输出success,通知微信服务器已经接收到ticket
                    Response.Write("success");
                    Response.End();
                    break;
                case "unauthorized":
                    //当用户取消授权的时候,微信服务器也会向这个页面发送信息,在这里做一下记录
                    LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} {0} 已取消授权", q.Elements("AuthorizerAppid").First().Value, pageUrl));
                    Response.End();
                    break;
                default:
                    break;
            }
        }
    }
复制代码

补充一下我的GetPost()函数

复制代码
 public string GetPost()
    {
        try
        {
            System.IO.Stream s = Request.InputStream;
            int count = 0;
            byte[] buffer = new byte[s.Length];
            StringBuilder builder = new StringBuilder();
            while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
            {
                builder.Append(Request.ContentEncoding.GetString(buffer, 0, count));
            }
            s.Flush();
            s.Close();
            s.Dispose();
            return builder.ToString();
        }
        catch (Exception ex)
        { throw ex; }
    }
复制代码

利用上面获得的component_verify_ticket作为参数,向微信服务器发送请求即可接收到第三方平台的accessToken

复制代码
        /// <summary>
        /// 获取第三方平台access_token
        /// </summary>
        /// <param name="component_appid"></param>
        /// <param name="component_appsecret"></param>
        /// <param name="component_verify_ticket"></param>
        /// <returns></returns>
        public static ResponseComponentToken Component_token(string component_verify_ticket)
        {
            var urlFormat = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
            object data = null;
            data = new
            {
                component_appid = Config.ServerAppID,
                component_appsecret = Config.ServerAppSecret,   
                component_verify_ticket = component_verify_ticket
            };
            return CommonJsonSend.Send<ResponseComponentToken>("", urlFormat, data, timeOut: Config.TIME_OUT);
        }
复制代码

如果请求成功,返回的json结果示例如下:

{
"component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
"expires_in":7200
}

自己转换一下即可

免责声明:文章转载自《公众号第三方平台开发 component_verify_ticket和accessToken的获取》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse没有 web Project 选项的解决办法kong下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP类和对象函数实例详解

1. interface_exists、class_exists、method_exists和property_exists:       顾名思义,从以上几个函数的命名便可以猜出几分他们的功能。我想这也是我随着对PHP的深入学习而越来越喜欢这门编程语言的原因了吧。下面先给出他们的原型声明和简短说明,更多的还是直接看例子代码吧。bool interface...

jqgrid 属性说明

1.0 colModel :   要呈现字段的属性设置 1.1 align:定义数据相对单元格的对齐方式.string  left 1.2 datefmt: 日期格式,     string  Y-m-d 1.3 editable: 定义字段是否可编辑 boolean  false 1.4 defval : 搜索字段的默认值,(只用于自定义搜索) stri...

Socket与Http方式解析发送xml消息封装中间件jar包

  最近项目代码中太多重复的编写Document,不同的接口需要不同的模板,于是重写提取公共部分打成jar包,方便各个系统统一使用~   提取结构:    Http连接方式: import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import...

支付宝手机网站支付(基于Java实现支付宝手机网站支付)

支付宝支付核心需要的参数是(APPID,PRIVATE_KEY,ALIPAY_PUBLIC_KEY) APPID:创建应用后就有的APPID。 PRIVATE_KEY:应用私钥 ALIPAY_PUBLIC_KEY:支付宝公钥 上面的2,3的参数得自己弄到,参考文档:https://docs.open.alipay.com/291/105971/ 下...

170819-关于EL表达式的知识点

1 .EL表达式 [1] 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象。 > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段。 > 使用EL表达式来代替JSP表达式 ,使用JSTL标签来代替JSP脚本片段。 > EL表达式用来向页面输出内容 getAttribute();/...

Android 路由框架ARouter最佳实践

一:什么是路由? 说简单点就是映射页面跳转关系的,当然它也包含跳转相关的一切功能。 二:为什么需要路由 Android系统已经给我们提供了api来做页面跳转,比如startActivity,为什么还需要路由框架呢?我们来简单分析下路由框架存在的意义: 在一些复杂的业务场景下(比如电商),灵活性比较强,很多功能都是运营人员动态配置的,比如下发一个活动页面...