摘要:简介使用开发的微信集合框架,能够轻松的集成到你的中。安装安装环境依赖安装现在直编译了和版本,可以点击下边的地址下载。
简介
使用 Zephir 开发的微信集合框架,能够轻松的集成到你的 PHP 中。经过了简单的测试。
当然还有很多功能没有完善和实现,以及文档的欠缺,我会抽取时间一点一点的完善。
安装 Linux安装环境依赖
#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
现在直编译了php5.6和php5.5版本,可以点击下边的地址下载。
|
登录 https://coding.net 或 https://github.com
仓库地址分布:
Coding仓库:https://coding.net/u/widuu/p/wechat/git
github仓库:http://github.com/widuu/wechat
创建您的特性分支 (git checkout -b my-new-feature)
提交您的改动 (git commit -am "Added some feature")
将您的改动记录提交到远程 git 仓库 (git push origin my-new-feature)
然后到 coding 网站的该 git 远程仓库的 my-new-feature 分支下发起 Pull Request
联系方式Email: admin#widuu.com <#换成@>
Blog:http://www.widuu.com
WeiBo:http://weibo.com/widuu
wechat.zep
namespace Wechat; class Wechat extends Wechatabstract{ /** * 发送者id */ protected _tousername { get,set }; /** * wechat id */ protected _fromusername { get,set }; /** * 事件类型 */ protected _msgtype { get,set }; /** * 事件 */ protected _event { get,set }; /** * 创建时间 */ protected _createtime { get,set }; /** * 文本消息内容 */ 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 }; /** * 地理位置经度 */ protected _location_y { get,set }; /** * 地图缩放大小 */ protected _scale { get,set }; /** * 地理位置信息 */ protected _label { get,set }; /** * 消息标题 */ 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); } /** * 设置用户备注 * @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; } /** * 设置变量的方法 * @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; } /** * 设置变量的方法 * @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; } /** * 微信验证 * @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; } } /** * 设置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; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/20957.html
摘要:四使用语言开发是我重点推荐的扩展开发框架,简明易懂,功能强大,开发效率高,代码易维护,执行速度快。优点三支持,的扩展开发有两套扩展开发框架,分别支持,,虽然框架代码有两个,但是接口却是一样的。 PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列...
摘要:简介通过扩展,我们可以在代码中使用一些特定的方法大部分的扩展都是用写的。这个目录与我们的扩展同名。我们先来在扩展中创建一个类,使用此类来渲染。接下来命令行执行以下命令来编译扩展第一次运行以上命令时,会初始化一些东西。 showImg(https://segmentfault.com/img/remote/1460000018698586); 简介: 通过 PHP 扩展, 我们可以在 p...
摘要:是什么是开源全功能栈使用扩展编写针对高性能优化的框架。也是松耦合的,可以根据项目的需要任意使用其他对象。安装支持版本的不支持普通方式的编译安装,只能通过安装。因此安装之前,请先安装。 Phalcon 是什么? Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来...
摘要:变量作为函数返回值时,必须声明为动态类型。动态变量与中的变量基本完全相同支持在使用时改变类型。比较运算符在运算时考虑变量类型,如果是动态变量与一致。与不一致,语句可以没有,表示忽略所有异常。 上一篇 《Zephir 简介》 简单介绍了环境搭建,编写了一个的简单示例。这一篇继续介绍 Zephir 基础。 基本语法Zephir 中,每个文件都必须有且只有一个类,每个类都必须有一个命名空间,...
摘要:微信支付接口下载官方文档参考配置公众号信息我们先进行测试,所以先把测试授权目录和测试白名单添加上。在申请微信支付后发来的邮件中可以找到,则根据邮件提示拜访官方我们首先需要的是支付。 微信php支付接口demo下载https://pay.weixin.qq.com/wik... 官方文档参考https://pay.weixin.qq.com/wik... 1. 配置公众号信息showIm...
阅读 1432·2021-11-25 09:43
阅读 2028·2021-07-26 23:38
阅读 739·2019-08-30 15:53
阅读 2279·2019-08-30 15:43
阅读 1167·2019-08-29 18:40
阅读 1969·2019-08-26 13:28
阅读 1973·2019-08-23 18:20
阅读 541·2019-08-23 15:07