微信关注自动回复消息

<?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

时间: 2024-08-15 04:45:29

微信关注自动回复消息的相关文章

微信开发之关注自动回复

微信开发模式下关注自动回复官方给出的说明是: 推送XML数据包示例: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[even

分享为小程序添加自动回复消息的5种方法!自动客服功能的微信小程序

如何通过小程序客服消息引导自动关注公众号? 小程序客服自动回复一个图文链接? 小程序客服可以发小程序卡片吗? 小程序客服能像公众号一样设置关键词回复吗? 收到消息时自动回复? 微信小程序新手如何默认自动回复功能 如果你遇到以上问题,请往下看!教大家实现微信小程序客服自动回复消息功能,以帮助我们更好地与客户进行互动. 当我们的小程序接入客服,在小程序前端增加一个客服按钮,用户可以点击按钮主动和我们的客服互动! 但是有个问题,消息那么多,如何才能接待的过来,能否想微信公众号一样自动回复,关键词回复,

Java微信公众号开发----关键字自动回复消息

在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有(如图): 附上解析xml类的依赖: 1 <!-- dom对象读取写入xml文件 --> 2 <dependency> 3 <groupId>dom4j</groupId> 4 <artifactId>dom4j</artifactId>

微信订阅号的关注和消息推送中的观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅模式.模型-视图模式.源-监听器模式或从属者模式.这种模式在我们实际生活中并不鲜见,比如订牛奶.订报纸.我们订阅了某报纸之后,一旦报纸有新版出来,就会送到我们报箱或手中,去过取消订阅,那么也就再也收不到了.有了互联网之后,无论是微博好友还是微信订阅号,我们都可以"关注"和"取消关注",关注了就可以收到信息推动.这些都是观察者

微信回复文本消息和图文消息

微信自动回复,我的理解,大体可以分为: 1.关注平台后自动回复. 2.用户推送了文本,我们回复消息.包括文本消息,单图文消息和多图文消息等等. 3.click事件,响应事件后回复消息. 我们先写一个判断类型的函数: public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postS

微信关键字自动回复功能实现

一.微信API解读 微信自动回复可以分为三种,一种是首次关注的欢迎语,一种是关键字自动回复,还有就是无法识别的回复.这三种模式在实现上是完全一样的,只是基于的事件不同而已.要想实现自动回复功能,首先要对微信相关API进行解读. 微信的消息类型主要分为请求消息类型以及事件消息类型. 首次关注对应的是事件类型中的订阅类型(subscribe),关键字自动回复以及无法识别回复对应的是请求消息类型中的文本消息(text).为了以后方便,我们创建一个MessageUntil.java,将所有的请求消息类型

微信公众平台消息接口开发-封装weixin.class.php(转)

一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理. 我们就考虑在这个基础上做一次封装,weixin.class.php,代码如下: <?php class Weixin {     public $token = '';//token     public $debug =  false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据     public $setFlag = false;

[转载]微信企业号不同消息类型发送

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特点,很适合企业内部的环境.本文主要介绍如何利用企业号实现文本.图片.文件.语音.视频.图文消息等消息的发送操作. 1.企业号特点 对于企业号,有以下一些特点: 1)关注更安全 –只有企业通讯录的成员才能关注企业号,分级管理员.保密消息等各种特性确保企业内部信息的安全. 企业可以设置自行验证关注者身份

微信公众平台消息接口开发-封装weixin.class.php

原文:微信公众平台消息接口开发-封装weixin.class.php 一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理. 我们就考虑在这个基础上做一次封装,weixin.class.php,代码如下: <?php class Weixin {     public $token = '';//token     public $debug =  false;//是否debug的状态标示,方便我们在调试的时候记录一