php 公众开发教程,微信公众平台消息接口PHP版开发教程

三、验证接口

用自己的个人微信关注下你的公众账号,给这个账号发一条消息过去,收到原样的消息返回,即验证成功了。

四、开始自定义回复

注释掉$wechatObj->valid(); 这行,同时去掉//$wechatObj->responseMsg();这行的注释。

你可以修改responseMsg函数里面的代码,根据用户的消息类型('text','image','location')和消息内容来回复用户不同的内容。

消息接口就可以使用了,发个消息试试看吧?

封装weixin.class.php

由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理。

我们就考虑在这个基础上做一次封装,weixin.class.php,代码如下:

class Weixin

{

public $token = '';//token

public $debug = false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据

public $setFlag = false;

public $msgtype = 'text'; //('text','image','location')

public $msg = array();

public function __construct($token,$debug)

{

$this->token = $token;

$this->debug = $debug;

}
     //获得用户发过来的消息(消息内容和消息类型 )

public function getMsg()

{

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

if ($this->debug) {

$this->write_log($postStr);

}

if (!empty($postStr)) {

$this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$this->msgtype = strtolower($this->msg['MsgType']);

}

}
     //回复文本消息

public function makeText($text='')

{

$CreateTime = time();

$FuncFlag = $this->setFlag ? 1 : 0;

$textTpl = "

msg['FromUserName']}]]>

msg['ToUserName']}]]>

{$CreateTime}

1

]>

%s

";

return sprintf($textTpl,$text,$FuncFlag);

}
     //根据数组参数回复图文消息

public function makeNews($newsData=array())

{

$CreateTime = time();

$FuncFlag = $this->setFlag ? 1 : 0;

$newTplHeader = "

msg['FromUserName']}]]>

msg['ToUserName']}]]>

{$CreateTime}

%s";

$newTplItem = "

";

$newTplFoot = "

%s

";

$Content = '';

$itemsCount = count($newsData['items']);

$itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多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,$newsData['content'],$itemsCount);

$footer = sprintf($newTplFoot,$FuncFlag);

return $header . $Content . $footer;

}

public function reply($data)

{

if ($this->debug) {

$this->write_log($data);

}

echo $data;

}

public function valid()

{

if ($this->checkSignature()) {

if( $_SERVER['REQUEST_METHOD']=='GET' )

{

echo $_GET['echostr'];

exit;

}

}else{

write_log('认证失败');

exit;

}

}

private function checkSignature()

{

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$tmpArr = array($this->token, $timestamp, $nonce);

sort($tmpArr);

$tmpStr = implode( $tmpArr );

$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){

return true;

}else{

return false;

}

}

private function write_log($log){
       //这里是你记录调试信息的地方 请自行完善 以便中间调试
    }

}

?>

调用weixin.class.php

include_once('weixin.class.php');//引用刚定义的微信消息处理类
define("TOKEN", "mmhelper");
define('DEBUG', true);

$weixin = new Weixin(TOKEN,DEBUG);//实例化

$weixin->getMsg();

$type = $weixin->msgtype;//消息类型

$username = $weixin->msg['FromUserName'];//哪个用户给你发的消息,这个$username是微信加密之后的,但是每个用户都是一一对应的

if ($type==='text') {

if ($weixin->msg['Content']=='Hello2BizUser') {//微信用户第一次关注你的账号的时候,你的公众账号就会受到一条内容为'Hello2BizUser'的消息

$reply = $weixin->makeText('欢迎你关注哦,屌丝');

}else{//这里就是用户输入了文本信息

$keyword = $weixin->msg['Content']; //用户的文本消息内容

include_once("chaxun.php");//文本消息 调用查询程序

$chaxun= new chaxun(DEBUG,$keyword,$username);

$results['items'] =$chaxun->search();//查询的代码

$reply = $weixin->makeNews($results);

}

}elseif ($type==='location') {

//用户发送的是位置信息 稍后的文章中会处理

}elseif ($type==='image') {

//用户发送的是图片 稍后的文章中会处理

}elseif ($type==='voice') {

//用户发送的是声音 稍后的文章中会处理

}

$weixin->reply($reply);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值