您好,登錄后才能下訂單哦!
如何使用php實現微信公眾號圖文消息回復與access_token?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
//代碼如下 <?php class IndexAction extends Action { public function __construct(){ } public function index(){ //獲得參數 signature nonce token timestamp echostr $nonce = $_GET['nonce']; $token = 'imooc'; $timestamp = $_GET['timestamp']; $echostr = $_GET['echostr']; $signature = $_GET['signature']; //形成數組,然后按字典序排序 $array = array(); $array = array($nonce, $timestamp, $token); sort($array); //拼接成字符串,sha1加密 ,然后與signature進行校驗 $str = sha1( implode( $array ) ); if( $str == $signature && $echostr ){ //第一次接入weixin api接口的時候 echo $echostr; exit; }else{ $this->reponseMsg(); } } // 接收事件推送并回復 public function reponseMsg(){ //1.獲取到微信推送過來post數據(xml格式) $postArr = $GLOBALS['HTTP_RAW_POST_DATA']; //2.處理消息類型,并設置回復類型和內容 /*<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml>*/ $postObj = simplexml_load_string( $postArr ); //$postObj->ToUserName = ''; //$postObj->FromUserName = ''; //$postObj->CreateTime = ''; //$postObj->MsgType = ''; //$postObj->Event = ''; // gh_e79a177814ed //判斷該數據包是否是訂閱的事件推送 if( strtolower( $postObj->MsgType) == 'event'){ //如果是關注 subscribe 事件 if( strtolower($postObj->Event == 'subscribe') ){ //回復用戶消息(純文本格式) $toUser = $postObj->FromUserName; $fromUser = $postObj->ToUserName; $time = time(); $msgType = 'text'; $content = '歡迎關注我們的微信公眾賬號'.$postObj->FromUserName.'-'.$postObj->ToUserName; $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content); echo $info; /*<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>*/ } } //當微信用戶發送imooc,公眾賬號回復‘imooc is very good' /*<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>*/ /*if(strtolower($postObj->MsgType) == 'text'){ switch( trim($postObj->Content) ){ case 1: $content = '您輸入的數字是1'; break; case 2: $content = '您輸入的數字是2'; break; case 3: $content = '您輸入的數字是3'; break; case 4: $content = "<a href='http://www.imooc.com'>慕課</a>"; break; case '英文': $content = 'imooc is ok'; break; } $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; //注意模板中的中括號 不能少 也不能多 $fromUser = $postObj->ToUserName; $toUser = $postObj->FromUserName; $time = time(); // $content = '18723180099'; $msgType = 'text'; echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content); } } */ //用戶發送tuwen1關鍵字的時候,回復一個單圖文 if( strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='tuwen2' ){ $toUser = $postObj->FromUserName; $fromUser = $postObj->ToUserName; $arr = array( array( 'title'=>'imooc', 'description'=>"imooc is very cool", 'picUrl'=>'https://cache.yisu.com/upload/information/20200318/98/37831.jpg', 'url'=>'http://www.imooc.com', ), array( 'title'=>'hao123', 'description'=>"hao123 is very cool", 'picUrl'=>'https://cache.yisu.com/upload/information/20200318/98/37832.jpg', 'url'=>'http://www.hao123.com', ), array( 'title'=>'qq', 'description'=>"qq is very cool", 'picUrl'=>'https://cache.yisu.com/upload/information/20200318/98/37831.jpg', 'url'=>'http://www.qq.com', ), ); $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <ArticleCount>".count($arr)."</ArticleCount> <Articles>"; foreach($arr as $k=>$v){ $template .="<item> <Title><![CDATA[".$v['title']."]]></Title> <Description><![CDATA[".$v['description']."]]></Description> <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl> <Url><![CDATA[".$v['url']."]]></Url> </item>"; } $template .="</Articles> </xml> "; echo sprintf($template, $toUser, $fromUser, time(), 'news'); //注意:進行多圖文發送時,子圖文個數不能超過10個 }else{ switch( trim($postObj->Content) ){ case 1: $content = '您輸入的數字是1'; break; case 2: $content = '您輸入的數字是2'; break; case 3: $content = '您輸入的數字是3'; break; case 4: $content = "<a href='http://www.imooc.com'>慕課</a>"; break; case '英文': $content = 'imooc is ok'; break; } $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; //注意模板中的中括號 不能少 也不能多 $fromUser = $postObj->ToUserName; $toUser = $postObj->FromUserName; $time = time(); // $content = '18723180099'; $msgType = 'text'; echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content); }//if end }//reponseMsg end function http_curl(){ //獲取imooc //1.初始化curl $ch = curl_init(); $url = 'http://www.baidu.com'; //2.設置curl的參數 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //3.采集 $output = curl_exec($ch); //4.關閉 curl_close($ch); var_dump($output); } function getWxAccessToken(){ //1.請求url地址 $appid = 'wx08d5c2cb632bb5e4'; $appsecret = '06d3444fb9abd8d00314eb4a38ad61a8'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; //2初始化 $ch = curl_init(); //3.設置參數 curl_setopt($ch , CURLOPT_URL, $url); curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1); //4.調用接口 $res = curl_exec($ch); //5.關閉curl curl_close( $ch ); if( curl_errno($ch) ){ var_dump( curl_error($ch) ); } $arr = json_decode($res, true); var_dump( $arr ); } function getWxServerIp(){ $accessToken = "6vOlKOh7r5uWk_ZPCl3DS36NEK93VIH9Q9tacreuxJ5WzcVc235w_9zONy75NoO11gC9P0o4FBVxwvDiEtsdX6ZRFR0Lfs_ymkb8Bf6kRfo"; $url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $res = curl_exec($ch); curl_close($ch); if(curl_errno($ch)){ var_dump(curl_error($ch)); } $arr = json_decode($res,true); echo "<pre>"; var_dump( $arr ); echo "</pre>"; } }//class end
看完上述內容,你們掌握如何使用php實現微信公眾號圖文消息回復與access_token的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。