溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用php實(shí)現(xiàn)微信公眾號圖文消息回復(fù)與access_token

發(fā)布時(shí)間:2020-07-20 11:14:55 來源:億速云 閱讀:152 作者:Leah 欄目:編程語言

如何使用php實(shí)現(xiàn)微信公眾號圖文消息回復(fù)與access_token?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

 //代碼如下
<?php
class IndexAction extends Action {
public function __construct(){

}
public function index(){
//獲得參數(shù) signature nonce token timestamp echostr
$nonce     = $_GET['nonce'];
$token     = 'imooc';
$timestamp = $_GET['timestamp'];
$echostr   = $_GET['echostr'];
$signature = $_GET['signature'];
//形成數(shù)組,然后按字典序排序
$array = array();
$array = array($nonce, $timestamp, $token);
sort($array);
//拼接成字符串,sha1加密 ,然后與signature進(jìn)行校驗(yàn)
$str = sha1( implode( $array ) );
if( $str  == $signature && $echostr ){
//第一次接入weixin api接口的時(shí)候
echo  $echostr;
exit;
}else{
$this->reponseMsg();
}
}
// 接收事件推送并回復(fù)
public function reponseMsg(){
//1.獲取到微信推送過來post數(shù)據(jù)(xml格式)
$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
//2.處理消息類型,并設(shè)置回復(fù)類型和內(nèi)容
/*<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
//判斷該數(shù)據(jù)包是否是訂閱的事件推送
if( strtolower( $postObj->MsgType) == 'event'){
//如果是關(guān)注 subscribe 事件
if( strtolower($postObj->Event == 'subscribe') ){
//回復(fù)用戶消息(純文本格式)	
$toUser   = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time     = time();
$msgType  =  'text';
$content  = '歡迎關(guān)注我們的微信公眾賬號'.$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>*/
}
}
//當(dāng)微信用戶發(fā)送imooc,公眾賬號回復(fù)‘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 = '您輸入的數(shù)字是1';
break;
case 2:
$content = '您輸入的數(shù)字是2';
break;
case 3:
$content = '您輸入的數(shù)字是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);

}
}
*/
//用戶發(fā)送tuwen1關(guān)鍵字的時(shí)候,回復(fù)一個(gè)單圖文
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');
//注意:進(jìn)行多圖文發(fā)送時(shí),子圖文個(gè)數(shù)不能超過10個(gè)
}else{
switch( trim($postObj->Content) ){
case 1:
$content = '您輸入的數(shù)字是1';
break;
case 2:
$content = '您輸入的數(shù)字是2';
break;
case 3:
$content = '您輸入的數(shù)字是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.設(shè)置curl的參數(shù)
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//3.采集
$output = curl_exec($ch);
//4.關(guān)閉
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.設(shè)置參數(shù)
curl_setopt($ch , CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
//4.調(diào)用接口 
$res = curl_exec($ch);
//5.關(guān)閉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

看完上述內(nèi)容,你們掌握如何使用php實(shí)現(xiàn)微信公眾號圖文消息回復(fù)與access_token的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI