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 相关文章推荐
php获得当前的脚本网址
Dec 10 PHP
Phpbean路由转发的php代码
Jan 10 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php简单实现快速排序的方法
Apr 04 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
动态控制Table的js代码
2007/03/07 Javascript
JavaScript OOP类与继承
2009/11/15 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python聊天室实例程序分享
2016/01/05 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
python字符串格式化方式解析
2019/10/19 Python
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
物流合作计划书
2014/01/10 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
闭幕式主持词
2014/04/02 职场文书
志愿者个人总结
2015/03/03 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
法定代表人免职证明
2015/06/24 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript