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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php错误、异常处理机制(补充)
May 07 PHP
memcache命令启动参数中文解释
Jan 13 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
php实现购物车功能(上)
Jul 23 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 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
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
jquery处理json对象
2014/11/03 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
最小二乘法及其python实现详解
2020/02/24 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
部队万能检讨书
2014/02/20 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
承诺函范文
2015/01/21 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android