php微信公众号开发(3)php实现简单微信文本通讯


Posted in PHP onDecember 15, 2016

微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下

<?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 (!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 = "<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);
 }
 
//根据数组参数回复图文消息
 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>
  <Content><![CDATA[%s]]></Content>
  <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']);
 $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)
 {
 
 echo $data;
 }
 public function valid()
 {
 if ($this->checkSignature()) {
  if( $_SERVER['REQUEST_METHOD']=='GET' )
  {
  echo $_GET['echostr'];
  exit;
  }
 }else{
  
  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;
 }
 }
 
}
?>

接着正式开发,使用百度SVN地址,创建weixinapi.php文件,这个根据你后台设置名称。

<?php
define("TOKEN", "");
define('DEBUG', false);
include_once('weixin.class.php');
require_once("db.php");
  
$weixin = new Weixin(TOKEN,DEBUG);//实例化
$weixin->getMsg();
$type = $weixin->msgtype;//消息类型
$keyword = $weixin->msg['Content'];//获取的文本
if ($type==='text') {
$reply = $weixin->makeText($key);
}elseif($type==='event'){//第一次关注推送事件
 $reply = $weixin->makeText("欢迎关注");
}else{//其他类型
$reply = $weixin->makeText("暂时没有图片,声音,地理位置等功能,后续开发会增加,感谢你关注");
}

$weixin->reply($reply);

这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。

具体实现功能就写在文本回复里面。

其他的功能暂时不做,具体开发下节再说。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
PHP 加密解密内部算法
Apr 22 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
解析php如何将日志写进syslog
Jun 28 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
PHP的PDO操作简单示例
Mar 30 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 #PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 #PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 #PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 #PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 #PHP
PHP接口并发测试的方法(推荐)
Dec 15 #PHP
浅谈PHP的反射机制
Dec 15 #PHP
You might like
PHP 输出简单动态WAP页面
2009/06/09 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
JS实现多选框的操作
2020/06/24 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
如何用python免费看美剧
2020/08/11 Python
详解Python模块化编程与装饰器
2021/01/16 Python
如何用Django处理gzip数据流
2021/01/29 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
酒店副总岗位职责
2013/12/24 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
公开服务承诺制度
2014/03/26 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
学习作风建设心得体会
2014/10/22 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书