国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Zephir 寫 PHP 擴(kuò)展之微信集合框架

gaosboy / 2719人閱讀

摘要:簡介使用開發(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 && ./install
Windows
  

現(xiàn)在直編譯了php5.6和php5.5版本,可以點(diǎn)擊下邊的地址下載。

DLL List
PHP 5.6 5.6 Non Thread Safe (NTS) x86
5.6 Thread Safe (TS) x86
5.6 Non Thread Safe (NTS) x64
5.6 Thread Safe (TS) x64
PHP 5.5 5.5 Non Thread Safe (NTS) x86
5.5 Thread Safe (TS) x86
5.5 Non Thread Safe (NTS) x64
5.5 Thread Safe (TS) x64
Contributing

登錄 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 = "_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 .= "<![CDATA[".info["title"]."]]>";
                        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.= "";
                return tpl;

            }

            /**
             * 判斷請求方法
             * @author widuu 
             */

            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.="<![CDATA[".info["title"]."]]>";
                }else{
                    for _,value in info {
                        let tpl.="<![CDATA[".value["title"]."]]>";
                    }
                }
                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

相關(guān)文章

  • PHP擴(kuò)展開發(fā)教程1 - 相關(guān)開發(fā)技術(shù)對比及介紹

    摘要:四使用語言開發(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)入高級階段。本教程系列...

    alaege 評論0 收藏0
  • 使用 Zephir 輕松構(gòu)建 PHP 擴(kuò)展

    摘要:簡介通過擴(kuò)展,我們可以在代碼中使用一些特定的方法大部分的擴(kuò)展都是用寫的。這個目錄與我們的擴(kuò)展同名。我們先來在擴(kuò)展中創(chuàng)建一個類,使用此類來渲染。接下來命令行執(zhí)行以下命令來編譯擴(kuò)展第一次運(yùn)行以上命令時,會初始化一些東西。 showImg(https://segmentfault.com/img/remote/1460000018698586); 簡介: 通過 PHP 擴(kuò)展, 我們可以在 p...

    gaosboy 評論0 收藏0
  • PHP7 安裝Phalcon框架

    摘要:是什么是開源全功能棧使用擴(kuò)展編寫針對高性能優(yōu)化的框架。也是松耦合的,可以根據(jù)項(xiàng)目的需要任意使用其他對象。安裝支持版本的不支持普通方式的編譯安裝,只能通過安裝。因此安裝之前,請先安裝。 Phalcon 是什么? Phalcon 是開源、全功能棧、使用 C 擴(kuò)展編寫、針對高性能優(yōu)化的 PHP 5 框架。 開發(fā)者不需要學(xué)習(xí)和使用 C 語言的功能, 因?yàn)樗械墓δ芏家?PHP 類的方式暴露出來...

    kidsamong 評論0 收藏0
  • PHP 擴(kuò)展開發(fā)】Zephir 基礎(chǔ)篇

    摘要:變量作為函數(shù)返回值時,必須聲明為動態(tài)類型。動態(tài)變量與中的變量基本完全相同支持在使用時改變類型。比較運(yùn)算符在運(yùn)算時考慮變量類型,如果是動態(tài)變量與一致。與不一致,語句可以沒有,表示忽略所有異常。 上一篇 《Zephir 簡介》 簡單介紹了環(huán)境搭建,編寫了一個的簡單示例。這一篇繼續(xù)介紹 Zephir 基礎(chǔ)。 基本語法Zephir 中,每個文件都必須有且只有一個類,每個類都必須有一個命名空間,...

    wawor4827 評論0 收藏0
  • 微信支付PHP SDK微信公眾號支付代碼詳解

    摘要:微信支付接口下載官方文檔參考配置公眾號信息我們先進(jìn)行測試,所以先把測試授權(quán)目錄和測試白名單添加上。在申請微信支付后發(fā)來的郵件中可以找到,則根據(jù)郵件提示拜訪官方我們首先需要的是支付。 微信php支付接口demo下載https://pay.weixin.qq.com/wik... 官方文檔參考https://pay.weixin.qq.com/wik... 1. 配置公眾號信息showIm...

    jimhs 評論0 收藏0

發(fā)表評論

0條評論

gaosboy

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<