微信企业号C#开发配置API - 世凡

时间:2024-04-17 18:47:43

微信开发第一步 :   配置API,实现接收消息服务配置

1.在下图界面先填好内容,事件消息处理可自行选择,我这里是没处理的

 

2.第二步: 使用vs 进行代码的编写,以下是我的代码。LogTextHelper类需要自己写的,微信官方文档下载地址   https://work.weixin.qq.com/api/doc#10128  ,里面有多种版本,可自行选择。

 
        /// <summary>
        /// 处理企业号的信息
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            byte[] btHtml = context.Request.BinaryRead(context.Request.ContentLength);

            string strHtml = System.Text.Encoding.Default.GetString(btHtml);

            LogTextHelper.WriteLogFile(context.Request.Url.ToString() + "\r\n" + strHtml);


            string postString = string.Empty;

            if (context.Request.HttpMethod.ToUpper() == "GET")
            {
                Auth();

            }

            //POST

        }

        /// <summary>
        /// 成为开发者的第一步,验证并相应服务器的数据
        /// </summary>
        private void Auth()
        {
            LogTextHelper LogHelper = new LogTextHelper();

            string token = ConfigurationManager.AppSettings["CorpToken"];//从配置文件获取Token

            string encodingAESKey = ConfigurationManager.AppSettings["EncodingAESKey"];//从配置文件获取EncodingAESKey

            string corpId = ConfigurationManager.AppSettings["CorpId"];//从配置文件获取corpId

            string echoStringinitial = HttpContext.Current.Request.QueryString["echostr"];
            string echoString = HttpUtility.UrlDecode(echoStringinitial);  // 开发文档中写的“企业在获取时需要做urldecode处理”
            string signature = HttpContext.Current.Request.QueryString["msg_signature"];
            string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
            string nonce = HttpContext.Current.Request.QueryString["nonce"];

            string decryptEchoString = "";

            if (CheckSignature(token, signature, timestamp, nonce, corpId, encodingAESKey, echoString, ref decryptEchoString))
            {
                if (!string.IsNullOrEmpty(decryptEchoString))
                {
                    HttpContext.Current.Response.Write(decryptEchoString);
                    HttpContext.Current.Response.End();
                }
            }

        }

        /// <summary>
        /// 验证企业号签名
        /// </summary>
        /// <param name="token">企业号配置的Token</param>
        /// <param name="signature">签名内容</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">nonce参数</param>
        /// <param name="corpId">企业号ID标识</param>
        /// <param name="encodingAESKey">加密键</param>
        /// <param name="echostr">内容字符串</param>
        /// <param name="retEchostr">返回的字符串</param>
        /// <returns></returns>
        public bool CheckSignature(string token, string signature, string timestamp, string nonce, string corpId, string encodingAESKey, string echostr, ref string retEchostr)
        {
            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, corpId);
            int ret=wxcpt.VerifyURL(signature,timestamp,nonce,echostr,ref retEchostr);
            if (ret != 0)
            {
                //LogTextHelper.Error("ERR: VerifyURL fail, ret: " + ret);
                return false;
            }
           
            //  HttpContext.Current.Response.Write(retEchostr);

            return true;

            //ret==0表示验证成功,retEchostr参数表示明文,用户需要将retEchostr作为get请求的返回参数,返回给企业号。
            //HttpUtils.SetResponse(retEchostr);
        }
public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

 

3.第三步:  导入微信官方加解密文件,之后注意 token ,corpid ,encodingAESKey 的值保持一致 。   还有一点就是要注意,cshap 库要下载最新版,老版是没有 VerifyURL()  这个方法的。  这是下载地址 : https://work.weixin.qq.com/api/doc#10128

   <appSettings>
    <!--企业号配置信息-->
    <add key="CorpToken" value="自己所填的token"/>
    <add key="CorpId" value="自己企业号的corpid"/>
    <add key="EncodingAESKey" value="自己所填的加密键"/>
  </appSettings>

 

 

4.将所写的 web应用程序发布到 FTP 上 ,在回到 服务器配置那 ,点击保存,第一次点击会出现 回调URL失败 ,这是因为值还没传过来 。   之后你写的日志文件里就会多个Log  ,将里面的值返回到web应用程序里。  如下图: 

 

这微信服务器发过来的参数 ,Log 里面有。

 

5.这是LogTextHelper.cs  类

 public class LogTextHelper
    {
        //  创建日志
        ///-----------------------------------------------------------------------------
        /// <summary>创建错误日志 在c:\ErrorLog\</summary>
        /// <param name="message">记录信息
        /// <returns></returns>
        ///-----------------------------------------------------------------------------
        public static void WriteLogFile(string message)
        {
            string strPath;                                                  //文件的路径
            DateTime dt = DateTime.Now;
            try
            {
                strPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Log");          //winform工程\bin\目录下 创建日志文件夹 

                if (Directory.Exists(strPath) == false)                          //工程目录下 Log目录 \'目录是否存在,为true则没有此目录
                {
                    Directory.CreateDirectory(strPath);                       //建立目录 Directory为目录对象
                }
                strPath = strPath + "\\" + dt.ToString("yyyy");

                if (Directory.Exists(strPath) == false)
                {
                    Directory.CreateDirectory(strPath);
                }
                strPath = strPath + "\\" + dt.Year.ToString() + "-" + dt.Month.ToString() + ".txt";

                StreamWriter FileWriter = new StreamWriter(strPath, true);        //创建日志文件
                FileWriter.WriteLine("[" + dt.ToString("yyyy-MM-dd HH:mm:ss") + "]  " + message);
                FileWriter.Close();  //关闭StreamWriter对象
            }
            catch (Exception ex)
            {
                string str = ex.Message.ToString();
            }
        }