现在微信公众号很火,基本是个网站都会再运营一个公众号,因此我们用DEDECMS建站也需要与时俱进对接进入公众号功能,在公众号发布文章,提高用户粘度

  1. 把以下代码保存为winxin.php放到dede程序的plus目录下.

代码如下

<?php

define("TOKEN", "weixin");
require_once(dirname(__FILE__)."/..//common.inc.php");  
$dsql = new DedeSql(false);
$wechatObj = new wechatCallback();
$wechatObj->valid();

class wechatCallback
{
private $items = '';
private $articleCount = 0;
private $key = '';

public function valid()
{
$echoStr = $_GET["echostr"];

//valid signature , option
if($this->checkSignature()){
echo $echoStr;
$this->responseMsg();

exit;
}
}

public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

//extract post data
if (!empty($postStr)){

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$this->keyword = strtolower(trim(("UTF-8","gb2312",$postObj->Content)));

$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";    
$picTpl = "<xml>
<ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
<FromUserName><![CDATA[".$toUsername."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%d</ArticleCount>
<Articles>
%s
</Articles>
<FuncFlag>1</FuncFlag>
</xml>";
if($this->keyword == 'hi' || $this->keyword == '您好'  || $this->keyword == '你好' ||$this->keyword == 'hello2bizuser' ){
$contentStr = "输入关键字开始搜索!";//自定义欢迎回复;
echo sprintf($textTpl, $contentStr);
}else if( !empty( $this->keyword )){
$this->search();
if($this->articleCount == 0){
$contentStr = "抱歉,没有找到与【{$this->keyword}】相关的文章,要不你更换一下关键字,可能就有结果了哦 :-) ";
echo sprintf($textTpl, $contentStr);
}else{
echo sprintf($picTpl,$this->articleCount,$this->items);
}
}

}else {
echo "";
exit;
}
}

private function search(){
global $dsql;
$weixin_posts = $dsql->SetQuery("Select * From `dede_archives` where title like '%".$this->keyword."%' order by id desc LIMIT 0, 5");
$items = '';
$dsql->Execute();

while($weixin_post=$dsql->GetObject()){       
$title =$weixin_post->title;
$excerpt = $weixin_post->description ;//获取摘要
$thumb = $weixin_post->litpic ;//获取;
$link = '/plus/view.php?aid='.$weixin_post->id;
$items = $items . $this->get_item($title, $excerpt, $thumb, $link);  
$this->articleCount++;    
}
if($this->articleCount > 5) $this->articleCount = 5;

$this->items = $items;
}

private function get_item($title, $description, $picUrl, $url){
if(!$description) $description = $title;

return
'
<item>
<Title><![CDATA['.$title.']]></Title>
<Discription><![CDATA['.$description.']]></Discription>
<PicUrl><![CDATA[http://'.$_SERVER['HTTP_HOST'].$picUrl.']]></PicUrl>
<Url><![CDATA[http://'.$_SERVER['HTTP_HOST'].$url.']]></Url>
</item>
';
}

private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];   

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。