微信公眾號開發 同時回覆使用者多條資訊(包括圖片和文字)
相信對於大多數的微信公眾號開發的初學者來說,由於微信提供的文件過於簡潔,所以這無疑是對我們的巨大考驗。
但是,苦心人,天不負。在強烈的“我能行”這一自我暗示下,經過在各大網站上的查詢、電子書籍類的讀閱,經過無數次的嘗試,終於能夠實現一次事件同時回覆使用者多條資訊的功能了。額,不說廢話了,下面展示我的最終成果。
(公眾號是接管過來自己開發的)
首先,建立公眾號子選單的點選事件
const APPID = '你的微信appid'; const SECRET = '你的secret'; const ACCESS_TOKEN_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='; const GET_MENU_URL = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token='; const CREATE_MENU_URL = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=';
/** * createmenu * 建立選單 * @access public * @param void * @since 1.0 * @return array */ public function actioncreatemenu() { $access_token_url = self::ACCESS_TOKEN_URL.self::APPID.'&secret='.self::SECRET; $wdata =json_decode($this->curl_get($access_token_url),true); $create_menu_url = self::CREATE_MENU_URL.$wdata['access_token']; $menu = json_encode($this->getMenuConfig(),JSON_UNESCAPED_UNICODE); $data = $this->curl_post($create_menu_url,$menu); echo $data;exit; }
private function getMenuConfig() { $data = array(); $data = Array( 'button' => Array( Array( 'name' => '你關心的', 'sub_button' => Array( Array( 'type' => 'click', 'name' => '邀友有禮', 'key' => 'V1001_INVITE_GIFT' ) ) ) ) }
public function curl_post($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $output;
}
然後在網頁執行 createmenu方法,微信公眾號選單就建立好了。
這些都是前期的準備。
下面是點選事件的處理
$this->sendIMG($media_id , $open_id , $token);
這行程式碼中的 media_id ,是通過微信介面上傳媒體素材返回的微信獨有的標識,上傳素材的程式碼在最後面展示
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$event = $postObj->Event;
$time = $postObj->CreateTime;
$open_id = trim($fromUsername);
$MsgType = $postObj->MsgType;
file_put_contents('/tmp/test.log', $MsgType, FILE_APPEND);
switch ($event) {
case 'CLICK':
$token = $this->token();
$this->sendText($open_id , $token);
$resultIMG = '圖片相對於伺服器下的路徑';
$media_id = $this->add_m($resultIMG);
$this->sendIMG($media_id , $open_id , $token);
/*
$returnTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>
</xml>";
$resultStr = sprintf($returnTpl,$fromUsername , $toUsername , time(), 'image' ,$media_id);
echo $resultStr; */
break;
}
function sendText($open_id , $token) {
$data = '{ "touser" : "'.$open_id.'",
"msgtype" : "text",
"text" : {
"content" : "敬請期待"
}
}';
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$token;
$result = $this->https_request($url , $data);
var_dump($result);
}
function sendIMG($media_id , $open_id , $token) {
$data = '{ "touser" : "'.$open_id.'",
"msgtype" : "image",
"image" : {
"media_id" : "'.$media_id.'"
}
}';
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$token;
$result = $this->https_request($url , $data);
var_dump($result);
}
上傳媒體素材,這裡上傳的是圖片,所以傳的引數則是一張圖片的路徑
function add_m($img) {
$path = '這裡填寫圖片上傳的相對路徑'.$img ;
//$img = 'web/image/qrcode/20161229/10.jpg';
if (class_exists ( '\CURLFile' )) {//關鍵是判斷curlfile,官網推薦php5.5或更高的版本使用curlfile來例項檔案
$filedata = array (
'fieldname' => new \CURLFile ( realpath ( $path ), 'image/jpeg' )
);
} else {
$filedata = array (
'fieldname' => '@' . realpath ( $path )
);
}
$url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=".$this->token()."&type=image";
$result = $this->https_request($url , $filedata);
$data = json_decode($result);
return $data->media_id;
}
(通過 path ,必須能夠在伺服器下訪問到圖片)最後,說明一下,我的圖片是能都通過網路訪問到的,比如(http://www.image.****.com)
但是,當我將這個圖片的地址新增到上傳媒體素材進行上傳的時候,結果是上傳失敗,也就沒有了本來應該返回的 media_id,所以採用了獲取路徑上傳的方法
在這裡如果有更好的方法,歡迎留言艾特我,大家相互交流,共同進步!!!
相關推薦
微信公眾號開發 同時回覆使用者多條資訊(包括圖片和文字)
相信對於大多數的微信公眾號開發的初學者來說,由於微信提供的文件過於簡潔,所以這無疑是對我們的巨大考驗。 但是,苦心人,天不負。在強烈的“我能行”這一自我暗示下,經過在各大網站上的查詢、電子書籍類的讀閱,經過無數次的嘗試,終於能夠實現一次事件同時回覆使用者多條資訊的功能了。額
微信公眾號開發之回覆圖文訊息(被動) 微信公眾號開發之VS遠端除錯
目錄 (一)微信公眾號開發之VS遠端除錯 (二)微信公眾號開發之基礎梳理 (三)微信公眾號開發之自動訊息回覆和自定義選單 (四)微信公眾號開發之網頁授權獲取使用者基本資訊 (五)微信公眾號開發之網頁中及時獲取當前使用者Openid及注意事項 (六)微信公眾號開發之掃碼支付 (七)微信公眾號開發之
微信公眾號開發如何回覆正確的超連結?
微信公眾號在開發時想傳送一個超連結給使用者,類似百度,點選直接到百度頁面 可以這樣寫 $content = '<a href="http://www.baidu.com">百度<
微信公眾號開發---解決Access Token過期的問題(.Net實現)
因為access_token,在以後的高階功能裡面會經常用到,所以這裡不得不這裡對前面所講解的access_token改造一下。另外需要說明的是access_token是變化的,有自己的週期,官方解釋為:"有效期為7200秒",這就要求我們把獲得的access_token存
C#微信公眾號開發 -- (三)使用者關注之後自動回覆
通過了上一篇文章之後的微信開發者驗證之後,我們就可以做微信公眾號的程式碼開發了。 當我們點選關注某個公眾號的時候,有時候會發現他會自動給我們回覆一條訊息,比如歡迎關注XXX公眾號。這個功能其實是在點選關注的時候,使用者觸發了微信定義的事件,同時微信會返回給我們一個XML資料包,微信官方的解釋如下: 推送X
微信公眾號開發--接收與回覆訊息(Java)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
微信公眾號開發學習(2)_____訊息接收與被動回覆
訊息接收(只以文字訊息為例,其它訊息類似,具體官網檢視) XML有4種解析方式,如果不瞭解,可以看看 /*獲取XML資料*/ InputStream is = request.getInputStream(); DocumentBuilderFactory dbf =
微信公眾號開發-實現服務端回覆訊息為空
微信側提供的被動回覆使用者訊息文件: 如果你回覆 的是一個物件格式,content為“”,這時微信側會顯示: 如果你對使用者輸入的某些資訊不進行回覆,那麼你應該這樣做: private void noReply(HttpServletResponse respo
微信公眾號開發(六)-- 關注公眾號自動回覆兩條訊息
昨天晚上臨下班,客戶提了個新需求,關注公眾號的時候希望呢能自動回覆兩條資訊。我,一個野生的菜雞程式媛當時眼前就一黑,昨天還是聖誕節呢嘿。 咳。查了下,自動回覆兩條訊息,其實除了歡迎資訊再呼叫一次客服介面。 呼叫客服介面,回覆文字資訊 $content = 'Hello
微信公眾號開發整理(二)--圖文訊息回覆
1.由於個人公眾號許多介面許可權用不了,這裡方便測試,我們採用測試賬號進行開發:2.找到回覆圖文訊息相關API文件首先查看回復圖文訊息文字格式如下:3.上一篇建立了一個公用的實體類,這次建立圖文訊息的回覆,我們只需要繼承公用的父類,具體實體類如下:public class N
微信公眾號開發之——第三方自動回覆機器人接入
開發微信訂閱號,服務號的朋友都知道,在微信公眾號開發中有一個自動回覆的訊息功能,一般來說,自動回覆的 內容需要我們自定義,而且每次返回的內容基本沒什麼特別的變化,如果要根據提問的內容返回不同的訊息
基於springboot+mybatis的微信公眾號開發第三篇-訊息的接收與回覆
1、在寫處理訊息的方法前,我們得把相關的model類寫好。 在model包下建立message(req與resp),具體建立如圖所示: BaseMessage類 /** * 訊息基類(普通使用者 -> 公眾帳號) * */ public
微信公眾號開發2自動回覆
這裡就囉嗦什麼了, 直接上程式碼 /** * wechat php test */ //define your token define("TOKEN","weixin"); $wechatObj=newwechatCallbackapiTest(); $wechatOb
微信公眾號開發筆記1(nodejs開發的)
.post err log 加密 課堂 是我 targe 分享 gty 本篇記錄了微信公眾號開發的一些筆記 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自
微信公眾號開發
weixin 後來 方式 發送請求 菜單 ml2 發現 格式 ejs 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自己的服務器與微信服務器進行認證通過後,
微信公眾號開發教程 微信小程序
微信開發 微信小程序PHP微信公眾平臺開發高級篇http://www.imooc.com/u/197650/courses?sort=publish微信小程序教程 。鏈接:http://pan.baidu.com/s/1slmAwDf 密碼:ciry微信公眾號開發教程 微信小程序
微信公眾號開發--獲取用戶信息中文亂碼的解決方案
其中 utf-8 == font zzu 解決 col class api 在微信開發中我們會經常需要獲取用戶的信息。 微信給我們提供了獲取用戶信息的api, 地址為 https://api.weixin.qq.com/cgi-bin/user/info?access_t
微信公眾號開發80端口映射解決方案
解決方案 微信開發 80端口映射 說明最近公司要搞微信公眾號開發,需要解決80端口映射的問題,看了網上好多老司機的方法,最終選擇ngrok比較符合公司的情況。微信公眾平臺開發,可參考:https://mp.weixin.qq.com/wiki 。微信公眾號接口只支持80接口。測試環境: wind
微信公眾號開發系列-啟用開發模式
sum oca 使用 popu 接口交互 開發模式 signature 微信公眾 local 微信公眾平臺分為兩種模式:編輯模式與開發模式; 微信公眾帳號申請成功後,要想用程序接收處理用戶的請求,就必需要在“高級功能”裏進行配置。點擊“高級功能”。 從微信開發平臺開發人
微信公眾號開發(一)
jpg 解壓 china arc 公眾平臺 開發 技術分享 更換 微信公眾號 4.1 示例代碼設置 首先下載此處的php接入代碼 ,在公眾號中 配置 url 地址指向 文件 代碼 只需更換 自定義的token 即可 這樣就完成最初的接入 微信公眾平臺提供了一個php示例