摘要:簡介使用開發(fā)的微信集合框架,能夠輕松的集成到你的中。安裝安裝環(huán)境依賴安裝現(xiàn)在直編譯了和版本,可以點(diǎn)擊下邊的地址下載。
簡介
使用 Zephir 開發(fā)的微信集合框架,能夠輕松的集成到你的 PHP 中。經(jīng)過了簡單的測試。
當(dāng)然還有很多功能沒有完善和實(shí)現(xiàn),以及文檔的欠缺,我會抽取時間一點(diǎn)一點(diǎn)的完善。
安裝 Linux安裝環(huán)境依賴
#Ubuntu sudo apt-get install php5-dev php5-mysql gcc libpcre3-dev #Fedora sudo yum install php-devel php-mysqlnd gcc libtool #RHEL sudo yum install php-devel php-mysql gcc libtool #Suse yast2 -i php5-pear php5-devel php5-mysql gcc
安裝
git clone https://git.coding.net/widuu/wechat.git cd wechat/ext && ./installWindows
現(xiàn)在直編譯了php5.6和php5.5版本,可以點(diǎn)擊下邊的地址下載。
|
登錄 https://coding.net 或 https://github.com
倉庫地址分布:
Coding倉庫:https://coding.net/u/widuu/p/wechat/git
github倉庫:http://github.com/widuu/wechat
創(chuàng)建您的特性分支 (git checkout -b my-new-feature)
提交您的改動 (git commit -am "Added some feature")
將您的改動記錄提交到遠(yuǎn)程 git 倉庫 (git push origin my-new-feature)
然后到 coding 網(wǎng)站的該 git 遠(yuǎn)程倉庫的 my-new-feature 分支下發(fā)起 Pull Request
聯(lián)系方式Email: admin#widuu.com <#換成@>
Blog:http://www.widuu.com
WeiBo:http://weibo.com/widuu
wechat.zep
namespace Wechat; class Wechat extends Wechatabstract{ /** * 發(fā)送者id */ protected _tousername { get,set }; /** * wechat id */ protected _fromusername { get,set }; /** * 事件類型 */ protected _msgtype { get,set }; /** * 事件 */ protected _event { get,set }; /** * 創(chuàng)建時間 */ protected _createtime { get,set }; /** * 文本消息內(nèi)容 */ protected _content { get,set }; /** * 消息id */ protected _msgid { get,set }; /** * 圖片鏈接 */ protected _picurl { get,set }; /** * 媒體id */ protected _mediaid { get,set }; /** * 語音格式 */ protected _format { get,set }; /** * 縮略圖的媒體id */ protected _thumbmediaid { get,set }; /** * 地理位置維度 */ protected _location_x { get,set }; /** * 地理位置經(jīng)度 */ protected _location_y { get,set }; /** * 地圖縮放大小 */ protected _scale { get,set }; /** * 地理位置信息 */ protected _label { get,set }; /** * 消息標(biāo)題 */ protected _title { get,set }; /** * 消息描述 */ protected _description { get,set }; /** * 消息鏈接 */ protected _url { get,set }; /** * TOKEN URL */ const TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?"; /** * User URL */ const USER_URL = "https://api.weixin.qq.com/cgi-bin/user/"; /** * Menu URL */ const MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/"; /** * 接收 POST 信息 * @author widuu*/ public function getRequest(){ if this->isPost() { var key,value; let this->_request_data = this->getInfo(true); if this->_debug { if empty this->_request_data{ this->log("[ERROR".date("Y-m-d H:i:s",time())."] Request Data NULL "); } }; if !empty this->_request_data{ for key,value in this->_request_data { let key = "_".strtolower(key); if isset this->{key} { let this->{key} = value; } } return this->_request_data; } }else{ return false; } } /** * 返回消息方法 * @param string type * @param (array|string) type * @return boolean * @author widuu */ public function response(string! type=null,info){ if empty this->_request_data { return false; } var tpl; let tpl = this->getTpl(type,info); if this->_debug { if empty tpl{ this->log("[ERROR".date("Y-m-d H:i:s",time())."] Get Response XML Type Error "); } }; echo tpl; } /** * 訂閱事件 * @author widuu */ public function subscribe(string! type="text", info){ if empty this->_request_data { return false; } if(this->_event == "subscribe"){ this->response(type,info); return; } } /** * 獲取Token * @param string appid * @param string secret * @return array * @author widuu */ public function getToken(string! appid="",string! secret=""){ if (empty appid || empty secret) { throw new Exception("getToken Method Parameter does not allow nulls",4001); }; var tokenUrl,urlQurey,result; let urlQurey = ["grant_type":"client_credential","appid":appid,"secret":secret]; let tokenUrl = Wechat::TOKEN_URL.http_build_query(urlQurey); let result = this->httpGet(tokenUrl); return json_decode(result,true); } /** * 獲取用戶信息 * @param string type * @param string token * @param string openid * @return array * @author widuu */ public function getUser(string! type=null,string! token="",string openid=""){ if empty token || empty type { throw new Exception("Parameter does not allow nulls",4002); } var url,param,result; switch(type){ case "userinfo" : let param = ["access_token":token,"openid":openid,"lang":"zh_CN"]; let url = Wechat::USER_URL."info?".http_build_query(param); let result = this->httpGet(url); break; case "userlist" : let param = ["access_token":token,"next_openid":openid]; let url = Wechat::USER_URL."get?".http_build_query(param); let result = this->httpGet(url); break; default: return false; } return json_decode(result,true); } /** * 設(shè)置用戶備注 * @param string token * @param string openid * @param string remarke * @return array * @author widuu */ public function setRemark(string! token=null,string! openid=null,string! remarke=null)->boolean{ var remarkUrl,postInfo,result; let remarkUrl = Wechat::USER_URL."info/updateremark?access_token=".token; let postInfo = ["openid":openid,"remark":remarke]; let result = this->httpPost(remarkUrl,postInfo); if !result { return false; } return json_decode(result,true); } /** * 獲取自定義菜單 * @author widuu */ public function Menu(string!type = null,string! token =null,array info = null){ var menu_url,result; switch(type){ case "get": let menu_url = Wechat::MENU_URL."get?access_token=".token; let result = this->httpGet(menu_url); break; case "delete": let menu_url = Wechat::MENU_URL."delete?access_token=".token; let result = this->httpGet(menu_url); break; case "create": if typeof info != "array" || empty info { throw new Exception("create param error",4005); } let menu_url = Wechat::MENU_URL."create?access_token=".token; let result = this->httpPost(menu_url,info); default : return false; } if !empty result{ return json_decode(result,true); }else{ throw new Exception("Response Error",4003); } } /** * 獲取變量的方法 * @param string name * @return boolean | string * @author widuu */ public function _get(string! name){ let name = "_".name; if isset this->{name} { return this->{name}; } return false; } /** * 設(shè)置變量的方法 * @param string name * @param value * @return boolean * @author widuu */ public function _set(string! name,value) ->boolean{ let name = "_".name; if isset this->{name} { let this->{name} = value; return true; } return false; } /** * 設(shè)置變量的方法 * @param string name * @param value * @return boolean * @author widuu */ protected function getTpl(string! type=null,info){ //組織 xml var tpl; let tpl = " "; return tpl; } /** * 判斷請求方法 * @author widuu _fromusername."]]> _tousername."]]> ".time()." "; switch (type){ case "text": let tpl .= " "; break; case "image": let tpl .= " "; break; case "voice": let tpl .= " "; break; case "video": let tpl .= " "; break; case "music": if typeof info != "array"{ return false; } let tpl .= " "; break; case "news" : if typeof info != "array"{ return false; } var num; if isset info["title"] { let num = 1; }else{ let num = count(info); } let tpl .= " ".num." ".this->getNews(info)." "; break; default : return false; } let tpl.= "*/ private function isPost() -> boolean { if strtolower(_SERVER["REQUEST_METHOD"]) == "post" { return true; } return false; } /** * 獲取新聞 * @author widuu */ private function getNews(array! info){ var value,tpl = ""; if isset info["title"] { let tpl.=" - "; }else{ for _,value in info { let tpl.="
- "; } } return tpl; } /** * 微信驗(yàn)證 * @author widuu
*/ static public function valid(string! token = null){ var signature,timestamp,nonce,tmpArr,tmpStr,echoStr; let signature = _GET["signature"]; let timestamp = _GET["timestamp"]; let nonce = _GET["nonce"]; let echoStr = _GET["echostr"]; let tmpArr = [ token, timestamp, nonce ]; sort(tmpArr, SORT_STRING); let tmpStr = implode( "", tmpArr ); let tmpStr = sha1( tmpStr ); if tmpStr == signature { echo echoStr; }else{ return false; } } /** * 設(shè)置URL過期時間 * @author widuu */ public static function setTimeout(int! timeout = 1){ globals_set("curl_timeout", timeout); return true; } /** * HTTP GET 方法 * @param string url * @author widuu */ protected function httpGet(string! url="") { var curlHandle, content,timeout ; let timeout = globals_get("curl_timeout"); let curlHandle = curl_init(); curl_setopt( curlHandle , CURLOPT_URL, url ); curl_setopt( curlHandle , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( curlHandle , CURLOPT_SSL_VERIFYPEER, false); curl_setopt( curlHandle , CURLOPT_SSL_VERIFYHOST, false); curl_setopt( curlHandle , CURLOPT_TIMEOUT, timeout ); let content = curl_exec( curlHandle ); curl_close( curlHandle ); return content; } /** * HTTP POST 方法 * @param string url * @param array info * @author widuu */ protected function httpPost(string! url=null ,array info){ var curlHandle, content,timeout ; if typeof info != "array"{ throw new Exception("infomation must be type array",4004); } let timeout = globals_get("curl_timeout"); let curlHandle = curl_init( url ); curl_setopt(curlHandle, CURLOPT_HEADER, 0); curl_setopt(curlHandle, CURLOPT_RETURNTRANSFER, 1); curl_setopt(curlHandle, CURLOPT_POST, 1); curl_setopt(curlHandle, CURLOPT_POSTFIELDS, json_encode(info,JSON_UNESCAPED_UNICODE)); curl_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, false); curl_setopt(curlHandle, CURLOPT_SSL_VERIFYHOST, false); curl_setopt(curlHandle ,CURLOPT_TIMEOUT, timeout ); let content = curl_exec( curlHandle ); curl_close( curlHandle ); return content; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/20957.html
摘要:四使用語言開發(fā)是我重點(diǎn)推薦的擴(kuò)展開發(fā)框架,簡明易懂,功能強(qiáng)大,開發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點(diǎn)三支持,的擴(kuò)展開發(fā)有兩套擴(kuò)展開發(fā)框架,分別支持,,雖然框架代碼有兩個,但是接口卻是一樣的。 PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。本教程系列...
摘要:簡介通過擴(kuò)展,我們可以在代碼中使用一些特定的方法大部分的擴(kuò)展都是用寫的。這個目錄與我們的擴(kuò)展同名。我們先來在擴(kuò)展中創(chuàng)建一個類,使用此類來渲染。接下來命令行執(zhí)行以下命令來編譯擴(kuò)展第一次運(yùn)行以上命令時,會初始化一些東西。 showImg(https://segmentfault.com/img/remote/1460000018698586); 簡介: 通過 PHP 擴(kuò)展, 我們可以在 p...
摘要:是什么是開源全功能棧使用擴(kuò)展編寫針對高性能優(yōu)化的框架。也是松耦合的,可以根據(jù)項(xiàng)目的需要任意使用其他對象。安裝支持版本的不支持普通方式的編譯安裝,只能通過安裝。因此安裝之前,請先安裝。 Phalcon 是什么? Phalcon 是開源、全功能棧、使用 C 擴(kuò)展編寫、針對高性能優(yōu)化的 PHP 5 框架。 開發(fā)者不需要學(xué)習(xí)和使用 C 語言的功能, 因?yàn)樗械墓δ芏家?PHP 類的方式暴露出來...
摘要:變量作為函數(shù)返回值時,必須聲明為動態(tài)類型。動態(tài)變量與中的變量基本完全相同支持在使用時改變類型。比較運(yùn)算符在運(yùn)算時考慮變量類型,如果是動態(tài)變量與一致。與不一致,語句可以沒有,表示忽略所有異常。 上一篇 《Zephir 簡介》 簡單介紹了環(huán)境搭建,編寫了一個的簡單示例。這一篇繼續(xù)介紹 Zephir 基礎(chǔ)。 基本語法Zephir 中,每個文件都必須有且只有一個類,每個類都必須有一個命名空間,...
摘要:微信支付接口下載官方文檔參考配置公眾號信息我們先進(jìn)行測試,所以先把測試授權(quán)目錄和測試白名單添加上。在申請微信支付后發(fā)來的郵件中可以找到,則根據(jù)郵件提示拜訪官方我們首先需要的是支付。 微信php支付接口demo下載https://pay.weixin.qq.com/wik... 官方文檔參考https://pay.weixin.qq.com/wik... 1. 配置公眾號信息showIm...
閱讀 1432·2021-11-25 09:43
閱讀 2029·2021-07-26 23:38
閱讀 741·2019-08-30 15:53
閱讀 2281·2019-08-30 15:43
閱讀 1169·2019-08-29 18:40
閱讀 1970·2019-08-26 13:28
閱讀 1975·2019-08-23 18:20
閱讀 544·2019-08-23 15:07