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 相关文章推荐
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php实现的通用图片处理类
Mar 24 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php获得当前的脚本网址
2007/12/10 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
php利用header函数下载各种文件
2016/08/24 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
使用Python3制作TCP端口扫描器
2017/04/17 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
当当网软件测试笔试题
2015/11/24 面试题
人事主管的岗位职责
2013/11/16 职场文书
社区党务公开实施方案
2014/03/18 职场文书
网络编辑求职信
2014/04/30 职场文书
社会调查研究计划书
2014/05/01 职场文书
爱护花草树木的标语
2014/06/11 职场文书
园林系毕业生求职信
2014/06/23 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
python如何利用traceback获取详细的异常信息
2021/06/05 Python
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记