LaneWeChat 1.2.2 發布,微信快速開發插件
開源微信公眾號快速開發插件 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!