在通过微信公众平台验证之后,需要关注订阅公众号。如何获取订阅事件,并且在订阅之后回复消息,如果有需求要给用户一个数据库表中的信息,那我们可以保存用户openid(唯一),在这里说一下 这个openid 是每一个用户 对你公众号的一个唯一值,就算取消以后在关注也是这个值。订阅代码如下:
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 = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
//事件
if($postObj->MsgType == "event")
{
//订阅事件
if ($postObj->Event == "subscribe")
{
//回复被动消息
$content = "欢迎关注xxx公众号";
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$content);
echo $resultStr;
//当然也可以回复两条消息
/*
在开发中我们经常也会看到回复两条的情况,那它是怎么实现的呢,被动消息只能回复一条,不能连续两条发送。其实也很简单一条被动消息 一条客服消息,代码在messageToUserName方法中 ,注意:客服消息比被动 消息回复的快。同时客服消息回复很慢,超过5s 便会重复三条。很多人对此很苦恼,在之后我便会贴上代码为大家解决这一问题。
$content = "产品介绍";
$this->messageToUserName($content,$fromUsername);
*/
//要想在表中保存用户信息,直接保存用户的fromUsername(openid) 即可,在这之前我还保存过ip 发现ip都相同,后来想想规律 我们获取的ip是微信服务器端的ip。
/*
数据库代码
mysql_connect();
....
/*
}
}
//客服消息
private function messageToUserName($content,$fromUsername)//content 就是回复的消息,$fromUsername就是openid
{
//这里要获取token
$ACC_TOKEN = $this->message();
$data = ‘{
"touser":"‘.$fromUsername.‘",
"msgtype":"text",
"text":
{
"content":"‘.$content.‘"
}
}‘;
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$ACC_TOKEN;
$result = $this->https_post($url,$data);
$final = json_decode($result);
return $final;
}
//获取access_token
private function message()
{
$appid = "你的appid";
$appsecret = "你的appsecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$output = $this->https_post($url); //http 请求 curl方式
$jsoninfo = json_decode($output, true);
$access_token = $jsoninfo["access_token"];
return $access_token;
}
//http 请求
private function 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;
}