做个广告先,

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. golang win32编程的一个dll坑

    例子 package main import ( "github.com/lxn/win" "strconv" "syscall" ) fu ...

  2. 面向对象程序设计-C++_课时16子类父类关系

    初始化列表 类名::类名(形参1,形参2,...形参n):数据成员1(形参1),数据成员2(形参2),...,数据成员n(形参n) { ... } 规则1,初始化列表进行数据成员的初始化 规则2,初始 ...

  3. 通过iframe在其父窗口中打开隐藏元素

    先上代码 $(".login-box,#dl,.top_01 a:eq(1)").click(function(){ if(self!=top){ parent.$("# ...

  4. c++ 回调类成员函数实现

    实现类成员函数的回调,并非静态函数:区分之 #ifndef __CALLBACK_PROXY_H_ #define __CALLBACK_PROXY_H_ template <typename ...

  5. HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解

    scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...

  6. 用VIM删除空行

    从网上找了一个 :g/^s*$/d 开始用的挺好,后来遇到一种空格开头的空行,就不好用了. MSDN上说正则匹配空行用/^\s*$/,就试着把上面的命令改为: :g/^\s*$/d 就可以了. 用的操 ...

  7. socket中的option

    /// Set an option on the socket. /** * This function is used to set an option on the socket. * * @pa ...

  8. fatal error LNK1123: failure during conversion to COFF: file invalid or corr

    新装VS2010出现标题的错误,使用了下面的方法,不行 这个是由于日志文件引起的,可以将 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是"是",改成"否&q ...

  9. Hadoop学习之Hadoop集群搭建

    1.检查网络状况 Dos命令:ping ip地址,同时,在Linux下通过命令:ifconfig可以查看ip信息2.修改虚拟机的ip地址    打开linux网络连接,在桌面右上角,然后编辑ip地址, ...

  10. 戏说Java多线程

    戏说Java多线程. package com.cmp.chengfu.app.jdk6.desktop; import java.awt.Desktop; import java.io.File; i ...