Senparc.Weixin
全局设置
请求超时设置(以毫秒为单位),默认为10秒。
说明:此处常量专为提供给方法的参数的默认值,不是方法内所有请求的默认超时时间。
指定是否是Debug状态,如果是,系统会自动输出日志
微信容器接口(如Ticket、AccessToken)
所有数据集合的列表
获取完整的数据集合的列表,包括所有的Container数据在内(建议不要进行任何修改操作)
获取所有容器内已经注册的项目
(此方法将会遍历Dictionary,当数据项很多的时候效率会明显降低)
尝试获取某一项Bag
尝试获取某一项Bag中的具体某个属性
具体某个属性
更新数据项
为null时删除该项
更新数据项
为null时删除该项
检查Key是否已经注册
获取当前容器的数据项集合
IBaseContainerBag
BaseContainer容器中的Value类型
通常为AppId
最大记录条数(保留尾部),如果小于等于0则不限制
微信消息上下文(单个用户)接口
请求消息类型
响应消息类型
用户名(OpenID)
最后一次活动时间(用户主动发送Resquest请求的时间)
接收消息记录
响应消息记录
最大储存容量(分别针对RequestMessages和ResponseMessages)
临时储存数据,如用户状态等,出于保持.net 3.5版本,这里暂不使用dynamic
用于覆盖WeixinContext所设置的默认过期时间
AppStore状态,系统属性,请勿操作
微信消息上下文(单个用户)
执行上下文被移除的事件
注意:此事件不是实时触发的,而是等过期后任意一个人发过来的下一条消息执行之前触发。
maxRecordCount如果小于等于0,则不限制
此上下文被清除的时候触发
AppStore状态,系统属性,请勿操作
当MessageContext被删除时触发的事件
微信消息列队(针对单个账号的往来消息)
是否开启上下文记录
微信消息上下文(全局)
默认过期时间:90分钟
重置所有上下文参数,所有记录将被清空
获取MessageContext,如果不存在,返回null
这个方法的更重要意义在于操作TM队列,及时移除过期信息,并将最新活动的对象移到尾部
用户名(OpenId)
获取MessageContext
用户名(OpenId)
True:如果用户不存在,则创建一个实例,并返回这个最新的实例
False:用户储存在,则返回null
获取MessageContext,如果不存在,使用requestMessage信息初始化一个,并返回原始实例
获取MessageContext,如果不存在,使用requestMessage信息初始化一个,并返回原始实例
记录请求信息
请求信息
记录响应信息
响应信息
获取最新一条请求数据,如果不存在,则返回Null
用户名(OpenId)
获取最新一条响应数据,如果不存在,则返回Null
用户名(OpenId)
所有MessageContext集合,不要直接操作此对象
MessageContext列队(LastActiveTime升序排列),不要直接操作此对象
每一个MessageContext过期时间
最大储存上下文数量(分别针对请求和响应信息)
对话上下文被删除时触发事件的事件数据
该用户的OpenId
最后一次响应时间
上下文对象
所有微信自定义实体的基础接口
生成JSON时忽略NULL对象
企业号JSON返回结果
为P2P返回结果做准备
所有Request和Response消息的基类
接收解密信息统一接口
接收加密信息统一基类
设置服务器内部保密信息
CommonJsonSend中的http提交类型
公众号返回码(JSON)
应该更名为ReturnCode_MP,但为减少项目中的修改,此处依旧用ReturnCode命名
客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid kf_acount length)
客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account)
客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)
企业号返回码
语言
中文简体
中文繁体
英文
AppStore状态
无状态
已进入应用状态
退出App状态(临时传输状态,退出后即为None)
JSON返回错误代码(比如token_access相关操作中使用)。
微信自定义异常基类
未知请求类型。
Allows JSON serialization of Expando objects into expected results (e.g., "x: 1, y: 2") instead of the default dictionary serialization.
转换微信DateTime时间到C#时间
微信DateTime
转换微信DateTime时间到C#时间
微信DateTime
获取微信DateTime(UNIX时间戳)
时间
根据完整文件路径获取FileStream
Extension method that turns a dictionary of string and object to an ExpandoObject
Snagged from http://theburningmonk.com/2011/05/idictionarystring-object-to-expandoobject-extension-method/
序列化帮助类
unicode解码
将对象转为JSON字符串
需要生成JSON字符串的数据
JSON输出设置
JSON输出设置
JSON输出设置 构造函数
是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中
需要特殊忽略null值的属性名称
指定类型(Class,非Interface)下的为null属性不生成到Json中
是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中
需要特殊忽略null值的属性名称
指定类型(Class,非Interface)下的为null属性不生成到Json中
微信JSON转换器
判断是否在微信内置浏览器中
CommonJsonSend
向需要AccessToken的API发送消息的公共方法
这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数
如果是Get方式,可以为null
代理请求超时时间(毫秒)
向需要AccessToken的API发送消息的公共方法
这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数
用accessToken参数填充{0}
如果是Get方式,可以为null
代理请求超时时间(毫秒)
判断accessTokenOrAppId参数是否是AppId
反序列化
类型
XML字符串
反序列化
序列化
说明:此方法序列化复杂类,如果没有声明XmlInclude等特性,可能会引发“使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型。”的错误。
类型
对象
序列化将流转成XML字符串
GET方式请求URL,并返回T类型
接收JSON的数据类型
从Url下载
获取Post结果
发起Post请求
返回数据类型(Json对应的实体)
请求Url
CookieContainer,如果不需要则设为null
代理请求超时时间(毫秒)
发起Post请求
返回数据类型(Json对应的实体)
请求Url
CookieContainer,如果不需要则设为null
文件流
代理请求超时时间(毫秒)
验证服务器证书回调自动验证
PostGetJson
使用Post方法上传数据并下载文件或结果
使用Get方法获取字符串结果(没有加入Cookie)
使用Get方法获取字符串结果(加入Cookie)
使用Post方法获取字符串结果,常规提交
使用Post方法获取字符串结果
需要上传的文件,Key:对应要上传的Name,Value:本地文件名
验证服务器证书回调自动验证
验证服务器证书
请求是否发起自微信客户端的浏览器
组装QueryString的方法
参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
填充表单信息的Stream
封装System.Web.HttpUtility.HtmlEncode
封装System.Web.HttpUtility.HtmlDecode
封装System.Web.HttpUtility.UrlEncode
封装System.Web.HttpUtility.UrlDecode
公众号JSON返回结果(用于菜单接口等)
为P2P返回结果做准备
为IMessageHandler单独提供XDocument类型的属性接口(主要是ResponseDocument)。
分离这个接口的目的是为了在MvcExtension中对IMessageHandler解耦,使用IMessageHandlerDocument接口直接操作XML。
在构造函数中转换得到原始XML数据
根据ResponseMessageBase获得转换后的ResponseDocument
注意:这里每次请求都会根据当前的ResponseMessageBase生成一次,如需重用此数据,建议使用缓存或局部变量
最后返回的ResponseDocument。
如果是Senparc.Weixin.MP引用,并且未设置未加密,则应当和ResponseDocument一致;除此以外(Senparc.Weixin.QY或已加密),则应当在ResponseDocument基础上进行加密
文字返回信息。当TextResponseMessage不为null时,才获取ResponseDocument
执行微信请求
发送者用户名(OpenId)
取消执行Execute()方法。一般在OnExecuting()中用于临时阻止执行Execute()。
默认为False。
如果在执行OnExecuting()执行前设为True,则所有OnExecuting()、Execute()、OnExecuted()代码都不会被执行。
如果在执行OnExecuting()执行过程中设为True,则后续Execute()及OnExecuted()代码不会被执行。
建议在设为True的时候,给ResponseMessage赋值,以返回友好信息。
请求实体
响应实体
只有当执行Execute()方法后才可能有值
是否使用了MessageAgent代理
忽略重复发送的同一条消息(通常因为微信服务器没有收到及时的响应)
微信请求的集中处理方法
此方法中所有过程,都基于Senparc.Weixin的基础功能,只为简化代码而设。
构造函数公用的初始化方法
需要传入到Init的参数
使用postDataDocument的构造函数
需要传入到Init的参数
使用requestMessageBase的构造函数
需要传入到Init的参数
初始化,获取RequestDocument。
Init中需要对上下文添加当前消息(如果使用上下文)
执行微信请求
全局消息上下文
当前用户消息上下文
发送者用户名(OpenId)
取消执行Execute()方法。一般在OnExecuting()中用于临时阻止执行Execute()。
默认为False。
如果在执行OnExecuting()执行前设为True,则所有OnExecuting()、Execute()、OnExecuted()代码都不会被执行。
如果在执行OnExecuting()执行过程中设为True,则后续Execute()及OnExecuted()代码不会被执行。
建议在设为True的时候,给ResponseMessage赋值,以返回友好信息。
在构造函数中转换得到原始XML数据
根据ResponseMessageBase获得转换后的ResponseDocument
注意:这里每次请求都会根据当前的ResponseMessageBase生成一次,如需重用此数据,建议使用缓存或局部变量
最后返回的ResponseDocument。
如果是Senparc.Weixin.QY,则应当和ResponseDocument一致;如果是Senparc.Weixin.QY,则应当在ResponseDocument基础上进行加密
请求实体
响应实体
正常情况下只有当执行Execute()方法后才可能有值。
也可以结合Cancel,提前给ResponseMessage赋值。
是否使用了MessageAgent代理
忽略重复发送的同一条消息(通常因为微信服务器没有收到及时的响应)
文字类型返回消息
接收到请求的消息
响应回复消息
获取Stream的Base64字符串
将base64String反序列化到流,或保存成文件
如果为null则不保存
将memoryStream保存到文件
微信日志跟踪
统一时间格式
记录日志
API请求日志
ErrorJsonResultException 日志