微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github

4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest

----------------------------------------------------------------------------

4月24日,感谢@八二制造的提醒,修复了自定义菜单查询返回的错误,现已修正。

-----------------------------------------------------------------------------

4月21日,框架类库已更新至NuGet,在NuGet中搜索JCSoft或者Weixin就能查到,感谢大家的支持,后续会把Outh2验证加上

NuGet控制台使用方法:

PM> Install-Package JCSoft.WX.Framework

----------------------------------------------------

用了一个多星期的时间,把微信快速开发框架进行了改进,之前1.0版本针对的是普通订阅号,V2.0版本将会对微信所有接口都进行支持。楼主开发的目的也是想让大家能够快速建立起微信公众平台(WXPP),据说现在开发个微信公众平台月薪可以达到10K,如果您觉得好,也可以捐助楼主一下,哈哈。

好久没被首推了,现在怎么申请首推啊?

此次更新的内容:

1、去除了Model类库,合并到WX.Framework类库

2、增加了对高级接口的支持

3、增加了API调用方式

4、支持获取AccessToken

5、增加了测试代码

6、增加群发功能,包括群发后时间的响应。

这次更新的内容较多,我会一一来演示给大家看的,目前还未支持上传和下载媒体文件,对于微信文档中说的Post/Form方式不太了解,示例也用了CURL,这个更不了解了。

微信公众平台类型

如果您刚解除微信公众平台,可以参考【建立微信公众平台测试账号】,目前微信公众平台账号类型分为:订阅号,服务号,账号类型的不同,所支持的接口也不相同:

之前1.0版本仅仅支持订阅号未认证的情况。1.0版本的使用可以参考:【体验微信公众平台快速开发框架】和【利用快速开发框架,快速搭建微信浏览博客园首页文章

通过实现IMessageRole.MessageRole(MiddleMessage message)和IMessageHandler.HandlerRequestMessage(MiddleMessage message),自定义规则和返回数据。在此不再重复表述。

V2.0支持自定义菜单及高级接口

V2.0已经基本支持自定义菜单及高级接口,自定义菜单和高级接口采用API方式与微信服务器端交互。

IApiClient:Api接口类

DefaultApiClient:实现了IApiClient的Execute方法

ApiResponse:微信服务端返回的数据,这个是个抽象类,所有继承的Response在WX.Model.Responses命名空间内

ApiRequest<ApiResponse>:发送到微信服务器短的数据,也是个抽象类,所有与之相关的Request都在WX.Model.Requests命名空间内

ApiRequest<ApiResponse>与ApiResponse是一一对应的关系。

ApiAccessTokenManager:因为自定义菜单及高级接口都需要AccessToken,所以写了一个TokenManager,使用的是单例模式,如果您想使用此类,您必须在配置文件中提供:wxappid和wxappsecret的值,也可以通过ApiAccessTokenManager.Instance.SetAppIdentity(appid, appsecret)初始设置。

示例一:获取AccessToken

上述已经说明,在自定义菜单和高级接口中,都需要提供AccessToken,AccessToken的获取方式可以查看微信平台文档

自定义获取AccessToken方式:

         var appid = new AppIdentication("appid", "appsecret");
            var request = new AccessTokenRequest(appid);
            IApiClient client = new DefaultApiClient();
            var response = client.Execute(request);
            if (response.IsError)
            {
                Console.WriteLine("get token is error");
            }
            else
            {
                Console.WriteLine(response.Access_Token);
            }

使用ApiAccessTokenManager获取AccessToken:

ApiAccessTokenManager.Instance.GetCurrentToken();

使用ApiAccessTokenManager的话,必须先设置AppId和AppSecret,有2种方式:

1、配置文件方式:

<configuration>
  <appSettings>

    <add key="wxappid" value="123"/>

    <add key="wxappsecret" value="123"/>

  </appSettings>

</configuration>

2、代码方式:

ApiAccessTokenManager.Instance.SetAppIdentity("123", "123");

要注意下,GetCurrentToken()使用前,您必须配置好您的Appid和AppSecret。

ApiAccessTokenManager还提供了过期管理,一般Token的有效时间为7200秒,ApiAccessTokenManager可以自动刷新Token。

创建自定义菜单

普通的订阅号只要认证以后,就支持了自定义菜单,目前认证费为300元,接口详细文档请点击查看

我们先看下实现后的效果:

接下来,我们看下实现代码:

var request = new MenuCreateRequest
            {
                AccessToken = ApiAccessTokenManager.Instance.GetCurrentToken(),
                Buttons = new List<ClickButton>
                {
                    new ClickButton{
                        Name = "博客",
                        Url = "http://inday.cnblogs.com",
                        Type = ClickButtonType.view
                    },

                    new ClickButton{
                        Name = "文章",
                        SubButton = new List<ClickButton>{
                            new ClickButton{
                                Name = "推荐",
                                Url = "http://www.cnblogs.com",
                                Type = ClickButtonType.view
                            },
                            new ClickButton {
                                Name = "精华",
                                Url = "http://www.cnblogs.com/pick/",
                                Type = ClickButtonType.view
                            }
                        }
                    },

                    new ClickButton{
                        Name = "新闻",
                        Url="http://www.cnblogs.com/news/",
                        Type = ClickButtonType.view
                    },
                }
            };
            var response = m_client.Execute(request);
            if (response.IsError)
            {
                Console.WriteLine(response);
            }
            else
            {
                Assert.Equal(false, response.IsError);
                Assert.Equal("ok", response.ErrorMessage);
            }

