织梦dedecms集成微信公众平台功能(成功版最新版)

网站建设 admin 5个月前 (01-03) 91次浏览 已收录 0个评论

前段时间弄 dedecms,微信公众号那么火,就想集成下,百度搜了下教程很多,大体都差不多,结果用了后不行,在公众号里回复关键词后,乱码,乱码,乱码,更有的教程代码贴上之后直接不回复,无论你怎么发就是不回复你,很是蛋疼,下面中狐博主把 18 年测试成功的代码贴上来,至于怎么注册微信公众号等就不发了,不会的自行百度。将代码保存为 weixin.php 放 plus 下就好

<?php define("TOKEN", "你的token名字"); require_once(dirname(__FILE__)."/../include/common.inc.php"); $dsql = new DedeSql(false); $wechatObj = new wechatCallback(); $wechatObj->valid();

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

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 = trim($postObj->Content);

$time = time();
$textTpl = "
<![CDATA[".$fromUsername."]]>
<![CDATA[".$toUsername."]]>
".$time."
<![CDATA[text]]>
<![CDATA[%s]]>
0
";
$picTpl = "
<![CDATA[".$fromUsername."]]>
<![CDATA[".$toUsername."]]>
".$time."
<![CDATA[news]]>

%d

%s

1
";
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 `#@__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 = '/m/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
'

<![CDATA['.$description.']]>
<![CDATA[http://'.$_SERVER['HTTP_HOST'].$picUrl.']]>
<![CDATA[http://'.$_SERVER['HTTP_HOST'].$url.']]>

';
}

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

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

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
重要第一点
$this->keyword = trim($postObj->Content);这段代码解决的乱码问题。我的是 utf-8 版本的。
重要第二点
sort($tmpArr, SORT_STRING);
这段代码是解决的有时收到信息有时收不到信息,这个在 14 年的时候微信升级,对排序算法进行了修改,原有的 sort($tmpArr)修改为 sort($tmpArr, SORT_STRING),网上教程都说 14 年之前没升级的教程,所以很多朋友用了后有时收到信息有时收不到信息。
重要第三点
$link = ‘/m/view.php?aid=’.$weixin_post->id;
如果在微信里打开,肯定打开的是手机版,所以如果你的手机版是在更目录下的 m 文件夹就要如上填写,这个跳转到手机版根据不同的情况修改。

华仔博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:织梦dedecms集成微信公众平台功能(成功版最新版)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址