溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

發(fā)布時(shí)間:2020-06-13 13:17:05 來(lái)源:網(wǎng)絡(luò) 閱讀:1082 作者:inday 欄目:編程語(yǔ)言

4月28日,已增加多媒體上傳及下載API,對(duì)應(yīng)MediaUploadRequest和MediaGetRequest

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

4月24日,感謝@八二制造的提醒,修復(fù)了自定義菜單查詢(xún)返回的錯(cuò)誤,現(xiàn)已修正。

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

4月21日,框架類(lèi)庫(kù)已更新至NuGet,在NuGet中搜索JCSoft或者Weixin就能查到,感謝大家的支持,后續(xù)會(huì)把Outh3驗(yàn)證加上

NuGet控制臺(tái)使用方法:

PM> Install-Package JCSoft.WX.Framework

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

用了一個(gè)多星期的時(shí)間,把微信快速開(kāi)發(fā)框架進(jìn)行了改進(jìn),之前1.0版本針對(duì)的是普通訂閱號(hào),V2.0版本將會(huì)對(duì)微信所有接口都進(jìn)行支持。樓主開(kāi)發(fā)的目的也是想讓大家能夠快速建立起微信公眾平臺(tái)(WXPP),據(jù)說(shuō)現(xiàn)在開(kāi)發(fā)個(gè)微信公眾平臺(tái)月薪可以達(dá)到10K,如果您覺(jué)得好,也可以捐助樓主一下,哈哈。

好久沒(méi)被首推了,現(xiàn)在怎么申請(qǐng)首推啊?

此次更新的內(nèi)容:

1、去除了Model類(lèi)庫(kù),合并到WX.Framework類(lèi)庫(kù)

2、增加了對(duì)高級(jí)接口的支持

3、增加了API調(diào)用方式

4、支持獲取AccessToken

5、增加了測(cè)試代碼

6、增加群發(fā)功能,包括群發(fā)后時(shí)間的響應(yīng)。

這次更新的內(nèi)容較多,我會(huì)一一來(lái)演示給大家看的,目前還未支持上傳和下載媒體文件,對(duì)于微信文檔中說(shuō)的Post/Form方式不太了解,示例也用了CURL,這個(gè)更不了解了。

微信公眾平臺(tái)類(lèi)型

如果您剛解除微信公眾平臺(tái),可以參考【建立微信公眾平臺(tái)測(cè)試賬號(hào)】,目前微信公眾平臺(tái)賬號(hào)類(lèi)型分為:訂閱號(hào),服務(wù)號(hào),賬號(hào)類(lèi)型的不同,所支持的接口也不相同:

微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

之前1.0版本僅僅支持訂閱號(hào)未認(rèn)證的情況。1.0版本的使用可以參考:【體驗(yàn)微信公眾平臺(tái)快速開(kāi)發(fā)框架】和【利用快速開(kāi)發(fā)框架,快速搭建微信瀏覽博客園首頁(yè)文章】

通過(guò)實(shí)現(xiàn)IMessageRole.MessageRole(MiddleMessage message)和IMessageHandler.HandlerRequestMessage(MiddleMessage message),自定義規(guī)則和返回?cái)?shù)據(jù)。在此不再重復(fù)表述。

V2.0支持自定義菜單及高級(jí)接口

V2.0已經(jīng)基本支持自定義菜單及高級(jí)接口,自定義菜單和高級(jí)接口采用API方式與微信服務(wù)器端交互。

IApiClient:Api接口類(lèi)

DefaultApiClient:實(shí)現(xiàn)了IApiClient的Execute方法

ApiResponse:微信服務(wù)端返回的數(shù)據(jù),這個(gè)是個(gè)抽象類(lèi),所有繼承的Response在WX.Model.Responses命名空間內(nèi)

ApiRequest<ApiResponse>:發(fā)送到微信服務(wù)器短的數(shù)據(jù),也是個(gè)抽象類(lèi),所有與之相關(guān)的Request都在WX.Model.Requests命名空間內(nèi)

ApiRequest<ApiResponse>與ApiResponse是一一對(duì)應(yīng)的關(guān)系。

ApiAccessTokenManager:因?yàn)樽远x菜單及高級(jí)接口都需要AccessToken,所以寫(xiě)了一個(gè)TokenManager,使用的是單例模式,如果您想使用此類(lèi),您必須在配置文件中提供:wxappid和wxappsecret的值,也可以通過(guò)ApiAccessTokenManager.Instance.SetAppIdentity(appid, appsecret)初始設(shè)置。

示例一:獲取AccessToken

上述已經(jīng)說(shuō)明,在自定義菜單和高級(jí)接口中,都需要提供AccessToken,AccessToken的獲取方式可以查看微信平臺(tái)文檔。

自定義獲取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的話(huà),必須先設(shè)置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還提供了過(guò)期管理,一般Token的有效時(shí)間為7200秒,ApiAccessTokenManager可以自動(dòng)刷新Token。

創(chuàng)建自定義菜單

普通的訂閱號(hào)只要認(rèn)證以后,就支持了自定義菜單,目前認(rèn)證費(fèi)為300元,接口詳細(xì)文檔請(qǐng)點(diǎn)擊查看

我們先看下實(shí)現(xiàn)后的效果:

微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

接下來(lái),我們看下實(shí)現(xiàn)代碼:

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);
            }

簡(jiǎn)單吧,你只要提供一個(gè)MenuCreateRequest的實(shí)例,通過(guò)IApiClient.Execute執(zhí)行就可以了。

