微信公众号开发 回复事件(测试账号)
生活随笔
收集整理的這篇文章主要介紹了
微信公众号开发 回复事件(测试账号)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WinxinSdk.class.php <?php
/*** Created by PhpStorm.* User: Administrator* Date: 2018/3/28* Time: 18:56**/class WinxinSdk
{private $appID = "wx***2d";private $appsecret = "51***80";public static $access_token = "";//也可以寫入sessionpublic static $expires_in = 0;//token失效時間public function WinxinSdk($appID,$appsecret){$this->appID = $appID;$this->appsecret = $appsecret;}public function getToken(){//獲取token$token = '';if(self::$access_token=="" && time()>self::$expires_in-360)//差十分鐘獲取就重新獲取新的
{$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appID&secret=$this->appsecret";$token = $this->curlGet($url);$token = json_decode($token);if(isset($token->access_token)){self::$access_token = $token->access_token;self::$expires_in = time()+$token->expires_in;return $token->access_token;}else{return false;}}return false;}/** reposeMsg 沒封裝好呢*/public function reposeMsg(){//接收事件推送過來的數據,并回復//文案地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//獲取到xml數據后,處理消息類型,并設置回復消息內容(回復就是直接打印xml數據)//數據格式$arr = simplexml_load_string($postArr);if(strtolower($arr->MsgType)=="event"){$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$createTime = time();$content = '尊敬的'.$foUser."謝謝你的關注\n";if(strtolower($arr->Event)=="subscribe"){//訂閱$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}}/** textMsg 沒封裝好呢*/public function textMsg(){//接收文本,并回復//文案地址:$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//獲取到xml數據后,處理消息類型,并設置回復消息內容(回復就是直接打印xml數據)//數據格式$arr = simplexml_load_string($postArr);if(strtolower($arr->MsgType)=='text'){$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$createTime = time();$content = $arr->Content."888888".$toUser."\n";$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}/** getQR 沒封裝好呢*/public function getQR($data = null){//獲取二維碼$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".self::$access_token;$jsonData = '{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}';$res = $this->curlPost2($url,$jsonData);return $res;}public function customMenu($data){//自定義菜單$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".self::$access_token;$res = $this->curlPost2($url,$data);return $res;}public function onclickMenu(){//點擊自定義菜單市出發內容//$postArr = file_get_contents("php://input");$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];$arr = simplexml_load_string($postArr);//$this->logs('inclickMenu.txt',(array)$arr->ToUserName);if(strtolower($arr->MsgType)=="event"){if(strtolower($arr->Event)=="click"){//接受消息格式$rtemp = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[FromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[EVENTKEY]]></EventKey></xml>";//推送文本格式$temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$toUser = $arr->ToUserName;$foUser = $arr->FromUserName;$msgType = 'text';$content = '你點擊了--'.$arr->EventKey;$createTime = time();$temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);return $temp;}}}public function curlGet($url){//get請求接口$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$data = curl_exec($ch);$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);return ($httpCode>=200 && $httpCode<300) ? $data:false;}public function curlPost($url,$data = null){//post請求接口$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);}curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return $output;}public function curlPost2($url,$data){//第一個post方法//$data = http_build_query($data);$opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencodedrn","Content-Length: " . strlen($data) . "rn",'content' => $data));$context = stream_context_create($opts);$html = file_get_contents($url, false, $context);return $html;}public function logs($file,$data){//打印日志(is_array($data))?$data = print_r($data,true):$data;file_put_contents($file,$data);}}
?
后臺接口配置信息文件,用來接收微信發送的xml消息openweixin.php:
<?php /*** Created by PhpStorm.* User: Administrator* Date: 2018/3/27* Time: 20:16*/ //此處簡單的實現一個自動加載 spl_autoload_register(function($class){include_once ("./".$class.".class.php"); }); //文檔網址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319//1.將timestamp,nonce,token按字典序排序 (參數名ASCII碼從小到大排序(字典序))$timestamp = @$_GET['timestamp'];$nonce = @$_GET['nonce'];$token= "fps2";$signature = @$_GET['signature'];$arr = array($timestamp,$nonce,$token);sort($arr);//2.將排序后的三個參數拼接后用sha1加密$tmpstr = implode('',$arr);$tmpstr = sha1($tmpstr); //3.將加密后的字符串與signature進行對比,判斷該請求是否來自微信if($tmpstr == $signature && isset($_GET['echostr'])){//微信服務器配置 第一次接入會驗證合法性,之后接收事件的區別是少傳 $_GET['echostr'] 這個參數echo $_GET['echostr'];exit;}else{//這里可以接收微信服務器傳遞的事件$appID = "wx***2d";$appsecret = "51****80";$wxSdk = new WinxinSdk($appID,$appsecret);$wxSdk->getToken();//echo WinxinSdk::$access_token;//下面只是測試,其實訂閱和發文字消息不可能同時觸發,下面的兩條同一時間只會觸發一個(但是還是不建議這樣寫,最好判斷分開)echo $wxSdk->reposeMsg();//訂閱回復的內容echo $wxSdk->textMsg();//發消息回復的內容echo $wxSdk->onclickMenu();//點擊自定義菜單市出發內容?
轉載于:https://www.cnblogs.com/fps2tao/p/9058425.html
總結
以上是生活随笔為你收集整理的微信公众号开发 回复事件(测试账号)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【spark】SparkSession的
- 下一篇: 中秋几天假期(中秋几天假)