做个广告先,

PHP千人群(6848027)

C++群 (1414577)

看雪汇编&反汇编群(15375777)

看雪汇编&反汇编2群(4915800)

转载不一定注明出处,只要推荐下群就可以哈,各位亲~

微信开发_微信教程__微信通讯框架V1.0

<?php
/**
* 微信消息框架 by 牛牛 Q 184377367
*/
class WeChat { public $token = null;
public $msgType = null;
public $event = null;
public $eventKey = null;
public $keyword = null;
public $context = array();
public $insHandle = array(); public function Valid($retstr) { if ($this->CheckSignatrue()) {
echo $retstr;
exit;
}
} public function RegisterHandle(WeChatInterface $ins){
array_push($this->insHandle, $ins);
} public function GetPostContent() { //get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->context['fromUserName'] = $postObj->FromUserName;
$this->context['toUserName'] = $postObj->ToUserName;
$this->context['time'] = $postObj->CreateTime;
$this->keyword = trim($postObj->Content);
$this->msgType = $postObj->MsgType;
// $this->msgType = 'event';
$this->event = $postObj->Event;
$this->eventKey = $postObj->EventKey;
$this->ActionRouter(); } else {
echo "";
exit;
}
} private function CheckSignatrue() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"]; $tmpArr = array($this->token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
} /*
* 事件消息
*/
public function OnEvent($event, $eventkey, $context ){ if ( count($this->insHandle)>0 ){
foreach ( $this->insHandle as $ins ){ $ins->OnEvent($event, $eventkey, $context);
}
}
} /*
* 文字消息
*/
public function OnText($keyword,$context){
if ( count($this->insHandle)>0 ){
foreach ( $this->insHandle as $ins ){ $ins->OnText($keyword,$context);
}
}
} private function ActionRouter(){ switch ($this->msgType)
{
case 'event': $this->OnEvent($this->event, $this->eventKey, $this->context);
break;
case 'text':
$this->OnText($this->keyword, $this->context);
break;
default :
exit(); }
} } ?>
<?php
/**
* 微信消息框架 by 牛牛 Q 184377367
*/
interface WeChatInterface{ public function OnEvent($event, $eventkey, $context);
public function OnText($keyword,$context); } ?>
<?php
/**
* 微信消息框架 by 牛牛 Q 184377367
* 操作类必须实现
* WeChatInterface接口中的方法(OnEvent,OnText)
* OnEvent
* OnText
* 微信有事件消息触发OnEvent,文本消息触发OnText */
class WeChatIns implements WeChatInterface { public function OnEvent($event, $eventkey, $context) { $this->PostNews($context); } public function OnText($keyword, $context) {
$this->PostNews($context);
} public function PostText(){ } public function PostNews($context){ $ary[0]['Title'] = '测试';
$ary[0]['Description'] = '测试';
$ary[0]['PicUrl'] = 'http://xxx.jpg';
$ary[0]['Url'] = 'http://qq.com';
echo WeChatUtil::CreateNewsXML($ary, $context); } } ?>
<?php
/**
* 微信消息框架 by 牛牛 Q 184377367
*/
class WeChatUtil { static public function CreateNewsXML( $ary ,$context) {
$count = count($ary);
$textTpl = "<xml>
<ToUserName><![CDATA[".$context['fromUserName']."]]></ToUserName>
<FromUserName><![CDATA[".$context['toUserName']."]]></FromUserName>
<CreateTime>".time()."</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[这里是内容]]></Content>
<ArticleCount>".$count."</ArticleCount>
<Articles>"; foreach($ary as $k=>$v){
$textTpl.="<item>
<Title><![CDATA[".$v['Title']."]]></Title>
<Description><![CDATA[".$v['Description']."]]>
</Description>
<PicUrl><![CDATA[".$v['PicUrl']."]]></PicUrl>
<Url><![CDATA[".$v['Url']."]]></Url>
</item>";
}
$textTpl.="</Articles><FuncFlag>0</FuncFlag></xml>";
return $textTpl; } } ?>
<?php
/**
* 微信消息框架 by 牛牛 Q 184377367
*/
/*
import 是TP函数,换成include吧 0 0
*/
import('ORG.WeChatInterface');
import('ORG.WeChatIns');
import('ORG.WeChat'); $wechatObj = new WeChat();
//微信TOKEN
$wechatObj->token = '';
$wechatObj->RegisterHandle( new WeChatIns() );
if (isset( $_GET['echostr'] )) {
$wechatObj->Valid( $_GET['echostr'] );
} else {
$wechatObj->GetPostContent();
} ?>

微信开发_微信教程__微信通讯框架V1.0的更多相关文章

  1. 《C#微信开发系列(Top)-微信开发完整学习路线》

    年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...

  2. C#微信开发小白成长教程二(新手接入指南,附视频)

    距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙.最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制.本讲就来介绍下怎么接入 ...

  3. C#微信开发小白成长教程一(公众平台的工作原理与调试环境部署,附视频)

    黑夜给了我黑色的眼睛,我决定录视频到天明.半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班.不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职 ...

  4. [转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台

    先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号. function CheckSignature(const ...

  5. 微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)

    最近需求是 用户兑换微信红包,需要一些验证,加密,以及证书: 工欲善其事必先利其器 感谢前辈的微信SDK 已经维护三年了,还在维护中! 官方文档走一波 文档还是一如既往的 坑人啊,写的很简单,对简单明 ...

  6. 微信开发+百度AI学习:微信网页开发环境搭建

    参考微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 两步即可获取微信网页开发能力 STEP1: ...

  7. 关于Farseer.net轻量级ORM开源框架 V1.0 概念版本开发的消息

    V0.2版的开源距离今天(05年03月)已有近3年的时间.可以说这个版本已经有点落伍的感觉了,呵呵. V0.2版至今一直处于BUG的修复及一些细小功能的增加,所以版本号上一直没有变化. 其实在这1.2 ...

  8. Farseer.net轻量级ORM开源框架 V1.0 开发目标

    本篇主要给大家说明下在V1.0中,计划开发的任务的状态.按照国际惯例.上大表格 开发计划状态 编号 模块 状态 说明 1  分离Utils.Extend.UI  √  在V0.2版本中,是集成在一个项 ...

  9. java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器

    jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中. jsapi_ticket获取 要获取jsapi_ticket可以使用如下的方法 String jsapi_ticket ...

随机推荐

  1. 存储过程中调用EXECUTE IMMEDIATE的“权限不足”问题

    使用plsql 动态创建表时,用户需要具有create any table 权限 例如: create or replace procedure create_table_test is tmpstr ...

  2. ItextSharp代码示例

    示例代码目录 示例代码0101. 5 示例代码0102. 7 示例代码0103. 9 示例代码0104. 11 示例代码0105. 13 示例代码0106. 15 示例代码0107. 17 示例代码0 ...

  3. xcode KVC:Key Value Coding 键值编码

    赋值 // 能修改私有成员变量 - (void)setValue:(id)value forKey:(NSString *)key; - (void)setValue:(id)value forKey ...

  4. 算法精解(C语言描述) 第4章 读书笔记

    第4章 算法分析 1.最坏情况分析 评判算法性能的三种情况:最佳情况.平均情况.最坏情况. 为何要做最坏情况分析: 2.O表示法 需关注当算法处理的数据量变得无穷大时,算法性能将趋近一个什么样的值.一 ...

  5. js实现页面时钟

    <body onload="setInterval(nowtime,1000)">    <form id="main" method=&qu ...

  6. Java调用ICTCLAS2015

    最近老板让做分词,指定使用ICTCLAS,于是到官网下载了2015,鼓捣了一晚上也没弄出来,百度了一上午还是一头雾水,,幸运的是现在已经弄好了,趁着没忘赶紧写下来. 1.首先解压并找到:2015080 ...

  7. Git上手指南

    (写在最前:这篇随笔是我在学习git时参考资料+实践出来的,其中一些问题是在实践中遇到的,希望对大家有帮助,还有很多不完整的地方.如果有什么错误的地方欢迎随时向我提出来) 在Git教程之前,我们先来了 ...

  8. matlab GUI之 -- 绘图

    1.常用属性 linestyle: 实线 - 虚线 -- 点线 : 点画线 -. marker: 加号 + 圆圈 O 星号 * 方块 S 三角形 ^  <  > 五角星 P color: ...

  9. DataTable去除重复行

    //抽取dt中的特定列"Region","Cur","Year"组合成新的dat DataTable dat = dt.DefaultVie ...

  10. WCF---服务发布的步骤

    服务发布的步骤: 1.打开你的VS2012网站项目,右键点击项目>菜单中 重新生成一下网站项目:再次点击右键>发布: 2.弹出网站发布设置面板,点击<新建..>,创建新的发布配 ...