Ejemplo n.º 1
0
        /// <summary>
        /// 消息处理入口
        /// </summary>
        /// <param name="contentXml">内容信息</param>
        /// <param name="signature">签名信息</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机字符创</param>
        /// <param name="echostr">验证服务器参数,如果存在则只进行签名验证,并将在结果data中返回</param>
        /// <returns>消息结果,Data为响应微信数据,如果出错Message为错误信息</returns>
        public Resp <string> Process(string contentXml, string signature, string timestamp, string nonce,
                                     string echostr)
        {
            // 一.  检查是否是服务器验证
            if (!string.IsNullOrEmpty(echostr))
            {
                return(CheckServerValid(signature, timestamp, nonce, echostr));
            }

            // 二.  正常消息处理
            var checkRes = PrepareExecute(contentXml, signature, timestamp, nonce);

            if (!checkRes.IsSuccess())
            {
                return(new Resp <string>().WithResp(checkRes)); //checkRes.ConvertToResult<string>();
            }
            var contextRes = Execute(checkRes.data);

            if (!contextRes.IsSuccess())
            {
                return(new Resp <string>().WithResp(contextRes));// contextRes.ConvertToResult<string>();
            }
            var resultString = contextRes.data.ReplyMsg.ToReplyXml();

            if (ApiConfig.SecurityType != WXSecurityType.None &&
                !string.IsNullOrEmpty(contextRes.data.ReplyMsg.MsgType))
            {
                return(WXChatHelper.EncryptMsg(resultString, ApiConfig));
            }
            return(new Resp <string>(resultString));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 消息处理入口
        /// </summary>
        /// <param name="contentXml">内容信息</param>
        /// <param name="signature">签名信息,请注意不是[msg_signature]</param>
        /// <param name="msg_signature">消息体签名</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机字符创</param>
        /// <param name="echostr">验证服务器参数,如果存在则只进行签名验证,并将在结果data中返回</param>
        /// <returns>消息结果,Data为响应微信数据,如果出错Message为错误信息</returns>
        public async Task <StrResp> Process(string contentXml, string signature, string msg_signature, string timestamp, string nonce,
                                            string echostr)
        {
            if (string.IsNullOrEmpty(contentXml) || string.IsNullOrEmpty(signature) ||
                string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce))
            {
                return(new StrResp().WithResp(RespTypes.ParaError, "消息相关参数错误!"));
            }

            var appConfigRes = await GetMeta();

            if (!appConfigRes.IsSuccess())
            {
                return(new StrResp().WithResp(appConfigRes));
            }

            var appConfig = appConfigRes.data;

            // 一.  检查是否是微信服务端首次地址配置验证
            if (!string.IsNullOrEmpty(echostr))
            {
                return(CheckServerValid(appConfig, signature, timestamp, nonce, echostr));
            }

            var checkRes = Prepare(appConfig, contentXml, signature, msg_signature, timestamp, nonce);

            if (!checkRes.IsSuccess())
            {
                return(new StrResp().WithResp(checkRes));
            }

            var contextRes = await Processing(checkRes.data);

            if (!contextRes.IsSuccess())
            {
                return(new StrResp().WithResp(contextRes));
            }

            var resultString = contextRes.data.ReplyMsg.ToReplyXml();

            if (appConfig.SecurityType != WXSecurityType.None &&
                !string.IsNullOrEmpty(contextRes.data.ReplyMsg.MsgType))
            {
                return(WXChatHelper.EncryptMsg(resultString, appConfig));
            }
            return(new StrResp(resultString));
        }