本篇内容主要讲解“如何操作Yii Framework框架开发微信公众平台”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何操作Yii Framework框架开发微信公众平台”吧!
1. 先到微信公众平台注册帐号
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 = false;
public $msg = array();
public $setFlag = false;
/**
* __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->setFlag ? 1 : 0;
$textTpl = "<xml>
<ToUserName><![CDATA[{$this->msg->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg->ToUserName}]]></FromUserName>
<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->setFlag ? 1 : 0;
$newTplHeader = "<xml>
<ToUserName><![CDATA[{$this->msg->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg->ToUserName}]]></FromUserName>
<CreateTime>{$createTime}</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount><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($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $this->signature ){
return true;
}else{
return false;
}
}
/**
* 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 (isset($_GET['echostr']))
{
$weixin->valid();
}
$weixin->init();
$reply = '';
$msgType = empty($weixin->msg->MsgType) ? '' : strtolower($weixin->msg->MsgType);
switch ($msgType)
{
case 'text':
//你要处理文本消息代码
break;
case 'image':
//你要处理图文消息代码
break;
case 'location':
//你要处理位置消息代码
break;
case 'link':
//你要处理链接消息代码
break;
case 'event':
//你要处理事件消息代码
break;
default:
//无效消息情况下的处理方式
break;
}
$weixin->reply($reply);
}
至此,基本的逻辑都实现了
到此,相信大家对“如何操作Yii Framework框架开发微信公众平台”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。