文档章节

微信关注自动回复消息

晕大海
 晕大海
发布于 2014/09/27 10:57
字数 491
阅读 1822
收藏 5
点赞 0
评论 0
<?php

// 晕大海 2014.09.26

define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();

if(!isset($_GET["echostr"])){
     $wechatObj->responseMsg();
}else{
	 $wechatObj->valid();
}

class wechatCallbackapiTest
{
	/* 验证入口 */
	public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
        	echo $echoStr;
        	exit;
        }
    }

	/* 接受请求 */
    public function responseMsg()
    {
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
		if (!empty($postStr)){
                libxml_disable_entity_loader(true);
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
				$RX_TYPE = trim($postObj->MsgType);
				$result = self::receivemsg($postObj, $RX_TYPE);
				self::log($postObj);
        }else {
        	echo "";
        	exit;
        }
    }
	
	/* 写入日志 */
	public function log($postObj, $content=''){
		@$fp = fopen("log.html","a"); 
		if(empty($content)){
			$fileData = '时间:'.date('Y-m-d H:i:s', time()).' 请求类型:'.$postObj->MsgType.' 事件:'.$postObj->Event.' 开发者:'.$postObj->ToUserName.' 发送方帐号:'.$postObj->FromUserName.'</br>';
		}else{
			$fileData = '时间:'.date('Y-m-d H:i:s', time()).' 内容:'.$content.'</br>';
		}
		fwrite($fp,$fileData); 
		fclose($fp); 
	}
	
	/* 自动文本回复 
	 * 请求类型:$postObj->MsgType
	 * 请求事件:$postObj->Event
	 * 开发者:$postObj->ToUserName
	 * 回复账号OpenID:$postObj->FromUserName
	 */
	private function receivemsg($postObj, $RX_TYPE='text'){	
        $textTpl = "<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%s</CreateTime>
			<MsgType><![CDATA[%s]]></MsgType>
			<Content><![CDATA[%s]]></Content>
			<FuncFlag>0</FuncFlag>
			</xml>";   

        $msgType = "text";
		
		if($postObj->Event == "subscribe"){
			$keyword = 'content_subscribe';
		}elseif($postObj->Event == "unsubscribe"){
			$keyword = 'content_unsubscribe';
		}else{
			$keyword = trim($postObj->Content);
			if(empty($keyword)){
				$keyword = 'content_kong';
			}	
		}
		
		$url = "http://*****/msg.php?keyword=$keyword";
		$contentStr = file_get_contents($url);
		$contentStr = $contentStr.','.$postObj->MsgType;				
        $resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, time(), $msgType, $contentStr);
        echo $resultStr;
	}
	
	/* 验证方法 */
	private function checkSignature()
	{
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}

?>

微信的接口文件 wx_sample.php

<?php
// 晕大海 2014.09.26
header("Content-type: text/html; charset=utf-8");
$keyword = $_GET["keyword"];
$wechatObj = new msg();
$wechatObj->index($keyword);

class msg
{
	public function index($keyword)
    {
		$contentStr = "Welcome to wechat world!";
		if($keyword == '1'){
			$contentStr = '成功了';
		}elseif($keyword == '2'){
			$contentStr = '你很二';
		}elseif($keyword == '你好'){
			$contentStr = '222222';
		}elseif($keyword == 'content_subscribe'){
			$contentStr = '欢迎关注';
		}elseif($keyword == 'content_unsubscribe'){
			$contentStr = '';
		}
		echo $contentStr;
    }
}

通过关键词返回不同信息文件 msg.php

时间:2014-09-26 23:10:14 请求类型:text 事件: 开发者:发送方帐号:</br>

日志文件,log.html 方面记录接口的问题

代码地址和说明:


http://www.yundahai.com/php/liang_8_50_1.html

http://www.yundahai.com/php/liang_8_49_1.html


© 著作权归作者所有

共有 人打赏支持
晕大海
粉丝 0
博文 1
码字总数 491
作品 0
成都
程序员
Node.js 微信后台搭建系列 - 微信集成

Contents 1. 接入验证 2. 接收消息 3. 发送消息 终于基本到了最后的一步了。微信集成主要包含三个部分: 接入验证,让微信确认你的服务器,就是你公众号的拥有人。 接收微信给你服务器的消息...