我在A(yíng)pi.Requests和Api.Responses中的命名規(guī)則是根據(jù)微信服務(wù)器路徑的規(guī)則。比如創(chuàng)建自定義菜單的url為:微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

所以我的Request就是MenuCreateRequest,對(duì)應(yīng)的Response就是MenuCreateResponse。

如果想看測(cè)試想過(guò),請(qǐng)微信掃描一下我的測(cè)試公眾賬號(hào):微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

獲取所有關(guān)注用戶(hù)

接下來(lái)我們看下如何獲取所有關(guān)注用戶(hù),此為高級(jí)接口,需要服務(wù)號(hào)+認(rèn)證,詳情點(diǎn)擊查看文檔

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);
                }
            }

默認(rèn)每次提取10000個(gè)關(guān)注用戶(hù),我在Xunit測(cè)試下,測(cè)試結(jié)果如下:

微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

OpenId為對(duì)于某一公眾賬號(hào)的唯一標(biāo)示,我們可以指定NextOpenId指定提取此ID后10000個(gè)關(guān)注用戶(hù),比如:

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

結(jié)果:

微信快速開(kāi)發(fā)框架(WXPP QuickFramework)V2.0版本上線(xiàn)--源碼已更新至github

Api接口對(duì)應(yīng)文檔

篇幅有限,不可能一一介紹,大家可以參考微信開(kāi)發(fā)文檔,使用申請(qǐng)測(cè)試賬號(hào)進(jìn)行測(cè)試,快速開(kāi)發(fā)框架對(duì)應(yīng)的Api如下表所示。

功能

ApiRequest

ApiResponse

自定義菜單創(chuàng)建接口

MenuCreateRequest

MenuCreateResponse

自定義菜單查詢(xún)接口

MenuGetRequest

MenuGetResponse

自定義菜單刪除接口

MenuDeleteRequest

MenuDeleteResponse

創(chuàng)建分組

GroupsCreateRequest

GroupsCreateResponse

查詢(xún)所有分組

GroupsGetRequest

GroupsGetResponse

查詢(xún)用戶(hù)所在分組

GroupsGetIdRequest

GroupsGetIdResponse

修改分組名

GroupsUpdateRequest

GroupsUpdateResponse

移動(dòng)用戶(hù)分組

GroupsMembersUpdateRequest

GroupsMembersUpdateResponse

獲取用戶(hù)基本信息

UserInfoRequest

UserInfoResponse

獲取關(guān)注者列表

UserGetRequest

UserGetResponse

創(chuàng)建二維碼Ticket

QrcodeCreateRequest

QrcodeCreateResponse

上傳圖文消息素材

MediaUploadNewsRequest

MediaUploadNewsResponse

根據(jù)分組進(jìn)行群發(fā)

MessageMassSendAllRequest

MessageMassSendAllResponse

根據(jù)OpenId列表進(jìn)行發(fā)送

MessageMassSendRequest

MessageMassSendResponse

刪除群發(fā)

MessageMassDeleteRequest

MessageMassDeleteResponse

寫(xiě)在最后

經(jīng)過(guò)一段時(shí)間的更新代碼,對(duì)于微信快速開(kāi)發(fā)框架也算告一段落,后續(xù)可能會(huì)比較忙碌點(diǎn),如果出現(xiàn)bug,請(qǐng)大家與我取得聯(lián)系,我會(huì)第一時(shí)間去更新代碼,過(guò)段時(shí)間也會(huì)提供到騰訊公眾論壇去,看看能否被推薦。

在項(xiàng)目中,我加入了測(cè)試項(xiàng)目,其中Really開(kāi)頭的為真實(shí)測(cè)試,需要Appid和AppSecret,Mock開(kāi)頭的為虛擬的,只測(cè)試了輸出和返回的驗(yàn)證,可能不太嚴(yán)謹(jǐn),但因?yàn)闀r(shí)間有限所以未做詳細(xì)的測(cè)試。

在A(yíng)piRequest類(lèi)中,都有Validate()的方法,目前還未完善,只有簡(jiǎn)單的對(duì)于A(yíng)ccessToken的驗(yàn)證,后續(xù)會(huì)與微信公眾開(kāi)發(fā)平臺(tái)標(biāo)準(zhǔn)進(jìn)行更新。

目前源代碼完全公開(kāi)在Github中,開(kāi)源協(xié)議還未想好,等有空再說(shuō)吧。

最近參加了某個(gè)公司的應(yīng)聘,未成功,人家就看了簡(jiǎn)歷就否了,沒(méi)辦法,人老珠黃,文憑才中專(zhuān),經(jīng)驗(yàn)多有何用呢,呵呵!有好公司覺(jué)得在下還可以,可以與我私聊,不過(guò)本人有言在先,本人簡(jiǎn)歷寫(xiě)得很爛(懶得更新,那么多項(xiàng)目誰(shuí)記得清楚呢),無(wú)文憑(如果中專(zhuān)也算的話(huà)。。。),英文不會(huì)說(shuō)只會(huì)看(目前關(guān)鍵就是在學(xué)英文),不過(guò)本人除了會(huì)開(kāi)發(fā)外,還會(huì)根據(jù)工作的性質(zhì),技術(shù)結(jié)合工作來(lái),相信物有所值滴。還有要筆試基礎(chǔ)的就免了,實(shí)在沒(méi)腦子去背這么多,不是專(zhuān)業(yè)的面試狂,只是想改善家庭生活而已。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI