微信开发_微信教程__微信通讯框架V1.0
做个广告先,
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的更多相关文章
- 《C#微信开发系列(Top)-微信开发完整学习路线》
年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...
- C#微信开发小白成长教程二(新手接入指南,附视频)
距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙.最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制.本讲就来介绍下怎么接入 ...
- C#微信开发小白成长教程一(公众平台的工作原理与调试环境部署,附视频)
黑夜给了我黑色的眼睛,我决定录视频到天明.半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班.不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职 ...
- [转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台
先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号. function CheckSignature(const ...
- 微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)
最近需求是 用户兑换微信红包,需要一些验证,加密,以及证书: 工欲善其事必先利其器 感谢前辈的微信SDK 已经维护三年了,还在维护中! 官方文档走一波 文档还是一如既往的 坑人啊,写的很简单,对简单明 ...
- 微信开发+百度AI学习:微信网页开发环境搭建
参考微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 两步即可获取微信网页开发能力 STEP1: ...
- 关于Farseer.net轻量级ORM开源框架 V1.0 概念版本开发的消息
V0.2版的开源距离今天(05年03月)已有近3年的时间.可以说这个版本已经有点落伍的感觉了,呵呵. V0.2版至今一直处于BUG的修复及一些细小功能的增加,所以版本号上一直没有变化. 其实在这1.2 ...
- Farseer.net轻量级ORM开源框架 V1.0 开发目标
本篇主要给大家说明下在V1.0中,计划开发的任务的状态.按照国际惯例.上大表格 开发计划状态 编号 模块 状态 说明 1 分离Utils.Extend.UI √ 在V0.2版本中,是集成在一个项 ...
- java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器
jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中. jsapi_ticket获取 要获取jsapi_ticket可以使用如下的方法 String jsapi_ticket ...
随机推荐
- C++编程技术之 异常处理(上)
增强错误恢复能力是提高代码健壮性的最有力途径之一 之所以平时编写代码的时候不愿意去写错误处理,主要是由于这项工作及其无聊并可能导致代码膨胀,导致的结果就是本来就比较复杂的程序变得更加复杂.当然了,前面 ...
- C++ Primer 读书笔记 第1章
1.1 编写简单的C++程序 每个C++程序都必须包含一个main函数,因为main函数是系统执行入口,且main函数是唯一被系统显示调用的函数. 定义函数必须指定4个元素:返回类型.函数名.形参表. ...
- Android UI高级交互设计Demo
首先:是google的新标准 Google Material design 开源项目 1.直接拿来用!十大Material Design开源项目 2.收集android上开源的酷炫的交互动画和视觉效果 ...
- Deep Learning(深度学习)相关网站
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- 一个简单的Spring AOP例子
转载自: http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html 经过这段日子的学习和使用Spring,慢慢地体会到Sprin ...
- C - Wooden Sticks
C - Wooden Sticks Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- [非技术参考]C#基础:使用Thread创建线程(1)
Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.下面我们用一个例子来解释怎样用Thread类 ...
- Hive入门之UDFS函数
一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数. DESCRIBE FUNCTION<function_name>; (2)A IS NUL ...
- Spring jdbcTemplate + EasyUI 物理分页
前文说到,新项目中,用到的是SpringMVC + jdbcTemplate,前台是EasyUI,发现同事以前封装分页是逻辑分页,于是,自己动手封装了下物理分页. 这个是核心分页实体: import ...
- 不包含任何UserControl
奇怪了,以前做控件的时候都没有这个问题,哎,又堕落了1年,什么都忘了 创建自定义控件 可以继承现有控件,也可以继承userContrl类,但是现在有个问题 很多网上的资料说,啊,直接创建一个自定义控件 ...