简单吧,你只要提供一个MenuCreateRequest的实例,通过IApiClient.Execute执行就可以了。

我在Api.Requests和Api.Responses中的命名规则是根据微信服务器路径的规则。比如创建自定义菜单的url为:

所以我的Request就是MenuCreateRequest,对应的Response就是MenuCreateResponse。

如果想看测试想过,请微信扫描一下我的测试公众账号:

获取所有关注用户

接下来我们看下如何获取所有关注用户,此为高级接口,需要服务号+认证,详情点击查看文档

var request = new UserGetRequest
            {
                AccessToken = ApiAccessTokenManager.Instance.GetCurrentToken(),
                NextOpenId = ""
            };
            var response = m_client.Execute(request);
            if (!response.IsError)
            {
                foreach (var user in response.Data.OpenIds)
                {
                    Console.WriteLine(user);
                }
            }

默认每次提取10000个关注用户,我在Xunit测试下,测试结果如下:

OpenId为对于某一公众账号的唯一标示,我们可以指定NextOpenId指定提取此ID后10000个关注用户,比如:

var request = new UserGetRequest
            {
                AccessToken = ApiAccessTokenManager.Instance.GetCurrentToken(),
                NextOpenId = "oI1_vjreLbQfGy79Thnsh4ziJZNo"
            };

结果:

Api接口对应文档

篇幅有限,不可能一一介绍,大家可以参考微信开发文档,使用申请测试账号进行测试,快速开发框架对应的Api如下表所示。


功能


ApiRequest


ApiResponse


自定义菜单创建接口


MenuCreateRequest


MenuCreateResponse


自定义菜单查询接口


MenuGetRequest


MenuGetResponse


自定义菜单删除接口


MenuDeleteRequest


MenuDeleteResponse


创建分组


GroupsCreateRequest


GroupsCreateResponse


查询所有分组


GroupsGetRequest


GroupsGetResponse


查询用户所在分组


GroupsGetIdRequest


GroupsGetIdResponse


修改分组名


GroupsUpdateRequest


GroupsUpdateResponse


移动用户分组


GroupsMembersUpdateRequest


GroupsMembersUpdateResponse


获取用户基本信息


UserInfoRequest


UserInfoResponse


获取关注者列表


UserGetRequest


UserGetResponse


创建二维码Ticket


QrcodeCreateRequest


QrcodeCreateResponse


上传图文消息素材


MediaUploadNewsRequest


MediaUploadNewsResponse


根据分组进行群发


MessageMassSendAllRequest


MessageMassSendAllResponse


根据OpenId列表进行发送


MessageMassSendRequest


MessageMassSendResponse


删除群发


MessageMassDeleteRequest


MessageMassDeleteResponse

写在最后

经过一段时间的更新代码,对于微信快速开发框架也算告一段落,后续可能会比较忙碌点,如果出现bug,请大家与我取得联系,我会第一时间去更新代码,过段时间也会提供到腾讯公众论坛去,看看能否被推荐。

在项目中,我加入了测试项目,其中Really开头的为真实测试,需要Appid和AppSecret,Mock开头的为虚拟的,只测试了输出和返回的验证,可能不太严谨,但因为时间有限所以未做详细的测试。

在ApiRequest类中,都有Validate()的方法,目前还未完善,只有简单的对于AccessToken的验证,后续会与微信公众开发平台标准进行更新。

目前源代码完全公开在Github中,开源协议还未想好,等有空再说吧。

最近参加了某个公司的应聘,未成功,人家就看了简历就否了,没办法,人老珠黄,文凭才中专,经验多有何用呢,呵呵!有好公司觉得在下还可以,可以与我私聊,不过本人有言在先,本人简历写得很烂(懒得更新,那么多项目谁记得清楚呢),无文凭(如果中专也算的话。。。),英文不会说只会看(目前关键就是在学英文),不过本人除了会开发外,还会根据工作的性质,技术结合工作来,相信物有所值滴。还有要笔试基础的就免了,实在没脑子去背这么多,不是专业的面试狂,只是想改善家庭生活而已。

时间: 2024-07-28 21:46:24

微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github的相关文章

微信快速开发框架(七)--发送客服信息,版本更新至V2.2 代码已更新至github

