LaneWeChat 1.2.2 發布,微信快速開發插件

jopen 10年前發布 | 17K 次閱讀 LaneWeChat

開源微信公眾號快速開發插件 LaneWechat 發布 1.2.2 版本。

更新日志:

    更新日期:2014-10-16 

    本次更新是引入了自動載入函數,提升效率。

    本次更新是為1.4版本做準備。

框架簡介

LanWeChat 框架簡介:微信PHP開發框架,快速開發微信公眾號,以第三方代碼包的形式引入即可。

免費使用

LanWeChat 免費使用:非商業產品,免費傳播與使用,并且可以商業化而無需授權。

身經百戰

LanWeChat 身經百戰:已被中國聯通、奇虎360、東方國信等上市公司廣泛使用。

PHP構建

LanWeChat PHP構建:全部使用PHP代碼構建,PHP跨平臺、開發高效的特性深受開發者喜愛。

完全開源

LanWeChat 完全開源:非常歡迎貢獻代碼。使用當前最流行的開源協議WTFPL

通俗文檔

LanWeChat 通俗文檔:文檔通俗易懂,盡量規避專業術語,努力用最白話的形式表述。

極易使用

LanWeChat 極易使用:沒有復雜的代碼和新生語法,原生語言直接調用即可。

開發語言:PHP

版本要求:原則PHP5.3以上

版本規避:若版本低于PHP5.3,則刪除本框架所有頁面開頭namespace一行即可。

命名空間:本框架的命名空間均為LaneWeChat開頭。

常識普及:

一、微信公眾賬號分兩種,一種是訂閱號,一種是服務號。

1、訂閱號是被動響應用戶消息功能,并且每天推送一條消息。

2、服務號是300元/每年認證,被動響應用戶消息,主動給用戶發送消息,自定義菜單按鈕,網頁授權等功能,并且每月推送一條消息。

3、訂閱號適合消息類,新聞類應用,常常需要推送文章給用戶的;服務號適合自助查詢等。

4、訂閱號被認證后也享用自定義菜單等功能,仍舊是300元/每年

二、專業術語:

1、OpenId:微信服務器并不會告訴公眾號用戶的微信ID,即使是你的關注者也不行,為了解決開發中唯一標識的問題,微信使用了OpenId,所謂的OpenId,就是用戶和微信公眾號之間的一種唯一關系。一個用戶在一個公眾號面前,享用唯一的OpenId,不會和別人重復。換言之,同一個用戶在另一個公眾號面前,是擁有另一個OpenId的。再直白些就是$openId = md5('用戶微信ID+公眾號ID')

2、Access_Token:此項只有認證號的功能才會使用的到,Access_token是一個授權標識,即一個授權驗證碼,一個標識10分鐘內有效,10分鐘的有效期內公眾號的多個關注者可以使用同一個Access_Token。在使用主動給指定用戶發送消息、自定義菜單、用戶管理和用戶組管理等功能的時候,每次操作需要給微信服務器以參數的形式附帶Access_token。

3、Access_Token網頁版:本Access_Token網頁版授權時會使用到,和2中的Access_Toekn是不同的東西,不過使用我們的LaneWeChat微信快速開發框架是不需要了解這些的。Access_Token網頁版是說在用戶打開你的公眾號提供的網頁的時候,你的網頁需要獲取用戶的OpenId、昵稱、頭像等信息的時候授權用的。同時,本Access_Token網頁版有兩種用法,一種是打開網頁后彈出一個授權框,讓用戶點擊是否授權,界面像主流的開放平臺授權界面(比如QQ登陸某網站,支付寶賬號登陸某網站等);另一種是不需要彈出授權框仍舊可以獲取用戶信息,用法可以在實例中看到。

如何安裝:

1、本框架以代碼包的插件形式放在項目的目錄中即可。

2、配置項:打開根目錄下的config.php,修改定義常量WECHAT_APPID,WECHAT_APPSECRET,WECHAT_URL。其中前兩項可以在微信公眾號官網的開發者頁面中找到,而WECHAT_URL是你微信項目的URL,以http://開頭

