国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息

Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息

Feb 25, 2017 pm 04:51 PM
微信開發(fā)

Force.com除了簡單的文字訊息回覆外,還能回覆圖文並茂的訊息、能回覆音樂或影片、能辨識使用者傳來的語音、能夠蒐集使用者的地理位置資訊並提供對應的內容或服務等,本文將對這些技能一一展開說明,在此之前首先要介紹如何申請一個具有所有服務號接口功能的測試帳號(儘管對於圖文訊息回復這並不是必須的)。

?

申請測試帳號

作為開發(fā)者個人能夠申請的是訂閱號,訂閱號僅僅開放了基礎接口,包含接收用戶訊息、向用戶回覆訊息以及接受事件(事件推送有關注或取消關注、掃描帶參數(shù)二維碼(產(chǎn)生此類二維碼需要高級介面)、上報地理位置(普通訂閱號不支援)、自訂選單(普通訂閱號不支持)點擊)推送三種接口,但高級點的功能如自定義菜單、語音識別、客服接口、OAuth2.0網(wǎng)頁授權、獲取用戶地理位置信息等等均需要服務號才支持,其中認證了的訂閱號支援自訂選單。為了方便開發(fā)人員了解和學習騰訊公司的這些接口,如任何平臺公司那樣,騰訊公司去年晚點的時候終於開放了測試帳號的申請。只要有微信訂閱號碼的用戶都可以申請(服務號碼應該也可以吧,不過沒看過服務號碼後臺長啥樣,不做評論)。

申請方式簡單、直接,進入到微信後臺(https://mp.weixin.qq.com)後在最新版(截止2014年7月6日)的後臺左側最下面有一個「開發(fā)者中心」的鏈接,點擊後能找到一個「接口測試申請系統(tǒng)點擊進入」的鏈接,點擊進入後按照騰訊公司的想到申請即可,這裡不做贅述。

?

Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息

?

#申請成功登陸後的樣子如下,這裡你就能看到,滾動頁面還能看到一個二維碼,透過微信掃描這個二維碼既可以關注這個測試帳號,最多支持20個測試用戶,關注成功後在微信“訂閱號”文件夾裡會多出一個叫做“微信公眾平臺測試號”的帳號,注意雖然是在「訂閱號碼」資料夾,但是具有所有服務號碼的功能:

Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息????????? Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息

?

基礎架構建立

##為基礎架構建立

#?

基礎架構建立

?

為了接下來的工作,這裡我們先建立幾個關鍵的類別以及對應的處理框架,以便後續(xù)增加更多功能支援。

IncomingMsg:使用者傳送來的訊息類,包含了各個關鍵字段資訊;

WeChatNews: 回覆圖文並茂新聞時的新聞類;

IncomingMsg類程式碼如下, 12個字段,包含了各種訊息類型的絕大部分字段資訊:

public?class?IncomingMsg{
????public?String?toUserName;
????public?String?fromUserName;
????public?String?msgType;
????public?String?picURL;
????public?String?mediaID;
????public?String?locationX;
????public?String?locationY;
????public?String?URL;
????public?String?content;
????public?String?event;
????public?String?eventKey;
????public?String?recognition;
????
????public?IncomingMsg(){}
????
????public?IncomingMsg(String?tUN,?String?fUN,?String?mT,?String?pU,?String?mI,?String?lX,?String?lY,?String?u,?String?c,?String?e,?String?eK,?String?r){
????????this.toUserName?=?tUN;
????????this.fromUserName?=?fUN;
????????this.msgType?=?mT;
????????this.picURL?=?pU;
????????this.mediaID?=?mI;
????????this.locationX?=?lX;
????????this.locationY?=?lY;
????????this.URL?=?u;
????????this.content?=?c;
????????this.event?=?e;
????????this.eventKey?=?eK;
????????this.recognition?=?r;
????}
}
WeChatNews類的定義代碼如下,包含了一則新聞的詳細定義資訊:

public?class?WeChatNews{
????public?String?title;
????public?String?description;
????public?String?picUrl;
????public?String?url;
????
????public?WeChatNews(){}
????
????public?WeChatNews(String?t,?String?d,?String?p,?String?u){
????????this.title?=?t;
????????this.description?=?d;
????????this.picUrl?=?p;
????????this.url?=?u;
????}
}

接下來,在doPost方法裡,我們將晚上上篇博文裡的XML解析程式碼,使其能夠解析任何類型的微信XML文,修改後的doPost方法如下:
global?static?void?doPost(){
????????//Receive?message?from?user;
????????RestRequest?req?=?RestContext.request;
????????RestResponse?res?=?RestContext.response;
????????string?strMsg?=?req.requestBody.toString();??
????????System.debug('Request?Contents'?+?strMsg);
????????XmlStreamReader?reader?=?new?XmlStreamReader(strMsg);
????????String?toUserName?=?'';
????????String?fromUserName?=?'';
????????String?msgType?=?'';
????????String?picURL?=?'';
????????String?mediaID?=?'';
????????String?locationX?=?'';
????????String?locationY?=?'';
????????String?URL?=?'';
????????String?content?=?'';
????????String?msgID?=?'';
????????String?event?=?'';
????????String?eventKey?=?'';
????????String?recognition?=?'';
????????
????????while(reader.hasNext()){
????????????if(reader.getLocalName()?==?'ToUserName'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????toUserName?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'FromUserName'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????fromUserName?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'MsgType'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????msgType?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'PicURL'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????picURL?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'MediaId'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????mediaID?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Location_X'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????locationX?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Location_Y'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????locationY?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Url'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????URL?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'MsgId'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????msgID?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Content'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????content?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Event'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????event?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'EventKey'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????eventKey?=?reader.getText();
????????????????}
????????????}
????????????else?if(reader.getLocalName()?==?'Recognition'){
????????????????reader.next();
????????????????if(String.isNotBlank(reader.getText())){
????????????????????recognition?=?reader.getText();
????????????????}
????????????}
????????????reader.next();
????????}
????????IncomingMsg?inMsg?=?new?IncomingMsg(toUserName,?fromUserName,?msgType,?picURL,?mediaID,?locationX,?locationY,?URL,?content,?event,?eventKey,?recognition?);
}