在V2版本发布的博文中,已经介绍了大多数Api的用法,同时也收到了很多意见,其中发布了几个修正版本,修改了几个bug,在此感谢大家的使用,有了大家的支持,相信快速开发框架会越来越好,也会越来越完善的. 如果您是第一次看到此框架,可以先从以下链接了解下: 一.对微信公众平台开发的消息处理    二.快速开发微信公众平台框架---简介    三.建立微信公众平台测试账号    四.体验微信公众平台快速开发框架    五.利用快速开发框架,快速搭建微信浏览博客园首页文章    六.微信快速开发框架(W

微信快速开发框架(九)-- V3.0发布,代码已更新至Github 新增微店功能

    版本内容 1.修正了缺少对Event.View的支持 2.增加了用户UnionID 3.新增微信小店功能 4.多客服功能 5.单元测试 什么是UnionID 我们知道,每个用户针对一个微信公众账号都有一个openId,对于不同的公众账号,openId都是不同的,但很多公司都有很多微信号,用户也会同时关注同个公司的多个微信账号,为确保用户的唯一性,腾讯增加了UnionID字段,它可以确保在同个微信开放平台(open.weixin.qq.com)账号下的多个公众号的同个用户的唯一性.点击传送

微信宣布一大开放措施6.0版本上线的小视频功能

摘要: 继开放JS SDK.多客服功能之后,微信又宣布一大开放措施6.0版本上线的小视频功能,公众平台也支持接收和发送了.这意味着 通过微信验证的公众号 和粉丝可以通过互相发送小视频, 继开放JS SDK.多客服功能之后,微信又宣布一大开放措施--6.0版本上线的小视频功能,公众平台也支持接收和发送了.这意味着通过微信验证的公众号和粉丝可以通过互相发送小视频,实现实时互动. 逗逼粉丝们可以放马过来了,剪个合辑出来一定很惊喜. 公众号接收来自微信用户的小视频,保存到素材库. 公众号将小视频插入图文

微信(weixin)大转盘抽奖页面、数据库以及抽奖算法(PHP源码...

问题描述 在做http://www.111cn.net/list-271/的过程中用到了微信抽奖,看了其他的作者都只是吧微信抽奖的页面共享出来了.作者现在把转盘抽奖程序和微信抽奖页面都共享出来,有需要的自己把两者组合一下即可.http://uni-key.com/c/data/atta ... 3.jpg **2014030702013262.jpg** _(35.14 KB, 下载次数: 0)_http://uni-key.com/c/forum.php ... 3Dyes 4 天前 上传 部

百度浏览器7.0版本上线 具备六重加速功能体系

DoNews 11月5日消息 日前,http://www.aliyun.com/zixun/aggregation/1665.html">百度浏览器7.0版本正式上线,该版本搭载Chromium38内核,具备六重加速功能体系. 据了解,由于搭载Chromium38内核的浏览器,百度浏览器7.0版本占用资源更少,可给用户带来更快的上网体验.更稳定的网页浏览和更炫酷的网页效果. 同时,百度浏览器7.0具备六重加速功能体系,即预取引擎.搜索加速.视频加速.淘宝加速.海外加速和GPU加速.&quo

JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】_javascript技巧

本文实例讲述了JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法.分享给大家供大家参考,具体如下: 实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的中文内容呢? 过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系:然后监听键盘事件,当用户按下键盘时,根据键值得到按下的

微信网页授权(OAuth2.0) PHP 源码简单实现_php实例

提要:  1. 建议对OAuth2.0协议做一个学习.  2. 微信官方文档和微信官网工具要得到充分利用.  比较简单,直接帖源代码了.其中"xxxxxxxxxx"部分,是需要依据自己环境做替换的 /** * OAuth2.0微信授权登录实现 * * @author zzy * @文件名:GetWxUserInfo.php */ // 回调地址 $url = urlencode("http://www.xxxxxxxxx.com/GetWxUserInfo.php"

具有颠覆效应的微信5.0版本(ForiOS版)正式发布

8月5日,此前被市场预期具有颠覆效应的微信5.0版本(ForiOS版)正式发布.与以前版本不同,微信5.0版本在功能上引入了微信支付.表情商店.游戏中心.二维码扫描条形码报价.扫描英文翻译.封面.街景等功能. 受此消息影响,近期大热的手游概念股昨日再度活跃,截至收盘,手游概念板块大涨4.68%. 个股方面,手游概念板块内15只昨日进行交易的成份股全部实现上涨,其中,博瑞传播(10.01%).天音控股(9.94%)强势涨停,此外,浙报传媒(7.10%).华谊兄弟(6.93%).鸿博股份(6.08%

最近一段时间,微信都在接连着快速推出新版本

如今微信不仅强化了搜索功能,可以识别图片中的二维码,还提供了面对面收钱功能,此外还能够适配iPad等智能终端,甚至还可以直接分享小视频.光是在最后一点,土妖就听到不少朋友点头称赞. 事情到此,用赵忠祥老湿的话来说,"本来是一件挺美好的事情".但是,和微信每发一个新版,就有"革命说"--微信要个手Q的命,微信要革电商的命,微信要革移动支付的命一样,果不其然,又有人要革命了,这次革命的对象是李彦宏和他的搜索. 对于这一点,不知道小马哥怎么看,但是在土妖看来,这些摇旗呐喊