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 相关文章推荐
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php不用正则验证真假身份证
Nov 06 PHP
php防止用户重复提交表单
Nov 02 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php自动加载方式集合
2016/04/04 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
js 页面输出值
2008/11/30 Javascript
js tab效果的实现代码
2009/12/26 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
详解python解压压缩包的五种方法
2019/07/05 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
单身联谊活动方案
2014/01/29 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
服装店营销方案
2014/03/10 职场文书
预备党员公开承诺书
2014/05/28 职场文书
军训拉歌口号
2014/06/13 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB
使用Redis实现分布式锁的方法
2022/06/16 Redis