本文实例讲述了yii framework框架开发微信公众平台。分享给大家供大家参考,具体如下:
1. 先到微信公众平台注册帐号
http://mp.weixin.q南昌大学录取分数线q.com
2. 下载demo
微信公众平台提供了一个十分“朴素”的demo,说明如何调用消息接口的。代码真的很朴素,具体内容可到官网下载。
3. 按照yii的规则,做一个extension。
这里命名为 weixin,目录结构如下:
▾ extensions/
▾ weixin/
weixin.php*
weixin.php代码内容:
<?php /** * weixincallback * * @package * @version $id$ 团队协作游戏* @copyright 1997-2005 the php group * @author davidhhuan@126.com * {@link <a href="http://www.sharefamily.net" rel="external nofollow" target="_blank">http://www.sharefamily.net</a>} */class weixin{ //$_get参数 public $signature; public $timestamp; public $nonce; public $echostr; // public $token; public $debug = fal; public $msg = array(); public $tflag = fal; /** * __construct * * @param mixed $params * @access public * @return void */ public function __construct($params) { foreach ($params as $k1 => $v1) { if (property_exists($this, $k1)) { $this->$k1 = $v1; } } } /** * valid * * @access public * @return void */ public function valid() { //valid signature , option if($this->checksignature()){ echo $this->echostr; yii::app()->end(); } } /** * 获得用户发过来的消息(消息内容和消息类型 ) * * @access public * @return void */ public function init() { $poststr = empty($globals["http_raw_post_data"]) ? '' : $globals["http_raw_post_data"]; if ($this->debug) { $this->log($poststr); } if (!empty($poststr)) { $this->msg = simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata); } } /** * makeevent * * @access public * @return void */ public function makeevent() { } /** * 回复文本消息 * * @param string $text * @access public * @return void */ public function maketext($text='') { $createtime = time(); $funcflag = $this->tflag ? 1 : 0; $texttpl = "<xml> <tourname><![cdata[{$this->msg->fromurname}]]></tourname> <fromurname><![cdata[{$this->msg->tourname}]]></fromurname> <createtime>{$createtime}</createtime> <msgtype><![cdata[text]]></msgtype> <content><![cdata[%s]]></content> <funcflag>%s</funcflag> </xml>"; return sprintf($texttpl,$text,$funcflag); } /** * 根据数组参数回复图文消息 * * @param array $newsdata * @access public * @return void */ public function makenews($newsdata=array()) { $createtime = time(); $funcflag = $this->tflag ? 1 : 0; $newtplheader = "<xml> <tourname><![cdata[{$this->msg->fromurname}]]></tourname> <fromurname><![cdata[{$this->msg->tourname}]]></fromurname> <createtime>{$createtime}</createtime> <msgtype><![cdata[news]]></msgtype> <articlecount>%s</articlecoun赋的特点t><articles>"; $newtplitem = "<item> <title><![cdata[%s]]></title> <description><![cdata[%s]]></description> <picurl><![cdata[%s]]></picurl> <url><![cdata[%s]]></url> </item>"; $newtplfoot = "</articles> <funcflag>%s</funcflag> </xml>"; $content = ''; $itemscount = count($newsdata['items']); //微信公众平台图文回复的消息一次最多10条 $itemscount = $itemscount < 10 ? $itemscount : 10; if ($itemscount) { foreach ($newsdata['items'] as $key => $item) { if ($key<=9) { $content .= sprintf($newtplitem,$item['title'],$item['description'],$item['picurl'],$item['url']); } } } $header = sprintf($newtplheader,$itemscount); $footer = sprintf($newtplfoot,$funcflag); return $header . $content . $footer; } /** * reply * * @param mixed $data * @access public * @return void */ public function reply($data) { if ($this->debug) { $this->log($data); } echo $data; } /** * checksignature * * @access private * @return void */ private function checksignature() { $tmparr = array($this->token, $this->timestamp, $this->nonce); sort($t红色观影mparr); $tmpstr = implode( $tmparr ); $tmpstr = sha1( $tmpstr ); if( $tmpstr == $this->signature ){ return true; }el{ return fal; } } /** * log * * @access private * @return void */ private function log($log) { if ($this->debug) { file_put_contents(yii::getpathofalias('application').'/runtime/weixin_log.txt', var_export($log, true)."\n\r", file_append); } }}
使用方法,这里举例在sitecontroller里面
/** * actionindex * * @access public * @return void */ public function actionindex() { $weixin = new weixin($_get); $weixin->token = $this->_weixintoken; //$weixin->debug = true; //网址接入时使用 if (ist($_get['echostr'])) { $weixin->valid(); } $weixin->init(); $reply = ''; $msgtype = empty($weixin->msg->msgtype) ? '' : strtolower($weixin->msg->msgtype); switch ($msgtype) { ca 'text': //你要处理文本消息代码 break; ca 'image': //你要处理图文消息代码 break; ca 'location': //你要处理位置消息代码 break; ca 'link': //你要处理链接消息代码 break; ca 'event': //你要处理事件消息代码 临床医学是干什么的 break; default: //无效消息情况下的处理方式 break; } $weixin->reply($reply); }
至此,基本的逻辑都实现了
本文发布于:2023-04-08 16:30:40,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/bca84ae56fba5a140c1b0af8c9078087.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Yii Framework框架开发微信公众平台示例.doc
本文 PDF 下载地址:Yii Framework框架开发微信公众平台示例.pdf
留言与评论(共有 0 条评论) |