1. 程式人生 > >php 微信開發訂閱事件並回復2條消息

php 微信開發訂閱事件並回復2條消息

php 微信 peer bin name 需求 這一 access 通過 發現

在通過微信公眾平臺驗證之後,需要關註訂閱公眾號。如何獲取訂閱事件,並且在訂閱之後回復消息,如果有需求要給用戶一個數據庫表中的信息,那我們可以保存用戶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;
}

php 微信開發訂閱事件並回復2條消息