?該方法裡,我們對所有類型微信訊息XML文裡的字段進行了解析,並透過解析回來的值初始化了IncomingMsg對象,接下來,我們將透過傳遞這個對象呼叫不同的方法完成各種任務。接下來我們在上述doPost方法的最後加上以下程式碼:

String?rtnMsg?=?'';
//回復消息

if(msgType.equals('text')){
???rtnMsg?=?handleText(inMsg);
}
RestContext.response.addHeader('Content-Type',?'text/plain');????
RestContext.response.responseBody?=?Blob.valueOf(rtnMsg);

#?

這段程式碼裡首先定義了一個儲存回傳XML文的String字串,接著判斷如果用戶發(fā)來的消息類型是文本類型,則調用一個handleText的方法來處理回復信息,這裡傳遞給handleText方法的對象正是我們前面定義的IncomingMsg對象,關於該方法的細節(jié)我們下一小節(jié)再介紹,這裡成功拿到方法的回傳字串後,透過RestContext即可將XML文訊息傳回騰訊微信,進一步傳回給發(fā)送訊息的使用者。

?

傳送圖文方法handleText詳解


?

###接下來我們將介紹如何回覆圖文訊息。留意,圖文訊息回覆並不需要申請測試帳號,一般訂閱號即可。以下是該方法的全部程式碼:###
private?static?String?handleText(IncomingMsg?msg){
????????String?keyword?=?msg.content;
????????String?strReply;
????????String?strResult;
????????if(keyword.equals('文本')){
????????????strReply?=?'這是個文本消息';
????????????strResult?=?composeTextReply(msg,?strReply);
????????}
????????else?if(keyword.equals('圖文')?||?keyword.equals('單圖文')){
????????????WeChatNews?news?=?new?WeChatNews('蘋果WWDC2014召開在即',?'2014?年似乎將成為又一個“蘋果之年”,熱愛和不那么熱愛蘋果的人都對它的一舉一動保持著關注和揣測——以下是蘋果?WWDC?2014?的13大看點:',?'http://a.36krcnd.com/photo/2014/4e3ae0dac4884bb91934a689b72f8f8b.png',?'http://www.36kr.com/p/212479.html');
????????????List<wechatnews>?newsList?=?new?List<wechatnews>();
????????????newsList.add(news);
????????????strResult?=?composeNewsReply(msg,?newsList);
????????}
????????else?if(keyword.equals('多圖文')){
????????????WeChatNews?news1?=?new?WeChatNews('蘋果WWDC2014召開在即',?'2014年似乎將成為又一個蘋果之年,熱愛和不那么熱愛蘋果的人都對它的一舉一動保持著關注和揣測——以下是蘋果?WWDC?2014?的13大看點:',?'http://a.36krcnd.com/photo/2014/4e3ae0dac4884bb91934a689b72f8f8b.png',?'http://www.36kr.com/p/212479.html');
????????????WeChatNews?news2?=?new?WeChatNews('Facebook?CEO?馬克·扎克伯格再做慈善,為灣區(qū)學校捐贈?1.2?億美元',?'據(jù)?re/code消息,F(xiàn)acebook?CEO?馬克·扎克伯格與妻子Priscilla?Cha?(中文名陳慧嫻)?計劃向灣區(qū)學校捐贈?1.2?億美元。',?'http://a.36krcnd.com/photo/2014/e64d647389bfda39131e12fa9d606bb6.jpg',?'http://www.36kr.com/p/212476.html');
????????????WeChatNews?news3?=?new?WeChatNews('Nokia收購Siri的同門師弟Desti,為自家地圖業(yè)務HERE融入更多人工智能',?'Nokia最近收購了一家地圖公司Desti,來補強自家的地圖業(yè)務HERE。',?'http://a.36krcnd.com/photo/2014/25490e2b8e63ced9586f0a432eebb972.jpg',?'http://www.36kr.com/p/212484.html');
????????????List<wechatnews>?newsList?=?new?List<wechatnews>();
????????????newsList.add(news1);
????????????newsList.add(news2);
????????????newsList.add(news3);
????????????strResult?=?composeNewsReply(msg,?newsList);
????????}
????????else?if(keyword.equals('音樂')){
????????????Map<string>?music?=?new?Map<string>();
????????????music.put('title',?'愛你的宿命');
????????????music.put('description',?'張信哲');
????????????music.put('musicUrl',?'http://zhangmenshiting.baidu.com/data2/music/119826740/1197655931401552061128.mp3?xcode=80587c819993d49621a8dce05e5bb8c9e36664380262dc7e&song_id=119765593');
????????????music.put('musicHQUrl',?'http://zhangmenshiting.baidu.com/data2/music/119826740/1197655931401552061128.mp3?xcode=80587c819993d49621a8dce05e5bb8c9e36664380262dc7e&song_id=119765593');
????????????strResult?=?composeMusicReply(msg,?music);????????????
????????}
????????return?strResult;
????}</string></string></wechatnews></wechatnews></wechatnews></wechatnews>
###?#######