3、本框架的唯一入口為根目錄下的wechat.php

4、首次使用時,請打開根目錄下的wechat.php,注釋掉21行,并且打開注釋第24行。

5、在微信開發者-填寫服務器配置頁面,填寫URL為http://www.lanecn.com/wechat.php,保證該URL可以通過80端口正常訪問(微信服務器目前只支持80端口),并且將Token填寫為config.php中的WECHAT_TOKEN常量的內容(可以修改)。

6、微信服務器在第4步驗證通過后,反向操作第4步,即注釋掉第24行,打開注釋第21行。至此,安裝配置完成。

初出茅廬:

1、給你的微信公眾號發送一條文本消息,比如hello world或者其他什么的。這個時候你應該會收到一條“收到文本”的服務器反饋的被動響應的消息。

2、這個時候你需要先為自己鼓掌。

流程分析:

1、我們給微信服務器發送了一條“hello world”的文本消息。

2、微信服務器收到我們的消息后,查找該公眾賬號所配置的服務器信息中的URL(如何安裝部分 - 第5步)。

3、微信服務器向第二步獲取的URL發送請求,參數是微信服務器自己拼接過的XML格式。

4、根目錄下的wechat.php,引入了我們的配置文件和所需的類后,進入了類WeChat的方法run()。該類位于core/wechat.lib.php。微信的XML數據此時已經被解析為數組,變量名為$request。

5、然后,我們進入了類WechatRequest的方法switchType(),根據不同的消息類型,給予不同的響應。比如用戶發送文本消息和關注事件,給出的返回應該是不同的。當然,你要給出同樣的提示也不能說是錯的。

6、在第5步中的方法中,是一個switch,根據消息類型(此時是文本類型,微信服務器給我的是text)選擇了一個處理文本消息的方法,類WechatRequest中的方法text()。該方法的功能是發送文本消息,文本內容是“收到文本”。

7、此時,我們return了一個數據返回給了上層調用,層層return,就到了我們根目錄的下的唯一入口文件wechat.php,此時我們返回的數據被echo出來了。

8、微信服務器拿到了輸出的數據,微信服務器進行分析和處理,將文本發送給了用戶的微信客戶端。我們就在手機上看到了微信輸出的“收到文本”。

9、流程結束,這就是發送“hello world”,然后返回給用戶“收到文本”。

牛刀小試:

1、打開core/wechatrequest.php文件,講方法text()中的變量修改為$content = '收到文本消息'.$request['content'];

2、保存并且上傳到你的服務器。

3、在微信中打開你的公眾號,輸入文本消息“hello world”。見證奇跡的時刻到了。這個時候你的手機微信客戶端中現實的是“收到文本消息hello world”。

函數詳解:

一、被動給用戶發送消息。

    1、類簡介:用戶輸入文本、圖片、語音、音樂、視頻等消息,以及關注、取消關注,上報地理位置等事件后,服務器被動給出應答。

    2、使用命名空間:use LaneWeChat\Core\ResponsePassive;

    3、參數:  $fromusername = "誰發給你的?(用戶的openId)"  在變量$request['fromusername']中

             $tousername = "你的公眾號Id";                 在變量$require['tousername']中

             $mediaId = "通過上傳多媒體文件,得到的id。";

    4、發送文本

            ResponsePassive::text($fromusername, $tousername, '文本消息內容');

    5、發送圖片

            ResponsePassive::image($fromusername, $tousername, $mediaId);

    6、發送語音

            ResponsePassive::voice($fromusername, $tousername, $mediaId);

    7、發送視頻

            ResponsePassive::video($fromusername, $tousername, $mediaId, '視頻標題', '視頻描述');

    8、發送音樂

            ResponsePassive::music($fromusername, $tousername, '音樂標題', '音樂描述', '音樂鏈接', '高質量音樂鏈接,WIFI環境優先使用該鏈接播放音樂', '縮略圖的媒體id,通過上傳多媒體文件,得到的id');

    9、發送圖文

        1)創建圖文消息內容

            $tuwenList = array();

            $tuwenList[] = array('title'=>'標題1', 'description'=>'描述1', 'pic_url'=>'圖片URL1', 'url'=>'點擊跳轉URL1');

            $tuwenList[] = array('title'=>'標題2', 'description'=>'描述2', 'pic_url'=>'圖片URL2', 'url'=>'點擊跳轉URL2');

        2)構建圖文消息格式

            $itemList = array();

            foreach($tuwenList as $tuwen){

                $itemList[] = ResponsePassive::newsItem($tuwen['title'], $tuwen['description'], $tuwen['pic_url'], $tuwen['url']);

            }

        3)發送圖文消息

            ResponsePassive::news($fromusername, $tousername, $itemList);




