微信开发_微信教程__微信通讯框架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 ...
随机推荐
- Mayor's posters(离散化线段树)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 54067 Accepted: 15713 ...
- C++四种强制类型转换详解
什么是类型转换? 类型转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式.为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符. C与C++的类型转换 //C中: //复 ...
- [学习笔记]viewport定义,弹性布局,响应式布局
一,移动端宽度设置viewport视图窗口,<meta name="viewport" content="width=device-width,initial-sc ...
- AlarmManager类的应用(实现闹钟功能)
1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...
- MATLAB中digits和vpa
digits: DIGITS Set variable precision digits. Digits determines the accuracy of variable precision n ...
- 网页播放音频、视频文件——基于web的html 5的音乐播放器(转载)
文章转载自:开源中国社区 [http://www.oschina.net] 想通过手机客户端(支持 Android.iPhone 和 Windows Phone)访问开源中国:请点这里 HTML5 是 ...
- 电脑技巧---完全控制面板---上帝模式(God Mode)
简介 上帝模式,即"God Mode”,或称为“完全控制面板”.是Windows 系统中隐藏的一个简单的文件夹窗口,但包含了几乎所有Windows系统的设置,如控制面板的功能.界面个性化.辅 ...
- C++_知识点_namespace
#include <iostream> #include <string> using namespace std; void name() { cout << & ...
- Convert Sorted Array to Balanced Binary Search Tree (BST)
(http://leetcode.com/2010/11/convert-sorted-array-into-balanced.html) Given an array where elements ...
- 经常会用到的js函数
//获取样式function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ re ...