代碼的思路應該來說比較直接,從第4行的if開始判斷用戶發(fā)送過來的文本是什么,根據(jù)不同的關鍵字來確定不同的返回內容,第一個if里將返回給用戶單圖文信息,這里先構造了一個WeChatNews數(shù)組,當然數(shù)組里只有一個WeChatNews對象,將這個數(shù)組交給composeNewsReply來完成最終的XML文構建;第一個else if也很類似,只不過這里的WeChatNews數(shù)組里有三條新聞,關于composeNewsReply方法的細節(jié)我們稍后介紹;最后一個else if里展示了如何回復音樂,這里我們構建了一個Map對象存儲音樂的詳情,并調用composeMusicReply方法來完成最終的XML文構建,同樣該方法的細節(jié)稍后就會介紹到。

上面的思路應該來說還是比較清楚的,接下來介紹composeNewsReply方法的全部代碼:

private?static?String?composeNewsReply(IncomingMsg?msg,?List<wechatnews>?newsList){
????????String?strNews?=?'';
????????String?newsTpl?=?'<item><title></title>
<description></description><picurl></picurl><url></url></item>';
????????for(WeChatNews?news?:?newsList){
????????????String[]?arguments?=?new?String[]{news.title,?news.description,?news.picUrl,?news.url};
????????????strNews?+=?String.format(newsTpl,?arguments);
????????}
????????String?strTmp?=?'<xml><tousername></tousername><fromusername></fromusername><createtime>1234567890</createtime><msgtype></msgtype><articlecount></articlecount><articles>'?+?strNews?+?'</articles></xml>';
????????String[]?arguments?=?new?String[]{msg.fromUserName,?msg.toUserName,?String.valueOf(newsList.size())};
????????String?results?=?String.format(strTmp,?arguments);
????????return?results;
}</wechatnews>