二、AccessToken授權。

    1、類簡介:除了被動相應用戶之外,在主動給用戶發送消息,用戶組管理等高級操作,是需要AccessToken授權的,我們調用一個URL給微信服務器,微信服務器會返回給我們一個散列字符串,在高級操作的時候需要將此串以參數的形式發送。散列字符串10分鐘內有效,過期需要重新獲取,獲取新的后之前的全部失效。

    2、使用命名空間:use LaneWeChat\Core\AccessToken;

    3、參數:無

    4、獲取AccessToken

        AccessToken::getAccessToken(); 該調用會返回微信服務器散列后的AccessToken字符串。

    5、溫馨提示

        如果暫且用不到此功能,請跳過。最后來看這里!

    6、功能補充

        有一個地方需要用戶自行完善,根據介紹我們已經知道了,獲取AccessToken只有10分鐘的有效期,過期需要重新獲取。因此,我們需要存儲這個AccessToken。

        由于大家的存儲方式各不相同,有Mysql的,有Redis的,有MongoDB的,還有Session的。所以這里我講存儲和讀取給留空了。

        流程:AccessToken類,public方法只有一個,就是getAccessToken()。這個方法會調用一個私有方法_checkAccessToken()來檢測AccessToken是否存在并且是否過期,如果不存在或過期,則調用私有方法_getAccessToken()

        完善步驟:

        1)、打開core/accesstoken.lib.php文件。

        2)、私有方法_getAccessToken()的倒數第二行(return是倒數第一行),在這個地方,請講變量$accessTokenJson存儲起來,變量$accessTokenJson是一個字符串。

        3)、私有方法_checkAccessToken()的第一行就是讀取操作(有一行偽代碼$accessToken = YourDatabase::get('access_token');),將剛才第二步的存儲的東西給讀出來,并且賦值給$accessToken。

        4)、在第二步的存儲,第三部的讀取的時候,請不要修改數據,僅僅完善一個讀和存的操作就可以了。




三、主動給用戶發送消息。

    1、類簡介:用戶輸入文本、圖片、語音、音樂、視頻等消息,以及關注、取消關注,上報地理位置等事件后,服務器被動給出應答。

    2、使用命名空間:use LaneWeChat\Core\ResponsePassive;

    3、參數  $tousername = "你的公眾號Id";                 在變量$require['tousername']中

            $mediaId = "通過上傳多媒體文件,得到的id。";

    4、發送文本內容

    ResponseInitiative::text($tousername, '文本消息內容');

    5、發送圖片

    ResponseInitiative::image($tousername, $mediaId);

    6、發送語音

    ResponseInitiative::voice($tousername, $mediaId);

    7、發送視頻

    ResponseInitiative::video($tousername, $mediaId, '視頻描述', '視頻標題');

    8、發送地理位置

    ResponseInitiative::music($tousername, '音樂標題', '音樂描述', '音樂鏈接', '高質量音樂鏈接,WIFI環境優先使用該鏈接播放音樂', '縮略圖的媒體id,通過上傳多媒體文件,得到的id');

    9、發送圖文消息

        1)創建圖文消息內容

            $tuwenList = array();

            $tuwenList[] = array('title'=>'標題1', 'description'=>'描述1', 'pic_url'=>'圖片URL1', 'url'=>'點擊跳轉URL1');

            $tuwenList[] = array('title'=>'標題2', 'description'=>'描述2', 'pic_url'=>'圖片URL2', 'url'=>'點擊跳轉URL2');

        2)構建圖文消息格式

            $itemList = array();

            foreach($tuwenList as $tuwen){

                $itemList[] = ResponseInitiative::newsItem($tuwen['title'], $tuwen['description'], $tuwen['pic_url'], $tuwen['url']);

            }

        3)發送圖文消息

            ResponseInitiative::news($tousername, $itemList);




