php微信公众平台开发类实例


Posted in PHP onApril 01, 2015

本文实例讲述了php微信公众平台开发类。分享给大家供大家参考。具体分析如下:

ThinkWechat.php类文件如下:

<?php
class Wechat {
 /**
 * 微信推送过来的数据或响应数据
 * @var array
 */
 private $data = array();
 /**
 * 构造方法,用于实例化微信SDK
 * @param string $token 微信开放平台设置的TOKEN
 */
 public function __construct($token) {
 $this->auth($token) || exit;
 if(!empty($_GET['echostr'])){
  exit($_GET['echostr']);
 } else {
  try
  {
  $xml = file_get_contents("php://input");
  $xml = new SimpleXMLElement($xml);
  $xml || exit;
  foreach ($xml as $key => $value) {
   $this->data[$key] = strval($value);
  }
  }catch(Exception $e){
  }
 }
 }
 /**
 * 获取微信推送的数据
 * @return array 转换为数组后的数据
 */
 public function request(){
 return $this->data;
 }
 /**
 * * 响应微信发送的信息(自动回复)
 * @param string $to 接收用户名
 * @param string $from 发送者用户名
 * @param array $content 回复信息,文本信息为string类型
 * @param string $type 消息类型
 * @param string $flag 是否新标刚接受到的信息
 * @return string  XML字符串
 */
 public function response($content, $type = 'text', $flag = 0){
 /* 基础数据 */
 $this->data = array(
  'ToUserName' => $this->data['FromUserName'],
  'FromUserName' => $this->data['ToUserName'],
  'CreateTime' => time(),
  'MsgType' => $type,
 );
 /* 添加类型数据 */
 $this->$type($content);
 /* 添加状态 */
 $this->data['FuncFlag'] = $flag;
 /* 转换数据为XML */
 $xml = new SimpleXMLElement('<xml></xml>');
 $this->data2xml($xml, $this->data);
 exit($xml->asXML());
 }
 /**
 * 回复文本信息
 * @param string $content 要回复的信息
 */
 private function text($content){
 $this->data['Content'] = $content;
 }
 /**
 * 回复音乐信息
 * @param string $content 要回复的音乐
 */
 private function music($music){
 list(
  $music['Title'], 
  $music['Description'], 
  $music['MusicUrl'], 
  $music['HQMusicUrl']
 ) = $music;
 $this->data['Music'] = $music;
 }
 /**
 * 回复图文信息
 * @param string $news 要回复的图文内容
 */
 private function news($news){
 $articles = array();
 foreach ($news as $key => $value) {
  list(
  $articles[$key]['Title'],
  $articles[$key]['Description'],
  $articles[$key]['PicUrl'],
  $articles[$key]['Url']
  ) = $value;
  if($key >= 9) { break; } //最多只允许10调新闻
 }
 $this->data['ArticleCount'] = count($articles);
 $this->data['Articles'] = $articles;
 }
 /**
 * 数据XML编码
 * @param object $xml XML对象
 * @param mixed $data 数据
 * @param string $item 数字索引时的节点名称
 * @return string
 */
 private function data2xml($xml, $data, $item = 'item') {
 foreach ($data as $key => $value) {
  /* 指定默认的数字key */
  is_numeric($key) && $key = $item;
  /* 添加子元素 */
  if(is_array($value) || is_object($value)){
  $child = $xml->addChild($key);
  $this->data2xml($child, $value, $item);
  } else {
  if(is_numeric($value)){
   $child = $xml->addChild($key, $value);
  } else {
   $child = $xml->addChild($key);
   $node = dom_import_simplexml($child);
   $node->appendChild($node->ownerDocument->createCDATASection($value));
  }
  }
 }
 }
 /**
 * 对数据进行签名认证,确保是微信发送的数据
 * @param string $token 微信开放平台设置的TOKEN
 * @return boolean true-签名正确,false-签名错误
 */
 private function auth($token){
 if(empty($_GET['signature'])) return;
 /* 获取数据 */
 $data = array($_GET['timestamp'], $_GET['nonce'], $token);
 $sign = $_GET['signature'];
 /* 对数据进行字典排序 */
 sort($data,SORT_STRING);
 /* 生成签名 */
 $signature = sha1(implode($data));
 return $signature === $sign;
 }
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
IIS6的PHP最佳配置方法
Mar 19 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
php模拟post上传图片实现代码
Jun 24 PHP
PHP加密技术的简单实现
Sep 04 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 #PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 #PHP
php快速查找数据库中恶意代码的方法
Apr 01 #PHP
php将12小时制转换成24小时制的方法
Mar 31 #PHP
php给一组指定关键词添加span标签的方法
Mar 31 #PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 #PHP
php输出全球各个时区列表的方法
Mar 31 #PHP
You might like
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
js简单抽奖代码
2015/01/16 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Python3内置模块random随机方法小结
2019/07/13 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
社区中秋节活动方案
2014/01/29 职场文书
新书吧创业计划书
2014/01/31 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
综合管理员岗位职责
2015/02/11 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers