订阅mysql事件_php 微信开发订阅事件并回复2条消息
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, SimpleXMLElement, LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "
%s
0
";
//事件
if($postObj->MsgType == "event")
{
//订阅事件
if ($postObj->Event == "subscribe")
{
//回复被动消息
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$content);
echo $resultStr;
//当然也可以回复两条消息
/*
在开发中我们经常也会看到回复两条的情况,那它是怎么实现的呢,被动消息只能回复一条,不能连续两条发送。其实也很简单一条被动消息 一条客服消息,代码在messageToUserName方法中 ,注意:客服消息比被动 消息回复的快。同时客服消息回复很慢,超过5s 便会重复三条。很多人对此很苦恼,在之后我便会贴上代码为大家解决这一问题。
$content = "产品介绍";
$this->messageToUserName($content,$fromUsername);
*/
/*
数据库代码
mysql_connect();
....
/*
}
}
//客服消息
private function messageToUserName($content,$fromUsername)//content 就是回复的消息,$fromUsername就是openid
{
//这里要获取token
$ACC_TOKEN = $this->message();
$data = {
"touser":".$fromUsername.",
"msgtype":"text",
"text":
{
"content":".$content."
}
};
$result = $this->https_post($url,$data);
$final = json_decode($result);
return $final;
}
//获取access_token
private function message()
{
$appid = "你的appid";
$appsecret = "你的appsecret";
$output = $this->https_post($url); //http 请求 curl方式
$jsoninfo = json_decode($output, true);
$access_token = $jsoninfo["access_token"];
return $access_token;
}
//http 请求
privatefunction https_post($url,$data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
if (curl_errno($curl)) {
return Errno.curl_error($curl);
}
curl_close($curl);
return $result;
}
public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, SimpleXMLElement, LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = " %s 0 "; //事件 if($postObj->MsgType == "event") { //订阅事件 if ($postObj->Event == "subscribe") { //回复被动消息 $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$content); echo $resultStr; //当然也可以回复两条消息 /* 在开发中我们经常也会看到回复两条的情况,那它是怎么实现的呢,被动消息只能回复一条,不能连续两条发送。其实也很简单一条被动消息 一条客服消息,代码在messageToUserName方法中 ,注意:客服消息比被动 消息回复的快。同时客服消息回复很慢,超过5s 便会重复三条。很多人对此很苦恼,在之后我便会贴上代码为大家解决这一问题。 $content = "产品介绍"; $this->messageToUserName($content,$fromUsername); */ /* 数据库代码 mysql_connect(); .... /* } } //客服消息 private function messageToUserName($content,$fromUsername)//content 就是回复的消息,$fromUsername就是openid { //这里要获取token $ACC_TOKEN = $this->message(); $data = { "touser":".$fromUsername.", "msgtype":"text", "text": { "content":".$content." } }; $result = $this->https_post($url,$data); $final = json_decode($result); return $final; } //获取access_token private function message() { $appid = "你的appid"; $appsecret = "你的appsecret"; $output = $this->https_post($url); //http 请求 curl方式 $jsoninfo = json_decode($output, true); $access_token = $jsoninfo["access_token"]; return $access_token; } //http 请求 privatefunction https_post($url,$data) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { return Errno.curl_error($curl); } curl_close($curl); return $result; }