四、用戶及用戶組管理。

    1、類簡介:獲取粉絲列表,創建\修改用戶組,講用戶添加\移除到用戶組。

    2、使用命名空間:use LaneWeChat\Core\UserManage;

    3、參數  $openId = '用戶和微信公眾號的唯一ID';           在變量$require['openid']中

            $mediaId = "通過上傳多媒體文件,得到的id。";

            $groupId = '分組ID';                         在添加新分組、獲取分組列表的時候可以得到

    4、分組管理 - 創建分組

        UserManage::createGroup('分組名');

    5、分組管理 - //獲取分組列表

        UserManage::getGroupList();

    6、分組管理 - 查詢用戶所在分組

        UserManage::getGroupByOpenId($openId);

    7、分組管理 - 修改分組名

        UserManage::editGroupName($groupId, '新的組名');

    8、分組管理 - 移動用戶分組

        UserManage::editUserGroup($openId, $groupId);

    9、用戶管理 - 獲取用戶基本信息

        UserManage::getUserInfo($openId);

    10、用戶管理 - 獲取關注者列表

        UserManage::getFansList($next_openId='');

    11、用戶管理 - 獲取網絡狀態

        UserManage::getNetworkState();




五、網頁授權。

    1、類簡介:在網頁中獲取來訪用戶的數據。

    2、使用命名空間:use LaneWeChat\Core\WeChatOAuth;

    3、參數  $openId = '用戶和微信公眾號的唯一ID';           在變量$require['openid']中

            $mediaId = "通過上傳多媒體文件,得到的id。";

            $groupId = '分組ID';                         在添加新分組、獲取分組列表的時候可以得到

    4、獲取CODE。

        參數:$scope:snsapi_base不彈出授權頁面,只能獲得OpenId;snsapi_userinfo彈出授權頁面,可以獲得所有信息

        參數:$redirect_uri:將會跳轉到redirect_uri/?code=CODE&state=STATE 通過GET方式獲取code和state。獲取CODE時,發送請求和參數給微信服務器,微信服務器會處理后將跳轉到本參數指定的URL頁面

        WeChatOAuth::getCode($redirect_uri, $state=1, $scope='snsapi_base');

    5、通過code換取網頁授權access_token(access_token網頁版)。首先請注意,這里通過code換取的網頁授權access_token,與基礎支持中的access_token不同。公眾號可通過下述接口來獲取網頁授權access_token。如果網頁授權的作用域為snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。

        參數:$code getCode()獲取的code參數。$code = $_GET['code'];

        WeChatOAuth::getAccessTokenAndOpenId($code);




六、多媒體上傳下載

    1、類簡介:在網頁中獲取來訪用戶的數據。上傳的多媒體文件有格式和大小限制,如下:

        * 圖片(image): 1M,支持JPG格式

        * 語音(voice):2M,播放長度不超過60s,支持AMR\MP3格式

        * 視頻(video):10MB,支持MP4格式

        * 縮略圖(thumb):64KB,支持JPG格式

        * 媒體文件在后臺保存時間為3天,即3天后media_id失效

    2、使用命名空間:use LaneWeChat\Core\Media;

    3、參數  $filename 上傳的文件的絕對路徑

            $type 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)

            $mediaId = "通過上傳多媒體文件,得到的id。";

            $groupId = '分組ID';                         在添加新分組、獲取分組列表的時候可以得到

    4、上傳:上傳后,微信服務器會返回一個mediaId。

        Media::upload($filename, $type);

    5、下載:根據mediaId下載一個多媒體文件。

        Media::download($mediaId);



