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 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
php数值计算num类简单操作示例
May 15 PHP
PHP中->和=>的意思
Mar 31 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php模板引擎技术简单实现
2016/03/15 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
利用javascript查看html源文件
2006/11/08 Javascript
求得div 下 img的src地址的js代码
2007/02/28 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
python实现telnet客户端的方法
2015/04/15 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python 同时读取多个文件的例子
2019/07/16 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
css3实现动画的三种方式
2020/08/24 HTML / CSS
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
职业生涯规划书范文
2014/03/10 职场文书
学前班评语大全
2014/05/04 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
三八妇女节致辞
2015/07/31 职场文书