鹄思乱想
2017/07/30
0
0
运营微信公众号,你该知道的运营基本知识

     做微信公众号运营的人很多,可是很多做了很久的人都不会注意到一些最基本的运营概念,小编为大家整理出了一些关于微信公众号运营的基础概念和知识。      微信公众号的内容大多...

公众开发运营官网
01/14
0
0
微信开发:消息管理

一,接收微信消息 上一篇博文是介绍如何进行服务器端配置,配置的相当于为微信的消息接口,微信向服务器端推送消息或者推送用户发送的消息就会推送到该配置的URL中,配置好了过后,我们就需要...

xiaofli007
2016/09/29
194
0
使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

在使用python一步一步搭建微信公众平台(二)中最后我们留下了一个问题,就是单引号的content在render到xml中时,返回给用户的信息会被转码,如‘<>&’会被转为<>&用户在收到有<>&等内容的时...

Kevin_Yang
2014/01/31
0
29
微信WiFi强制关注公众号怎样实现?如何要求关注公众号上网?

微信WiFi的默认流程,已经从最初的“关注公众号”变成了目前的“打开公众号”。应该说,“打开公众号但是不强制关注“其实是一个更加人性化的做法;因为任何诱导/强制关注,都会影响最终用户...

笨小驴
05/21
0
0
微信公众号基础开发----自动回复

自动回复消息是公众号强大的功能,方便用户使用。 【功能】 下的【自动回复】 进入自动回复设置页面 自动回复有三种,关键词回复,收到消息回复,被关注回复。 1、被关注回复 用户关注公众号...

lar555
05/17
0
0
微信公众平台开发入门教程

关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础。 我们将使用微信公众账...

方倍工作室
2013/06/24
0
0
微信公众号管理系统--Amango

Amango 芒果微信公众号管理框架是基于 Onethink 开源框架进行的二次开发,它继承Onethink的基本CMS管理理念,丰富了对微信公众号管理的更好得支持。 因此,它既可以兼容Onethink的插件也支持...

陈登禄
2014/11/06
23.3K
2
微信公众号开发之连简单的自动回复都不能实现

各位网友: 我们公司安排我们做微信公众号接口开发,就是由编辑模式进入开发模式,接入自己的服务器。所以我就去图书馆借了本书《微信公众平台搭建、开发与实践指南》照着搭建环境和敲代码,...

在我的歌声里
2017/02/04
557
2
微信公众平台素材编辑与自动回复图文教程

一、素材编辑 点 击进入素材管理,我们可以看到界面的左边是素材分类包括图文消息、图片、语音、视频,右边是内容编辑框,由于图片、语音、视频都是很简单的上传文件管理, 所以我们重点讲解...

fjabing
2014/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring boot中日期的json格式化

Model 在model层中,类的日期属性上面添加如下注解: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss") 参考 Jackson Date格式化教程...

亚林瓜子
4分钟前
0
0
Eclipse:Failed to load the JNI shared library

1.问题背景: 由于我之前使用jdk1.9学习,当使用Luke的时候发现jdk版本过高,需要向下配置jdk,就向朋友拷了一个安装包。重新配置路径后,便开始报错。 2.问题描述: Failed to load the JNI...

tinder_boy
7分钟前
0
0
少儿学习编程课程是否真的适合七八岁的低龄儿童[图]

少儿学习编程课程是否真的适合七八岁的低龄儿童[图]: 天下熙熙皆为利来,天下攘攘皆为利往。 这几年来,乐高教育机构在国内如同雨后春笋般出现,当然关闭/转手的也很多。从教师角度来看,部...

原创小博客
12分钟前
0
0
ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
20分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
23分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
26分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
27分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
36分钟前
1
0
基于阿里出得ng-Alain搭建后台管理系统

首先跟大家介绍一下ng_Alain(阿里团队出品) ng-alain技术栈基于 Typescript、Angular、g2、@delon 和 ng-zorro-antd,提前了解和学习这些知识会非常有帮助。 ng-alain 脚手架是基于 Angular ...

方宏春
40分钟前
1
0
Spring框架IOC和AOP的实现原理

一、IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转...

HaierBrother
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部