七、自定義菜單

    1、類簡介:添加自定義菜單。最多可以有三個一級菜單,每個一級菜單最多可以有五個菜單。一級菜單最多4個漢字,二級菜單最多7個漢字。創建自定義菜單后,由于微信客戶端緩存,需要24小時微信客戶端才會展現出來。建議測試時可以嘗試取消關注公眾賬號后再次關注,則可以看到創建后的效果。

        摘自微信官方網站:目前自定義菜單接口可實現兩種類型按鈕,如下:

        click:

            用戶點擊click類型按鈕后,微信服務器會通過消息接口推送消息類型為event的結構給開發者,并且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互;

        view:

            用戶點擊view類型按鈕后,微信客戶端將會打開開發者在按鈕中填寫的url值   (即網頁鏈接),達到打開網頁的目的,建議與網頁授權獲取用戶基本信息接口結合,獲得用戶的登入個人信息。

        總結一下哦,就是微信的菜單分兩種,一種是view型,就是你設置一個網址,點了這個菜單之后就跳到你設置的網址去了。另一種就是click型,你設置一個key,然后用戶點擊的時候會通過本框架唯一入口wechat.php發送一個消息類型為event的請求,在wechatrequest.lib.php文件下的eventClick方法中可以使用。

    2、使用命名空間:use LaneWeChat\Core\Menu;

    3、設置菜單:是所有的菜單數據全部發送一次,可不是每新增一個只發一個菜單。

        Menu::setMenu($menuList);

        $menuLis 是菜單列表,結構如下:

        $menuList = array(

                            array('id'=>'1', 'pid'=>'0', 'name'=>'頂級分類一', 'type'=>'', 'code'=>''),

                            array('id'=>'2', 'pid'=>'1', 'name'=>'分類一子分類一', 'type'=>'2', 'code'=>'lane_wechat_menu_1_1'),

                            array('id'=>'3', 'pid'=>'1', 'name'=>'分類一子分類二', 'type'=>'1', 'code'=>'http://www.lanecn.com'),

                            array('id'=>'4', 'pid'=>'0', 'name'=>'頂級分類二', 'type'=>'1', 'code'=>'http://www.php.net/'),

                            array('id'=>'5', 'pid'=>'0', 'name'=>'頂級分類三', 'type'=>'2', 'code'=>'lane_wechat_menu_3'),

                        );

        'id'是您的系統中對分類的唯一編號;

        'pid'是該分類的上級分類,頂級分類則填寫0;

        'name'是分類名稱;

        'type'是菜單類型,數字1或者2,1是view類型,2是click類型,如果該分類下有子分類請務必留空;

        'code'是view類型的URL或者click類型的自定義key,如果該分類下有子分類請務必留空。

    4、獲取微信菜單:獲取到的是已經設置過的菜單列表,格式為Json,是微信服務器返回的原始數據。

        Menu::getMenu();

    5、刪除微信菜單:將會刪除設置過的所有菜單(一鍵清空)。

        Menu::delMenu();

實例示范:

1、通過網頁授權獲得用戶信息

    場景:用戶點擊了我的自定義菜單,或者我發送的文本消息中包含一個URL,用戶打開了我的微信公眾號的網頁版,我需要獲取用戶的信息。

    代碼:

    <?php
        use LaneWeChat\Core\WeChatOAuth;
        use LaneWeChat\Core\UserManage;

        //第一步,獲取CODE
        WeChatOAuth::getCode('http://www.lanecn.com/index.php', 1, 'snsapi_base');
        //此時頁面跳轉到了http://www.lanecn.com/index.php,code和state在GET參數中。
        $code = $_GET['code'];
        //第二步,獲取access_token網頁版
        $openId = WeChatOAuth::getAccessTokenAndOpenId($code);
        //第三步,獲取用戶信息
        $userInfo = UserManage::getUserInfo($openId['openid']);
    ?>

來自:https://github.com/lixuancn/LaneWeChat

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!