1. 程式人生 > >微信公眾號開發 同時回覆使用者多條資訊(包括圖片和文字)

微信公眾號開發 同時回覆使用者多條資訊(包括圖片和文字)

相信對於大多數的微信公眾號開發的初學者來說,由於微信提供的文件過於簡潔,所以這無疑是對我們的巨大考驗。

但是,苦心人,天不負。在強烈的“我能行”這一自我暗示下,經過在各大網站上的查詢、電子書籍類的讀閱,經過無數次的嘗試,終於能夠實現一次事件同時回覆使用者多條資訊的功能了。額,不說廢話了,下面展示我的最終成果。 

(公眾號是接管過來自己開發的)

首先,建立公眾號子選單的點選事件

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示例