?

了解該方法代碼前先要了解回復圖文信息的XML格式,關于此點可以參照騰訊公司鏈接:回復圖文消息 ,與前文介紹到的普通文本消息大同小異,可以留意到里面有個ArticleCount字段用來指定回復的消息里能有幾條圖文新聞,最大是10,超過10則會無法響應;另外Article節(jié)點下方每一個item均是一條圖文消息。為此,上述代碼的第3行先構造一個每條新聞的模板,接著從第4行開始輪詢新聞列表里的每一條新聞,并構造相應的XML文。從第8行開始構造整個圖文回復的字符串模板,并在第9、10行通過相應參數(shù)將模板轉換為最終的XML字符串。

再接下來介紹composeMusicReply,該方法的全部代碼如下:

private?static?String?composeMusicReply(IncomingMsg?msg,?Map<string>?music){
????????String?strTitle?=?music.get('title');
????????String?strDesc?=?music.get('description');
????????String?strURL?=?music.get('musicUrl');
????????String?strHQURL?=?music.get('musicHQUrl');
????????String?musicTpl?=?'<xml><tousername></tousername><fromusername></fromusername><createtime>12345678</createtime><msgtype></msgtype><music><title></title>
<description></description><musicurl></musicurl><hqmusicurl></hqmusicurl></music></xml>';
????????String[]?arguments?=?new?String[]{msg.fromUserName,?msg.toUserName,?strTitle,?strDesc,?strURL,?strHQURL};
????????String?results?=?String.format(musicTpl,?arguments);
????????return?results;
}</string>

同樣了解該方法要首先了解回復音樂信息的XML格式,可以參照騰訊公司鏈接:回復音樂消息,上面代碼與前面方法比較類似,就不再贅述。(這里的Map對象也許有點多余,可以考慮是否可以和回復視頻的方法整合到一起,否則不需要額外的Map對象開銷,直接將標題、描述、鏈接等信息傳給composeMusicReply方法即可)。

運行效果

?

完成后直接保存代碼便可立即生效,回復圖文、多圖文、音樂的運行效果分別如下:

Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息????????? Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息????????? Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息

更多Force.com微信開發(fā)系列申請測試帳號及回覆圖文訊息相關文章請關注PHP中文網(wǎng)!

?

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP微信開發(fā):如何實作訊息加密解密 PHP微信開發(fā):如何實作訊息加密解密 May 13, 2023 am 11:40 AM

PHP是一種開源的腳本語言,廣泛應用於網(wǎng)頁開發(fā)和伺服器端編程,尤其在微信開發(fā)中得到了廣泛的應用。如今,越來越多的企業(yè)和開發(fā)者開始使用PHP進行微信開發(fā),因為它成為了真正的易學易用的開發(fā)語言。在微信開發(fā)中,訊息的加密和解密是一個非常重要的問題,因為它們涉及資料的安全性。對於沒有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對用戶造成威脅

PHP微信開發(fā):如何實現(xiàn)投票功能 PHP微信開發(fā):如何實現(xiàn)投票功能 May 14, 2023 am 11:21 AM

在微信公眾號開發(fā)中,投票功能經(jīng)常被運用。投票功能是讓使用者快速參與互動的好方式,也是舉辦活動和調查意見的重要工具。本文將為您介紹如何使用PHP實作微信投票功能。在取得微信公眾號授權首先,你需要取得微信公眾號的授權。在微信公眾平臺上,你需要設定微信公眾號碼的api地址、官方帳號和公眾號碼對應的token。在我們使用PHP語言開發(fā)的過程中,我們需要使用微信官方提供的PH

用PHP開發(fā)微信群發(fā)工具 用PHP開發(fā)微信群發(fā)工具 May 13, 2023 pm 05:00 PM

