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 相关文章推荐
php中计算时间差的几种方法
Dec 31 PHP
解析PHP缓存函数的使用说明
May 10 PHP
深入PHP与浏览器缓存的分析
Jun 03 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
php获取错误信息的方法
Jul 17 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 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可变函数学习小结
2015/11/29 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
python简单商城购物车实例代码
2018/03/15 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python实现密码薄文件读写操作
2019/12/16 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
旅游市场营销方案
2014/03/09 职场文书
设备收款委托书范本
2014/10/02 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
英语辞职信怎么写
2015/02/28 职场文书
民事答辩状范本
2015/05/21 职场文书
深入理解python多线程编程
2021/04/18 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript