#CI框架控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/***
CI框架整合微信
2014.9.15
作者:黄国金
**/
define('TOKEN', 'hgj123');
class Weixin extends CI_Controller
{ #构造函数
function __construct()
{
#调用父类的构造函数
parent::__construct();
#以get的形式获取参数
parse_str($_SERVER['QUERY_STRING'], $_GET);
} #在微信平台上设置的对外 URL
public function message()
{
#判断是否接入微信的验证
if ($this->_valid())
{
#判判断是不是验证过
$echostr = $this->input->get('echostr');
if (!empty($echostr))
{ #未验证
$this->load->view('valid_view', array('output' => $echostr));
}
else
{
# 处理用户消息
$this->_responseMsg();
}
}
else#验证失败
{
$this->load->view('valid_view', array('output' => 'Error!'));
}
}
#用于接入微信的验证
private function _valid()
{ #获取token
$token = TOKEN;
$signature = $this->input->get('signature');
$timestamp = $this->input->get('timestamp');
$nonce = $this->input->get('nonce');
$tmp_arr = array($token, $timestamp, $nonce);
sort($tmp_arr);
$tmp_str = implode($tmp_arr);
$tmp_str = sha1($tmp_str);
return ($tmp_str == $signature);
} #处理用户发送过来的消息
private function _responseMsg()
{
#获取获取表单提交过来的数据
$post_str = file_get_contents('php://input');
#判断是否为空
if (!empty($post_str))
{
#解析微信传过来的 XML 内容
$post_obj = simplexml_load_string($post_str, 'SimpleXMLElement', LIBXML_NOCDATA);
$from_username = $post_obj->FromUserName;
$to_username = $post_obj->ToUserName;
#接受用户输入的内容
$keyword = trim($post_obj->Content);
#如果内容不为空
if (!empty($keyword))
{
#文本类型的消息,本示例只支持文本类型的消息
$type = "text";
$content = $this->_parseMessage($keyword);
#数据数组
$data = array(
'to' => $from_username,
'from' => $to_username,
'type' => $type,
'content' => $content,
);
#分配数据
$this->load->view('response_view', $data);
}
else
{#如果为空
$type = "text";
$content = "请输入文字";
#数据数组
$data = array(
'to' => $from_username,
'from' => $to_username,
'type' => $type,
'content' => $content,
);
#分配数据
$this->load->view('response_view', $data);
}
}
else
{ #错误
$this->load->view('valid_view', array('output' => 'Error!'));
}
} #解析用户输入的字符串
private function _parseMessage($keyword)
{
#开启错误日记
log_message('debug', $keyword);
#处理用户的关键字
return '你好~!~';
}
}
#输出界面  view试图
<xml>
<ToUserName><![CDATA[<?=$to?>]]></ToUserName>
<FromUserName><![CDATA[<?=$from?>]]></FromUserName>
<CreateTime><?=time()?></CreateTime>
<MsgType><![CDATA[<?=$type?>]]></MsgType>
<Content><![CDATA[<?=$content?>]]></Content>
<FuncFlag>0</FuncFlag>
</xml>

CI框架整合微信公共平台接口的更多相关文章

  1. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示

    1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为企业解决那些问题呢? 我们经常看到微信公众号定制开发.微信公众平台定制开发,都不知道这些能给 ...

  2. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制

    2013年10月06日最新整理. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制 微信公共平台消息主动推送接口一直是腾讯的私用接口,相信很多朋友都非常想要用到这个功能. 通过学习 ...

  3. CI框架整合UEditor编辑器上传功能

    最近项目中要使用到富文本编辑器,选用了功能强大的UEditor,接下来就来讲讲UEditor编辑器的上传功能整合. 本文UEditor版本:ueditor1_4_3_utf8_php版本 第一步:部署 ...

  4. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  5. ASP.NET MVC 微信公共平台开发之获取用户消息并处理

    ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...

  6. ASP.NET MVC 微信公共平台开发之验证消息的真实性

    ASP.NET MVC 微信公共平台开发 验证消息的真实性 在MVC Controller所在项目中添加过滤器,在过滤器中重写 public override void OnActionExecuti ...

  7. ASP.NET MVC 微信公共平台开发之 微信接入

    ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注 ...

  8. 微信公众平台接口API

    <?php /** * Author: helen * CreateTime: 2015/12/9 20:14 * description: 微信公众平台接口API */ class Wecha ...

  9. Ci框架整合smarty模板引擎

    Ci框架整合smarty模板引擎 备注:下载smarty时,最好选择2.6版本,其他测试有坑,ci可以是2.2或其他 大体思路:将smarty封装成ci框架的一个类,然后重新配置一下smarty,这样 ...

随机推荐

  1. PHP Warning exec() has been disabled for security reasons怎么办

    如果是PHPNOW,还是找到php-apache2handler.ini这个文件,把禁用的函数去掉即可. 注意是这个文件夹

  2. .NET Framwork 之 源代码编译成托管代码托管代码合并成程序集

    我们都知道,C#程序需要在 .NET Framework 的环境中运行. 一.程序运行所需的三个关键 1.IL(中间语言):编译器编译源代码时生成的代码. 2. Framework类库(Framewo ...

  3. ffmpeg与TS

    http://blog.csdn.net/shuyong1999/article/details/7176329 一个不错的音视频博客 0. 简介 FFmpeg是一个集录制.转换.音/视频编码解码功能 ...

  4. xcode 修改 organization name 和 company identifier

    一:修改 organization name  在终端下 defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGA ...

  5. qs.stringify() 和JSON.stringify()的区别

    var a = {name:'hehe',age:10}; qs.stringify(a) // 'name=hehe&age=10' JSON.stringify(a) // '{" ...

  6. vue - check-versions.js for child_process

    webpack之类的配置文件. webpack.base.conf.js

  7. 学会使用简单的MySQL操作

    第十八章 学会使用简单的MySQL操作 在前面两个章节中已经介绍过MySQL的安装了.可是光会安装还不够.还须要会一些主要的相关操作.当然了,关于MySQL的内容也是非常多的.仅仅只是对于linux系 ...

  8. Fragment的陷阱

    以前做过的一个项目,Fragment嵌套高德地图,当再次进入Fragment的时候,会出现奇怪的现象.嵌套的地图会出现滑动不动的情况,起先还以为是高德的bug呢,经过一番研究,终确定这是一个坑. 先对 ...

  9. monogdb windows环境下 安装及使用简单示例

    1,下载地址:http://www.mongodb.org/downloads,选择windows平台,当前最新的版本是:2.6.4,本机是64位win7系统,我选择的是windows 64位msi, ...

  10. mysqli常用方法

    //返回前一次 MySQL 操作(SELECT.INSERT.UPDATE.REPLACE.DELETE)所影响的记录行数. //一个 > 0 的整数表示所影响的记录行数.0 表示没有受影响的记 ...