.net web api微信开放平台接收推送component_verify_ticket

1.关于盛派的微信第三方接口确实很实用,先强烈安利一波,详细接口内容可去官网根据需求调用Senparc 官方微信开发教程文档

2.先在NuGet上引用开放平台的Senparc.Weixin.dll、Senparc.Weixin.MP.dll、Senparc.Weixin.Open这三个dll

3.web api 接收推送的component_verify_ticket

        /// <summary>
        /// 授权推送及component_verify_ticket接收(消息与事件接受)
        /// </summary>
        [HttpPost]
        [Route("Componentverifyticket")]
        public HttpResponseMessage Componentverifyticket([FromUri]Senparc.Weixin.Open.Entities.Request.PostModel postModel)
        {
            try
            {
                Stream inputStream = Request.Content.ReadAsStreamAsync().Result;
                XDocument encryptDoc = XmlUtility.Convert(inputStream);
                Logger.Output("encryptDoc:" + encryptDoc);
                postModel.Token = "xxxxxxxxx";//"在申请开放平台时,填写开发资料时,填写的消息校验Token";
                postModel.AppId = "xxxxxxxxxx";//"开放平台发布成功之后,微信会为用户分配一个AppId,此处即为该参数";
                postModel.EncodingAESKey = "xxxxxxxxxx";//"在申请开放平台时,填写开发资料时,填写的消息加解密Key";
                Logger.Output("接收component_verify_ticket方法Auth,postModel:" + JsonConvert.SerializeObject(postModel));
                //获取解密后的XDocument
                XDocument decryptDoc = GetDecryptXDocument(encryptDoc, postModel.AppId, postModel.Token, postModel.EncodingAESKey, postModel.Signature, postModel.Timestamp, postModel.Nonce);
                Senparc.Weixin.Open.IRequestMessageBase requestMessage = Senparc.Weixin.Open.RequestMessageFactory.GetRequestEntity(decryptDoc);
                Logger.Output("接收component_verify_ticket", string.Format(@"WxController.Auth.requestMessage:{0}", JsonConvert.SerializeObject(requestMessage)));
                if (requestMessage == null)
                {
                    Logger.Output("接收component_verify_ticket信息:接收信息为空,requestMessage:" + JsonConvert.SerializeObject(requestMessage));
                }
                else
                {
                    switch (requestMessage.InfoType)
                    {
                        case RequestInfoType.component_verify_ticket://推送component_verify_ticket

                            var messageComponentVerifyTicket = requestMessage as RequestMessageComponentVerifyTicket;
                            Logger.Output("接收component_verify_ticket", "方法ReceiveRequestType,信息:messageComponentVerifyTicket:" + JsonConvert.SerializeObject(messageComponentVerifyTicket));

                            string verifyTicket = messageComponentVerifyTicket.ComponentVerifyTicket;
                            HttpRuntime.Cache.Insert("verifyTicket", verifyTicket);
                            HttpRuntime.Cache.Insert("AppId", messageComponentVerifyTicket.AppId);
                            break;
                        case RequestInfoType.authorized://授权成功

                            var requestMessageAuthorized = requestMessage as RequestMessageAuthorized;
                            string authorizerAppid = requestMessageAuthorized.AuthorizerAppid;
                            Logger.Output("接收component_verify_ticket", "方法ReceiveRequestType,信息:授权成功!requestMessageAuthorized:" + JsonConvert.SerializeObject(requestMessageAuthorized));

                            if (!String.IsNullOrEmpty(authorizerAppid))
                            {
HttpRuntime.Cache.Insert("authorizerAppid", authorizerAppid);
                            }
                            break;

                        case RequestInfoType.unauthorized://取消授权

                            var requestMessageUnauthorized = requestMessage as RequestMessageUnauthorized;
                            string authorizerAppid01 = requestMessageUnauthorized.AuthorizerAppid;
                            Logger.Output("接收component_verify_ticket", "方法ReceiveRequestType,信息:取消授权!requestMessageUnauthorized:" + JsonConvert.SerializeObject(requestMessageUnauthorized));

                            if (!String.IsNullOrEmpty(authorizerAppid01))
                            {
                      HttpRuntime.Cache.Insert("authorizerAppid01", authorizerAppid01);
                            }
                            break;

                        case RequestInfoType.updateauthorized://更新授权

                            var requestMessageUpdateAuthorized = requestMessage as RequestMessageUpdateAuthorized;
                            string authorizerAppid02 = requestMessageUpdateAuthorized.AuthorizerAppid;
                            Logger.Output("接收component_verify_ticket", "方法ReceiveRequestType,信息:更新授权!requestMessageUpdateAuthorized:" + JsonConvert.SerializeObject(requestMessageUpdateAuthorized));

                            if (!String.IsNullOrEmpty(authorizerAppid02))
                            {
        HttpRuntime.Cache.Insert("authorizerAppid02", authorizerAppid02);
                            }
                            break;

                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Output("接收component_verify_ticket异常信息:" + ex.ToString());
            }
            Component.component_verify_ticket = HttpRuntime.Cache.Get("verifyTicket").ToString();
            return ControllerContext.Request.CreateResponse("success");
        }

解密方法(关于解密方法WXBizMsgCrypt()可以直接使用盛派的,也可以自行到微信第三方进行下载使用):

 /// <summary>
        /// 获取解密后的XDocument
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="appId">授权方公众号AppId</param>
        /// <returns></returns>
        public XDocument GetDecryptXDocument(XDocument doc, string appId, string token, string encodingAESKey, string signature, string timestamp, string nonce)
        {
            try
            {
                WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, appId);
                string msgXml = null;
                var result = wxcpt.DecryptMsg(signature, timestamp, nonce, doc.ToString(), ref msgXml);
                Logger.Output("处理加密时代码:" + result);
                //判断result类型
                if (result != 0)
                {
                    Logger.Output(new { msg = "" }, "处理加密时失败");//失败,写入日志
                                                               //验证没有通过,取消执行
                    return null;
                }
                return XDocument.Parse(msgXml);//完成解密
            }
            catch (Exception ex)
            {
                Logger.Output("解密失败" + ex.ToString());
                return null;
            }
        }

对于取出来的component_verify_ticket视情况保存,我是存在缓存中使用的。也可以存在数据库或者文件夹中,component_verify_ticket的过期时间相较Token会比较长。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值