CI框架整合微信公共平台接口
#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框架整合微信公共平台接口的更多相关文章
- 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示
1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为企业解决那些问题呢? 我们经常看到微信公众号定制开发.微信公众平台定制开发,都不知道这些能给 ...
- PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制
2013年10月06日最新整理. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制 微信公共平台消息主动推送接口一直是腾讯的私用接口,相信很多朋友都非常想要用到这个功能. 通过学习 ...
- CI框架整合UEditor编辑器上传功能
最近项目中要使用到富文本编辑器,选用了功能强大的UEditor,接下来就来讲讲UEditor编辑器的上传功能整合. 本文UEditor版本:ueditor1_4_3_utf8_php版本 第一步:部署 ...
- Java微信公众平台接口封装源码分享
前言: 这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...
- ASP.NET MVC 微信公共平台开发之获取用户消息并处理
ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...
- ASP.NET MVC 微信公共平台开发之验证消息的真实性
ASP.NET MVC 微信公共平台开发 验证消息的真实性 在MVC Controller所在项目中添加过滤器,在过滤器中重写 public override void OnActionExecuti ...
- ASP.NET MVC 微信公共平台开发之 微信接入
ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注 ...
- 微信公众平台接口API
<?php /** * Author: helen * CreateTime: 2015/12/9 20:14 * description: 微信公众平台接口API */ class Wecha ...
- Ci框架整合smarty模板引擎
Ci框架整合smarty模板引擎 备注:下载smarty时,最好选择2.6版本,其他测试有坑,ci可以是2.2或其他 大体思路:将smarty封装成ci框架的一个类,然后重新配置一下smarty,这样 ...
随机推荐
- Android adb shell学习心得(四)
1.awk中的sub sub为替换函数.形式如 sub(/1/,"",$2) 将第二个变量的第一个1替换为空,若将sub替换为gsub.则替换全部的1. 2.awk中的-F 分隔符 ...
- 在Lucene或Solr中实现高亮的策略
一:功能背景 近期要做个高亮的搜索需求,曾经也搞过.所以没啥难度.仅仅只是原来用的是Lucene,如今要换成Solr而已,在Lucene4.x的时候,散仙在曾经的文章中也分析过怎样在搜索的时候实现高亮 ...
- unicode 编码在线转换工具
字符串 unideo的16进制值
- vue - check-versions.js for child_process
webpack之类的配置文件. webpack.base.conf.js
- 浅谈Volatile与多线程
标题:浅谈Volatile与多线程 2011-04-19 22:49:17 最近看的比较杂,摘了一些人的笔记!随着多核的日益普及,越来越多的程序将通过多线程并行化的方式来提升性能.然而,编写正 ...
- Android_JarZip压缩和解压文件
本文资料来自<android开发权威指南> AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成. 压缩文件基本步骤: 1.创 ...
- xjc编码
本篇文章是对jaxb xjc编码的问题进行了详细的分析介绍,需要的朋友参考下 平时喜欢根据写一个xjc批处理命令,根据xsd批量生成java类,觉得很方便也很酷.但是有时候xsd生成的java类中 ...
- andorid HTTPS 不需要证书 VolleyEror: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not fou
1.加证书(这里不说) 2.修改代码 import java.security.KeyManagementException;import java.security.NoSuchAlgorithmE ...
- [转载]一种高性能Hierarchical RBAC实现方案
背景 框图 上图中,Role和被设置Permission的Resource都是可以有任意层级继承关系的. 举例 举一个网站的例子来说: 如果,User表示网站用户:Role表示角色:Resource表 ...
- 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: <head ru ...