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编程之高级技巧——利用Mysql函数
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
实例分析10个PHP常见安全问题
Jul 09 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
python实现多层感知器
2019/01/18 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
业务部主管岗位职责
2014/01/29 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
红色旅游心得体会
2014/09/03 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
Mysql中mvcc各场景理解应用
2022/08/05 MySQL