• 00
  • :
  • 00
  • :
  • 00

《微信企业号开发日志》本地调试程序一

微信企业号开发过程中,每次都要上传提交,然后提取日志信息去检查错误,看起来是多么繁琐,有时候还觉得很愚蠢,索性就写一个模拟微信接口的本地调试程序吧。

 

首先完成模拟回调,主要用于验证接口

 

分析微信数据包

回调验证微信get方法提交,提取出来的URL全地址为:

http://www.xxxx.com/xx/xx/QYWX.ashx?msg_signature=xxxxxx&timestamp=xxxx&nonce=77969147&echostr=xxx

 

分析地址,我们只要模拟这个地址,把参数传给我们本地,就可以实现本地调试,附上微信回调验证说明

验证URL有效性

当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功。

参数描述是否必带
msg_signature 微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
timestamp 时间戳
nonce 随机数
echostr 加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文 首次校验时必带

企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业应用对echostr参数解密并原样返回echostr明文(不能加引号),则接入验证生效,回调模式才能开启。

注意到这句话:msg_signature    微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体

 

我本想找一个msg_signature加密的算法,奈何能力有限,放弃之,最终这篇文章以失败告终,

 

最后呢。我的做法是,提取微信回调验证的全部URL,自己做了一个这样的winform窗体,然后把地址host那部分改成本地local+端口号,凑合着用了:

界面如下:

 

说明,1.为微信企业号需要设置的,2.3.是从微信回调信息里面提取出来的参数,已有所有操作打算就用这些参数了,因为没找到msg_signate的加密方法,所以只能提取原参数的,

 

URL中不用填写参数,点击本地回调以后,会自动生成完整的回调验证URL

 

 

本节主要代码:

     /// <summary>
        /// 微信首次回调验证
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_CallBackValidate_Click(object sender, EventArgs e)
        {
            string URL = GenerateValidationURL();
            txt_ValidURL.Text = URL;

            if (String.IsNullOrEmpty(URL)) return;

            txt_ValidBackData.Text = CommonTools.GetWebData(URL);
        }

        #region 生成回调URL相关函数

        /// <summary>
        /// 生成验证回调的URL
        /// </summary>
        /// <returns></returns>
        private string GenerateValidationURL()
        {
            string URL = GenerateURL();
            if (String.IsNullOrEmpty(URL))
                return "";
            if (ValidateTextEmpty(txt_echostr, "请填写echostr(微信回调获取到的)") == true) return "";
            URL += String.Format("&echostr={0}", txt_echostr.Text);
            return URL;
        }

        /// <summary>
        /// 生成发消息用的回调函数
        /// </summary>
        /// <returns></returns>
        private string GenerateURL()
        {
            if (!ValidateBeforGenerateURL())
                return "";
            string urlFormat = "{0}?msg_signature={1}&timestamp={2}&nonce={3}";

            string URL = String.Format(urlFormat, txt_URL.Text, txt_msg_signature.Text, txt_timestamp.Text, txt_nonce.Text);

            return URL;
        }

        /// <summary>
        /// 生成回调带参数URL前验证
        /// </summary>
        /// <returns></returns>
        bool ValidateBeforGenerateURL()
        {
            if (ValidateTextEmpty(txt_URL, "请填写URL(不带参数)") == true) return false;
            if (ValidateTextEmpty(txt_msg_signature, "请填写msg_signature(微信回调获取到的)") == true) return false;
            if (ValidateTextEmpty(txt_timestamp, "请填写timestamp(微信回调获取到的)") == true) return false;
            if (ValidateTextEmpty(txt_nonce, "请填写nonce(微信回调获取到的)") == true) return false;

            return true;

        }

        /// <summary>
        /// 判断textbox是否为空,如果为空返回true,并弹出消息框
        /// </summary>
        /// <param name="txt"></param>
        /// <param name="EmptyMsg"></param>
        /// <returns></returns>
        private bool ValidateTextEmpty(TextBox txt,string EmptyMsg)
        {
            if (String.IsNullOrEmpty(txt.Text))
            {
                MessageBox.Show(EmptyMsg);
                txt_URL.Focus();
                return true;
            }
            return false;
        }

        #endregion

 

 

 

然后输入从获取到的微信回调地址(改为本地host),在本地就尅实现调试啦!!!

 

注,最好补充下INI配置文件,以保存各参数,这样软件下次打开的时候不用重新写参数了

本节到此结束

 

 

日志列表:

《微信企业号开发日志》本地调试程序一

《微信企业号开发日志》本地调试程序二

《微信企业号开发日志》本地调试程序三

《微信企业号开发日志》本地调试程序四

 

posted @ 2014-10-20 17:44  Garson_Zhang  阅读(2106)  评论(0编辑  收藏  举报