摘要:時(shí)間年月日星期五說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。本套課程介紹微信公眾號(hào)開(kāi)發(fā),主要涉及公眾號(hào)介紹編輯模式介紹開(kāi)發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費(fèi)學(xué)習(xí)網(wǎng)站。
時(shí)間:2017年08月11日星期五
說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學(xué)源碼:https://github.com/zccodere/s...
學(xué)習(xí)源碼:https://github.com/zccodere/s...
面向人群
對(duì)微信公眾號(hào)開(kāi)發(fā)感興趣 有一定Java開(kāi)發(fā)經(jīng)驗(yàn)或基礎(chǔ)
課程介紹
介紹本套課程學(xué)習(xí)內(nèi)容、開(kāi)發(fā)語(yǔ)言等 微信公眾號(hào)介紹、申請(qǐng)以及后臺(tái)設(shè)置詳解 編輯模式下的消息回復(fù)、菜單建立、素材管理等 開(kāi)發(fā)前的環(huán)境搭建以及工具準(zhǔn)備 開(kāi)發(fā)者模式的切換、設(shè)置以及消息的接收與響應(yīng) 百度BEA服務(wù)器的搭建、代碼上傳第二章:公眾號(hào)介紹 2-1 公眾號(hào)與微信的區(qū)別
公眾號(hào)與微信區(qū)別
2-2 公眾號(hào)類(lèi)型介紹公眾號(hào)類(lèi)型介紹
最新公眾號(hào)類(lèi)型
企業(yè)號(hào)與服務(wù)號(hào)、訂閱號(hào)的區(qū)別
2-3 公眾號(hào)申請(qǐng)公眾號(hào)申請(qǐng)
微信公眾平臺(tái):https://mp.weixin.qq.com/2-4 微信公眾平臺(tái)
微信公眾平臺(tái)介紹
微信公眾平臺(tái)是騰訊為了讓用戶申請(qǐng)和管理微信公眾賬號(hào)而推出的一個(gè)WEB平臺(tái)第三章:編輯模式介紹 3-1 自動(dòng)回復(fù)
本章內(nèi)容
在編輯模式下實(shí)現(xiàn)消息自動(dòng)回復(fù)、菜單創(chuàng)建;以及在微信公眾號(hào)平臺(tái)推送消息給關(guān)注用戶。3-2 素材管理
單圖文與多圖文
3-3 自定義菜單自定義菜單有兩種類(lèi)型
發(fā)送信息:click類(lèi)型 跳轉(zhuǎn)到網(wǎng)頁(yè):view類(lèi)型第四章:開(kāi)發(fā)環(huán)境搭建 4-1 環(huán)境準(zhǔn)備
開(kāi)發(fā)環(huán)境準(zhǔn)備
1.一個(gè)微信公眾號(hào) 2.外網(wǎng)映射工具(開(kāi)發(fā)調(diào)試) 與微信對(duì)接的url要具備以下條件: --在公網(wǎng)上能夠訪問(wèn) --端口只支持80端口
映射工具
ngrok可以將內(nèi)網(wǎng)映射到公網(wǎng)上面,這樣就可以在公網(wǎng)訪問(wèn)你的本地網(wǎng)絡(luò)服務(wù)
ngrok用法
1.下載ngrok.xex可執(zhí)行程序,然后在DOS輸入以下命令 2.ngrok http 8080 3.ngrok –config ngrok.cfg –subdomain example 8080 幫助文檔:https://natapp.cn/第五章:開(kāi)發(fā)者模式介紹 5-1 數(shù)據(jù)交互原理
開(kāi)發(fā)模式
數(shù)據(jù)交互原理
5-2 開(kāi)發(fā)模式接入接入指南
地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
項(xiàng)目搭建
創(chuàng)建一個(gè)名為wxdevaccess的maven項(xiàng)目,POM文件如下
4.0.0 com.myimooc wxdevaccess 0.0.1-SNAPSHOT jar wxdevaccess http://maven.apache.org org.springframework.boot spring-boot-starter-parent 1.5.1.RELEASE UTF-8 UTF-8 org.springframework.boot spring-boot-starter-web commons-codec commons-codec org.apache.maven.plugins maven-compiler-plugin 1.8
說(shuō)明:由于條件限制,此項(xiàng)目代碼均沒(méi)有進(jìn)行測(cè)試,這里只是顯示大概開(kāi)發(fā)過(guò)程。
代碼演示:
1.編寫(xiě)AccressReqVo類(lèi)
package com.myimooc.wxdevaccess.domain; /** * 服務(wù)器驗(yàn)證請(qǐng)求Vo * @author ZhangCheng on 2017-08-11 * */ public class AccressReqVo { private String signature; private String timestamp; private String nonce; private String echostr; @Override public String toString() { return "AccressReqVo [signature=" + signature + ", timestamp=" + timestamp + ", nonce=" + nonce + ", echostr=" + echostr + "]"; } public String getSignature() { return signature; } public void setSignature(String signature) { this.signature = signature; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getNonce() { return nonce; } public void setNonce(String nonce) { this.nonce = nonce; } public String getEchostr() { return echostr; } public void setEchostr(String echostr) { this.echostr = echostr; } }
2.編寫(xiě)AccessRest類(lèi)
package com.myimooc.wxdevaccess.rest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.myimooc.wxdevaccess.domain.AccressReqVo; import com.myimooc.wxdevaccess.util.CheckUtils; /** * 開(kāi)發(fā)模式接入 * @author ZhangCheng on 2017-08-11 * */ @RestController public class AccessRest { /** * 接收微信服務(wù)器發(fā)送的GET驗(yàn)證請(qǐng)求 */ @GetMapping("wx") public String access(AccressReqVo vo){ if(CheckUtils.checkSignature(vo)){ return vo.getEchostr(); } return "error"; } }
3.編寫(xiě)CheckUtils類(lèi)
package com.myimooc.wxdevaccess.util; import java.security.MessageDigest; import java.util.Arrays; import java.util.Objects; import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.myimooc.wxdevaccess.domain.AccressReqVo; /** * 開(kāi)發(fā)模式接入-服務(wù)器驗(yàn)證-校驗(yàn)工具類(lèi) * @author ZhangCheng on 2017-08-11 * */ public class CheckUtils { private static final Logger logger = LoggerFactory.getLogger(CheckUtils.class); /** * 開(kāi)發(fā)者模式-開(kāi)發(fā)者自己填寫(xiě)的 token (令牌) */ private static final String token = "myimooc"; /** * 功能:驗(yàn)證消息的確來(lái)自微信服務(wù)器 */ public static boolean checkSignature(AccressReqVo vo){ logger.info("驗(yàn)證:{}",vo.toString()); String[] arr = new String[]{token,vo.getTimestamp(),vo.getNonce()}; // 排序 Arrays.sort(arr); // 生成字符串 StringBuffer content = new StringBuffer(); for ( int i=0;i5-3 接收消息與響應(yīng) 消息類(lèi)型
文本消息:text 圖片消息:image 語(yǔ)音消息:voice 視頻消息:video 鏈接消息:link 地理位置:location 事件推送:event --關(guān)注:subscribe --取消關(guān)注:unsubscribe --菜單點(diǎn)擊:CLICK、VIEW代碼演示:
1.編寫(xiě)TextMessage類(lèi)
package com.myimooc.wxdevaccess.domain; /** * 文本消息-向微信接口發(fā)起請(qǐng)求Vo * @author ZhangCheng on 2017-08-11 * */ public class TextMessage { private String ToUserName; private String FromUserName; private Long CreateTime; private String MsgType; private String Content; private String MsgId; @Override public String toString() { return "TextMessage [ToUserName=" + ToUserName + ", FromUserName=" + FromUserName + ", CreateTime=" + CreateTime + ", MsgType=" + MsgType + ", Content=" + Content + ", MsgId=" + MsgId + "]"; } public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public Long getCreateTime() { return CreateTime; } public void setCreateTime(Long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public String getContent() { return Content; } public void setContent(String content) { Content = content; } public String getMsgId() { return MsgId; } public void setMsgId(String msgId) { MsgId = msgId; } }2.編寫(xiě)EventMessage類(lèi)
package com.myimooc.wxdevaccess.domain; /** * 事件推送-向微信接口發(fā)起請(qǐng)求Vo * @author ZhangCheng on 2017-08-11 * */ public class EventMessage { private String ToUserName; private String FromUserName; private Long CreateTime; private String MsgType; private String Event; @Override public String toString() { return "EventMessage [ToUserName=" + ToUserName + ", FromUserName=" + FromUserName + ", CreateTime=" + CreateTime + ", MsgType=" + MsgType + ", Event=" + Event + "]"; } public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public Long getCreateTime() { return CreateTime; } public void setCreateTime(Long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public String getEvent() { return Event; } public void setEvent(String event) { Event = event; } }3.編寫(xiě)MessageUtils類(lèi)
package com.myimooc.wxdevaccess.util; import java.util.Date; import com.myimooc.wxdevaccess.domain.TextMessage; /** * 消息類(lèi)型及工具類(lèi) * @author ZhangCheng on 2017-08-11 * */ public class MessageUtils { public static final String MESSAGE_TEXT = "text"; public static final String MESSAGE_IMAGE = "image"; public static final String MESSAGE_VOICE = "voice"; public static final String MESSAGE_VIDEO = "video"; public static final String MESSAGE_LINK = "link"; public static final String MESSAGE_LOCATION = "location"; public static final String MESSAGE_EVENT = "event"; public static final String MESSAGE_SUBSCRIBE = "subscribe"; public static final String MESSAGE_UNSUBSCRIBE = "unsubscribe"; public static final String MESSAGE_CLICK = "CLICK"; public static final String MESSAGE_VIEW = "VIEW"; public static TextMessage initText(String toUserName,String fromUserName,String content){ TextMessage text = new TextMessage(); text.setFromUserName(toUserName); text.setToUserName(fromUserName); text.setMsgType(MessageUtils.MESSAGE_TEXT); text.setCreateTime(new Date().getTime()); text.setContent(content); return text; } /** * 主菜單 */ public static String menuText(){ StringBuffer sb = new StringBuffer(); sb.append("歡迎您的關(guān)注,請(qǐng)按照菜單提升進(jìn)行操作: "); sb.append("1、課程介紹 "); sb.append("2、慕課網(wǎng)介紹 "); sb.append("回復(fù)?調(diào)出此菜單。"); return sb.toString(); } public static String firstMenu(){ StringBuffer sb = new StringBuffer(); sb.append("本套課程介紹微信公眾號(hào)開(kāi)發(fā),主要涉及公眾號(hào)介紹、編輯模式介紹、開(kāi)發(fā)模式介紹等。"); return sb.toString(); } public static String secondMenu(){ StringBuffer sb = new StringBuffer(); sb.append("慕課網(wǎng)是垂直的互聯(lián)網(wǎng)IT技能免費(fèi)學(xué)習(xí)網(wǎng)站。以獨(dú)家視頻教程、在線編程工具、學(xué)習(xí)計(jì)劃、" + "問(wèn)答社區(qū)為核心特色。在這里,你可以找到最好的互聯(lián)網(wǎng)技術(shù)牛人,也可以通過(guò)免費(fèi)的在線公" + "開(kāi)視頻課程學(xué)習(xí)國(guó)內(nèi)領(lǐng)先的互聯(lián)網(wǎng)IT技術(shù)。" + "慕課網(wǎng)課程涵蓋前端開(kāi)發(fā)、PHP、Html5、Android、iOS、Swift等IT前沿技術(shù)語(yǔ)言," + "包括基礎(chǔ)課程、實(shí)用案例、高級(jí)分享三大類(lèi)型,適合不同階段的學(xué)習(xí)人群。" + "以純干貨、短視頻的形式為平臺(tái)特點(diǎn),為在校學(xué)生、職場(chǎng)白領(lǐng)提供了一個(gè)迅速提升技能、共同分享進(jìn)步的學(xué)習(xí)平臺(tái)。"); return sb.toString(); } }4.編寫(xiě)MessageRest類(lèi)
package com.myimooc.wxdevaccess.rest; import java.util.Date; import java.util.Objects; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import com.myimooc.wxdevaccess.domain.EventMessage; import com.myimooc.wxdevaccess.domain.TextMessage; import com.myimooc.wxdevaccess.util.MessageUtils; /** * 處理消息請(qǐng)求與響應(yīng) * @author ZhangCheng on 2017-08-11 * */ @RestController public class MessageRest { /** * 接收微信服務(wù)器發(fā)送的POST請(qǐng)求 */ @PostMapping("textmessage") public Object textmessage(TextMessage msg){ // 文本消息 if(Objects.equals(MessageUtils.MESSAGE_TEXT, msg.getMsgType())){ TextMessage textMessage = new TextMessage(); // 關(guān)鍵字 1 if(Objects.equals("1", msg.getContent())){ textMessage = MessageUtils.initText(msg.getToUserName(), msg.getFromUserName(), MessageUtils.firstMenu()); return textMessage; } // 關(guān)鍵字 2 if(Objects.equals("2", msg.getContent())){ textMessage = MessageUtils.initText(msg.getToUserName(), msg.getFromUserName(), MessageUtils.secondMenu()); return textMessage; } // 關(guān)鍵字 ?? 調(diào)出菜單 if(Objects.equals("?", msg.getContent()) || Objects.equals("?", msg.getContent())){ textMessage = MessageUtils.initText(msg.getToUserName(), msg.getFromUserName(), MessageUtils.menuText()); return textMessage; } // 非關(guān)鍵字 textMessage.setFromUserName(msg.getToUserName()); textMessage.setToUserName(msg.getFromUserName()); textMessage.setMsgType(MessageUtils.MESSAGE_TEXT); textMessage.setCreateTime(new Date().getTime()); textMessage.setContent("您發(fā)送的消息是:" + msg.getContent()); return textMessage; } return null; } /** * 接收微信服務(wù)器發(fā)送的POST請(qǐng)求 */ @PostMapping("eventmessage") public Object eventmessage(EventMessage msg){ // 事件推送 if(Objects.equals(MessageUtils.MESSAGE_EVENT, msg.getMsgType())){ // 關(guān)注 if(Objects.equals(MessageUtils.MESSAGE_SUBSCRIBE, msg.getEvent())){ TextMessage text = new TextMessage(); text = MessageUtils.initText(msg.getToUserName(), msg.getFromUserName(), MessageUtils.menuText()); return text; } } return null; } }第六章:百度BAE的使用 6-1 百度BAE的使用百度BAE介紹
百度應(yīng)用引擎(BAE)是百度推出的網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)平臺(tái),開(kāi)發(fā)者不需要進(jìn)行服務(wù)器的維護(hù)、設(shè)置等繁瑣的操作,只需要簡(jiǎn)單的上傳自己的應(yīng)用即可在網(wǎng)絡(luò)上訪問(wèn)。百度開(kāi)放服務(wù)平臺(tái)
地址:http://developer.baidu.com/ 搜索BAE(應(yīng)用引擎) 地址:https://cloud.baidu.com/product/bae.html 使用BAE部署項(xiàng)目war包
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67601.html
摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。第六章公眾號(hào)與開(kāi)發(fā)平臺(tái)關(guān)聯(lián)公眾號(hào)與開(kāi)放平臺(tái)關(guān)聯(lián)情景說(shuō)明當(dāng)使用端進(jìn)行微信授權(quán)登錄時(shí),得到的和公眾號(hào)授權(quán)登錄時(shí)得到的不一樣。 時(shí)間:2017年08月12日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹...
摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。慕課網(wǎng)教學(xué)源碼學(xué)習(xí)源碼第一章概述課程簡(jiǎn)介本課程是在之前的初識(shí)微信公眾號(hào)開(kāi)發(fā)課程基礎(chǔ)之上的。慕課網(wǎng)課程涵蓋前端開(kāi)發(fā)等前沿技術(shù)語(yǔ)言,包括基礎(chǔ)課程實(shí)用案例高級(jí)分享三大類(lèi)型,適合不同階段的學(xué)習(xí)人群。 時(shí)間:2017年08月12日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:http://img.m...
摘要:因?yàn)槟承┰?,不方便在這里直接發(fā)送百度鏈接,關(guān)注我的微信公眾號(hào)面試通關(guān)手冊(cè)回復(fù)資源分享第一波即可領(lǐng)取。然后大家還有什么問(wèn)題的話,可以在我的微信公眾號(hào)后臺(tái)面試通關(guān)手冊(cè)給我說(shuō)或者加我微信,我會(huì)根據(jù)自己的學(xué)習(xí)經(jīng)驗(yàn)給了說(shuō)一下自己的看法。 這是一篇針對(duì)Java初學(xué)者,或者說(shuō)在Java學(xué)習(xí)路線上出了一些問(wèn)題(不知道該學(xué)什么、不知道整體的學(xué)習(xí)路線是什么樣的) 第一步:Java基礎(chǔ)(一個(gè)月左右) 推薦...
摘要:沒(méi)有耐心閱讀的同學(xué),可以直接前往學(xué)習(xí)全棧最后一公里。我下面會(huì)羅列一些,我自己錄制過(guò)的一些項(xiàng)目,或者其他的我覺(jué)得可以按照這個(gè)路線繼續(xù)深入學(xué)習(xí)的項(xiàng)目資源。 showImg(https://segmentfault.com/img/bVMlke?w=833&h=410); 本文技術(shù)軟文,閱讀需謹(jǐn)慎,長(zhǎng)約 7000 字,通讀需 5 分鐘 大家好,我是 Scott,本文通過(guò)提供給大家學(xué)習(xí)的方法,...
閱讀 2482·2021-10-12 10:11
閱讀 1233·2021-10-11 10:58
閱讀 3275·2019-08-30 15:54
閱讀 713·2019-08-30 13:59
閱讀 681·2019-08-29 13:07
閱讀 1409·2019-08-26 11:55
閱讀 2144·2019-08-26 10:44
閱讀 2644·2019-08-23 18:25