.net mvc (四)微信开放平台全网发布

   [HttpPost]
        public ActionResult Message(string id, Senparc.Weixin.MP.Entities.Request.PostModel postModel)
        {
            Addlog("公众号消息与事件接收", "方法Message,wechatAppId:" + id + ",postModel" + JsonConvert.SerializeObject(postModel));

            try
            {
                string wechatAppId = id;
                if (wechatAppId == "wx570bc396a51b8ff8")//微信官方测试公众号appId
                {
                    return GetPublishResult(Request.InputStream, postModel);
                }
              
            }
            catch (Exception ex)
            {
                Addlog("公众号消息与事件接收", "方法Message:异常信息:" + ex.ToString());
            }

            return Content("success");
        }

        /// <summary>
        /// 全网发布
        /// </summary>
        /// <param name="requestStream"></param>
        /// <param name="postModel"></param>
        /// <returns></returns>
        private ContentResult GetPublishResult(Stream requestStream, Senparc.Weixin.MP.Entities.Request.PostModel postModel)
        {
            try
            {
                XDocument oldDoc = XmlUtility.Convert(requestStream);
                XDocument newXmlDoc = _wechatOpenService.GetDecryptXDocument(oldDoc, postModel.AppId, postModel.Token, postModel.EncodingAESKey, postModel.Signature, postModel.Signature, postModel.Nonce);
                Addlog("全网发布.GetPublishResult", "newXmlDoc:" + newXmlDoc);

                Senparc.Weixin.MP.Entities.IRequestMessageBase requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(newXmlDoc);
                Addlog("全网发布.GetPublishResult", "requestMessage:" + JsonHelper.Serialize(requestMessage));

                if (requestMessage != null)
                {
                    switch (requestMessage.MsgType)
                    {
                        case RequestMsgType.Text:

                            var requestMessageText = requestMessage as RequestMessageText;
                            LogHelper.Debug("全网发布2,requestMessage.Content:" + requestMessageText.Content);
                            if (!string.IsNullOrEmpty(requestMessageText.Content))
                            {
                                if (requestMessageText.Content == "TESTCOMPONENT_MSG_TYPE_TEXT")
                                {
                                    #region 返回普通文本回复

                                    string content = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";

                                    //这种方法只能暂时处理
                                    //string accessToken = "11_k3zFtp5fJropHXMHuGQ6owYwV_LIJiFyjL7Zf7yjOzkL5N3ILDKl4hEOda4ZRXmGtiMpMIEQTN0FOtCCHz5Hj3OOloTaCw90fbqnNjuvr2R2FsRPgWyv2KsMg_B-IAZZ5UM2xnmje9RjxATzKASgAFDPFX";
                                    //SenparcAPI.SendCustomText(accessToken, requestMessage.FromUserName, content);

                                    StringBuilder sbContent = new StringBuilder();
                                    sbContent.Append("<xml>");
                                    sbContent.Append("<ToUserName><![CDATA[" + requestMessage.FromUserName + "]]></ToUserName>");
                                    sbContent.Append("<FromUserName><![CDATA[" + requestMessage.ToUserName + "]]></FromUserName>");
                                    sbContent.Append("<CreateTime>" + requestMessage.CreateTime + "</CreateTime>");
                                    sbContent.Append("<MsgType><![CDATA[text]]></MsgType>");
                                    sbContent.Append("<Content><![CDATA[" + content + "]]></Content>");
                                    sbContent.Append("</xml>");

                                    //WechatBizMsgCrypt wechatBizMsgCrypt = new WechatBizMsgCrypt(postModel.Token, postModel.EncodingAESKey, postModel.AppId);
                                    //int ret = wechatBizMsgCrypt.EncryptMsg(replyMsg, postModel.Timestamp, postModel.Nonce, ref returnValue);
                                    //LogHelper.Debug("全网发布.GetPublishResult.ret结果:" + ret);

                                    return Content(StringHelper.ToString(sbContent));

                                    #endregion 返回普通文本回复
                                }
                                else if (requestMessageText.Content.Contains("QUERY_AUTH_CODE:"))
                                {
                                    #region Api回复--发送客服消息回复

                                    string queryAuthCode = requestMessageText.Content.Replace("QUERY_AUTH_CODE:", "");
                                    LogHelper.Debug("全网发布.GetPublishResult.queryAuthCode:" + queryAuthCode);

                                    var platFrom = _wechatPlatFormService.GetModel();
                                    if (platFrom == null)
                                    {
                                        LogHelper.Debug("全网发布.GetPublishResult.platFrom为空!");
                                    }

                                    string componentAccessToken = _wechatOpenService.GetComponentAccessToken();
                                    LogHelper.Debug("全网发布.GetPublishResult.PlatFormAppId:" + platFrom.PlatFormAppId + ",componentAccessToken:" + componentAccessToken);

                                    QueryAuthResult authorizerInfo = _wechatOpenService.GetAuthInfo(componentAccessToken, platFrom.PlatFormAppId, queryAuthCode);
                                    LogHelper.Debug("全网发布.GetPublishResult.authorizerInfo:" + JsonHelper.Serialize(authorizerInfo));

                                    if (authorizerInfo == null)
                                    {
                                        LogHelper.Debug("全网发布.GetPublishResult.authorizerInfo为空");
                                    }

                                    string authorizer_access_token = authorizerInfo.authorization_info.authorizer_access_token;
                                    var tempContent = queryAuthCode + "_from_api";
                                    LogHelper.Debug("全网发布.GetPublishResult.tempContent:" + tempContent);

                                    SenparcAPI.SendCustomText(authorizer_access_token, requestMessage.FromUserName, tempContent);

                                    #endregion Api回复--发送客服消息回复
                                }
                            }

                            break;

                        default:
                            break;
                    }
                }

                return Content("success");
            }
            catch (Exception ex)
            {
                Addlog("全网发布.GetPublishResult异常", "GetPublishResult异常:" + ex.Message);
                return Content("success");
            }
        }
        /// <summary>
        /// 获取解密后的XDocument
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="appId">授权方公众号AppId</param>
        /// <param name="token"></param>
        /// <param name="encodingAESKey"></param>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <returns></returns>
        public XDocument GetDecryptXDocument(XDocument doc, string appId, string token, string encodingAESKey, string signature, string timestamp, string nonce)
        {
            try
            {
                WechatBizMsgCrypt msgCrype = new WechatBizMsgCrypt(token, encodingAESKey, appId);

                string decryptDoc = null;

                var result = msgCrype.DecryptMsg(signature, timestamp, nonce, doc.ToString(), ref decryptDoc);
                if (result == 0)
                {
                    return XDocument.Parse(decryptDoc);//完成解密
                }
                return null;
            }
            catch (Exception ex)
            {
                LogHelper.Error("GetDecryptXDocument发生异常", ex);
                return null;
            }
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值