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学习之PHP表达式
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
yii通过小物件生成view的方法
Oct 08 PHP
php中序列化与反序列化详解
Feb 13 PHP
laravel开发环境homestead搭建过程详解
Jul 03 PHP
PHP策略模式写法
Apr 01 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中数值计算的注意事项
2016/08/14 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
javascript 写类方式之四
2009/07/05 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
python读取浮点数和读取文本文件示例
2014/05/06 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
竞选村长演讲稿
2014/04/28 职场文书
企业安全生产承诺书
2014/05/22 职场文书
会计求职信怎么写
2015/03/20 职场文书
全民创业工作总结
2015/08/13 职场文书
Golang的继承模拟实例
2021/06/30 Golang
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技