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结合飞信 免费天气预报短信
May 07 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
在Laravel5中正确设置文件权限的方法
May 22 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
php日历[测试通过]
2008/03/27 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
Javascript - HTML的request类
2006/07/15 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Python程序退出方式小结
2017/12/09 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
pygame实现打字游戏
2021/02/19 Python
python可迭代对象去重实例
2020/05/15 Python
python 深度学习中的4种激活函数
2020/09/18 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
母婴店促销方案
2014/03/05 职场文书
迎七一演讲稿
2014/09/12 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
个人委托书范文
2015/01/28 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书