博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《微信企业号开发日志》本地调试程序一
阅读量:5887 次
发布时间:2019-06-19

本文共 3330 字,大约阅读时间需要 11 分钟。

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

 

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

 

分析微信数据包

回调验证微信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

 

 

本节主要代码:

     ///         /// 微信首次回调验证        ///         ///         ///         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相关函数        ///         /// 生成验证回调的URL        ///         /// 
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; } /// /// 生成发消息用的回调函数 /// ///
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; } /// /// 生成回调带参数URL前验证 /// ///
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; } /// /// 判断textbox是否为空,如果为空返回true,并弹出消息框 /// /// /// ///
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配置文件,以保存各参数,这样软件下次打开的时候不用重新写参数了

本节到此结束

 

 

日志列表:

 

转载于:https://www.cnblogs.com/GarsonZhang/p/4037746.html

你可能感兴趣的文章
WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
查看>>
e.keycode详解
查看>>
[Android疑难杂症]动态设置TextView的width不起作用
查看>>
xgboost原理及应用
查看>>
Spring--quartz中cronExpression配置说明
查看>>
照片批量压缩、缩放、加水印工具
查看>>
计蒜客:百度的科学计算器(简单)【python神解】
查看>>
阿里前端框架Alice是个不错的选择
查看>>
eclipse maven
查看>>
PreferencePage的小问题花了大把时间
查看>>
[Erlang 0104] 当Erlang遇到Solr
查看>>
域名泛解析设置
查看>>
Android 中的Json解析工具fastjson 、序列化、反序列化
查看>>
Android 设计模式一:EIT造型
查看>>
单机搭建Android开发环境(二)
查看>>
如何申请iOS开发者证书/发布app到手机
查看>>
String、StringBuffer、StringBuilder的区别
查看>>
android实现gif动态图的使用
查看>>
12.5. 集成 Mybatis
查看>>
如何去掉NavigationBar的backButton
查看>>