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 相关文章推荐
apache mysql php 源码编译使用方法
May 03 PHP
php 获取本地IP代码
Jun 23 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
php中rename函数用法分析
Nov 15 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
ThinkPHP实现分页功能
Apr 28 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
通过实例解析PHP数据类型转换方法
Jul 11 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
详解Django中的权限和组以及消息
2015/07/23 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Python使用OpenCV进行标定
2018/05/08 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Apache部署Django项目图文详解
2019/07/30 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
大学生饮食配送创业计划书
2014/01/04 职场文书
大学生毕业鉴定
2014/01/31 职场文书
市场营销调查计划书
2014/05/02 职场文书
书香校园建设方案
2014/05/02 职场文书
旷课检讨书500字
2014/10/14 职场文书
抗洪救灾感谢信
2015/01/22 职场文书