隨著微信的普及,越來越多的企業(yè)開始將其作為行銷工具。而微信群發(fā)功能,則是企業(yè)進行微信行銷的重要手段之一。但是,如果只依靠手動發(fā)送,對於行銷人員來說是一件極為費時費力的工作。所以,開發(fā)一款微信群發(fā)工具就顯得格外重要。本文將介紹如何使用PHP開發(fā)微信群發(fā)工具。一、準備工作開發(fā)微信群發(fā)工具,我們需要掌握以下幾個技術點:PHP基礎知識微信公眾平臺開發(fā)開發(fā)工具:Sub

PHP微信開發(fā):如何實現(xiàn)客服聊天視窗管理 PHP微信開發(fā):如何實現(xiàn)客服聊天視窗管理 May 13, 2023 pm 05:51 PM

微信是目前全球用戶規(guī)模最大的社群平臺之一,隨著行動網(wǎng)路的普及,越來越多的企業(yè)開始意識到微信行銷的重要性。在進行微信行銷時,客服服務是至關重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以藉助PHP語言進行微信開發(fā)。一、PHP微信開發(fā)簡介PHP是一種開源的伺服器端腳本語言,廣泛用於Web開發(fā)領域。結合微信公眾平臺提供的開發(fā)接口,我們可以使用PHP語言進行微信

PHP微信開發(fā):如何實現(xiàn)使用者標籤管理 PHP微信開發(fā):如何實現(xiàn)使用者標籤管理 May 13, 2023 pm 04:31 PM

在微信公眾號開發(fā)中,使用者標籤管理是一個非常重要的功能,可以讓開發(fā)者更了解和管理自己的使用者。本篇文章將介紹如何使用PHP實作微信使用者標籤管理功能。一、取得微信用戶openid在使用微信用戶標籤管理功能之前,我們首先需要取得用戶的openid。在微信公眾號開發(fā)中,透過使用者授權的方式取得openid是比較常見的做法。在使用者授權完成後,我們可以透過以下程式碼取得用

PHP微信開發(fā):如何實作群發(fā)訊息傳送記錄 PHP微信開發(fā):如何實作群發(fā)訊息傳送記錄 May 13, 2023 pm 04:31 PM

隨著微信成為了人們生活中越來越重要的通訊工具,其敏捷的訊息傳遞功能迅速受到廣大企業(yè)和個人的青睞。對企業(yè)而言,將微信發(fā)展為一個行銷平臺已經(jīng)成為趨勢,而微信開發(fā)的重要性也逐漸凸顯。在其中,群發(fā)功能更是被廣泛使用,那麼,作為PHP程式設計師,如何實現(xiàn)群發(fā)訊息發(fā)送記錄呢?以下將為大家簡單介紹一下。 1.了解微信公眾號相關開發(fā)知識在了解如何實現(xiàn)群發(fā)訊息發(fā)送記錄之前,我

使用PHP實現(xiàn)微信公眾號開發(fā)的步驟 使用PHP實現(xiàn)微信公眾號開發(fā)的步驟 Jun 27, 2023 pm 12:26 PM

如何使用PHP實現(xiàn)微信公眾號開發(fā)微信公眾號已經(jīng)成為了許多企業(yè)推廣和互動的重要管道,而PHP作為常用的Web語言,也可以用來進行微信公眾號的開發(fā)。本文將介紹使用PHP實現(xiàn)微信公眾號開發(fā)的具體步驟。第一步:取得微信公眾號的開發(fā)者帳號在開始微信公眾號開發(fā)之前,需要先去申請一個微信公眾號的開發(fā)者帳號。具體的註冊流程可參考微信公眾平臺的官方網(wǎng)

如何使用PHP進行微信開發(fā)? 如何使用PHP進行微信開發(fā)? May 21, 2023 am 08:37 AM

隨著網(wǎng)路和行動智慧型裝置的發(fā)展,微信成為了社交和行銷領域不可或缺的一部分。在這個越來越數(shù)位化的時代,如何使用PHP進行微信開發(fā)已經(jīng)成為了許多開發(fā)者的關注點。本文主要介紹如何使用PHP進行微信發(fā)展的相關知識點,以及其中的一些技巧和注意事項。一、開發(fā)環(huán)境準備在進行微信開發(fā)之前,首先需要準備好對應的開發(fā)環(huán)境。具體來說,需要安裝PHP的運作環(huán)境,以及微信公眾平臺提

See all articles