一、開發前的准備
1、打開網址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
2、微信公眾平台測試號系統測試號申請,登錄進去,配置相關信息。
3、①接口配置信息:url設置,Token設置;②js接口安全域名:域名設置;③體驗接口權限表:網頁服務:網頁賬號:授權回調頁面域名設置。
4、掃描測試號二維號,關注自己的測試公眾號。
5、記住自己的測試號信息:appID,appsecret。要復制到項目中。
6、使用公司的ngrok,啟動,把本地url(127.0.0.1:8080)映射到測試號的接口配置url。(就是把項目映射到外網,然后要和3①接口配置的url一致)
7、下載項目開發工具-->微信web開發者工具,用於頁面調試,當然,用別的工具也可以,只不過是缺少了一些微信專屬的功能罷了。
二、項目的配置
1、一般來講,微信項目不做功能,微信項目的背后總會有一個很大的后台項目默默支持着。因此,微信開發需要兩個項目。微信開發相當於是寄生在后台大項目下的小項目。
2、由公司大牛們創建svn地址(一般公司的svn地址的管理維護都在高層手中,然后給我們這些小學生分配權限)
3、復制現有的能滿足項目大部分需求的項目,粘貼過來,兩個項目都這樣。(節省環境配置,項目搭建和基礎功能開發等所耗的時間,沒有得復制就只能從頭開發了)
4、刪除大部分不需要的文件和代碼(甚至可以把所有不是框架的代碼都干掉)(有能滿足項目需求的代碼和公共類的代碼留下)
5、項目用的是ssh框架,干掉代碼后,開始后台項目的開發(數據庫,po,dao,service,action),簡單的創建文件,讓項目能跑起來。
6、微信開發,同樣的刪舊項目代碼,然后開發。
7、配置文件:WeixinConfig extends JFinalConfig。這塊我不會,主要代碼是: PropKit.use("dev.txt");
8、dev.txt,就是配置信息文件,名字不重要,可以隨意起名,跟WeixinConfig 匹配上就行。下面上圖:(#表示注釋)(因為有上傳文件的需求,所以接入了和后台項目配置一樣的mongo數據庫)
9、對於所需要引入的jar包,自己在pom.xml文件上修改,一般公司的maven庫中都有。
10、一般項目都有一個Controller,繼承於jfinal中的ApiController,實現很多公眾號功能,比如:(這些是原項目有的功能,我就只改了個創建菜單的菜單名稱和鏈接)(很多功能在jfinal-weixin-1.7.jar都有)
獲取公眾號菜單,創建菜單,獲取公眾號關注用戶,獲取用戶信息,發送模板消息,獲取參數二維碼,獲取客服聊天記錄,獲取微信服務器IP地址,添加多客服,長鏈接轉成短鏈接,支持多公眾賬號
三、項目的開發
1、微信項目用的Jfinal,這個我不懂。開發的思路:如果我沒猜錯,這應該是個訂閱號,因為並沒有什么亂七八糟的功能,基本上是信息展示。
2、開發的思路①,用一個Controller來做所有頁面的跳轉(分開用幾個也行,主要是我的項目小)。我將它命名為HomeLinkController.java,雖然我也覺得這個命名有點傻,但是就將就着用吧。
1 /** 2 * 功能: 微信--xxx項目--微官網--所有鏈接.<br/> 3 * date: 2017年6月29日 上午11:24:34 <br/> 4 * 5 * @author @xxx.com 6 * @version 7 * @since JDK 1.8 8 */ 9 @ControllerBind(controllerKey = "/home-link", viewPath = "/WEB-INF/jsp/first-skin") 10 public class HomeLinkController extends Controller { 11 12 public void index() { 13 renderJsp("portal/index.jsp"); 14 } 15 16 public void toNews() { 17 renderJsp("portal/news/page.jsp"); 18 } 19 //…… 20 }
3、開發的思路②,用一個Controller來做所有ajax請求的接收和發送。
1 /** 2 * 功能: 微信--xxx項目--微官網.<br/> 3 * date: 2017年6月29日 上午11:24:34 <br/> 4 * companyDetail 5 * 6 * @author xxx@xxx.com 7 * @version 8 * @since JDK 1.8 9 */ 10 @ControllerBind(controllerKey = "/home-ajax", viewPath = "/WEB-INF/jsp/first-skin") 11 public class HomeAjaxController extends WebApiController { 12 13 /** 14 * 輪播圖 15 */ 16 public void swiper() { 17 currUrl = "/home-news-pic-api!page"; 18 commonOper(); 19 } 20 21 /** 22 * 新聞列表 23 */ 24 public void newsList() { 25 currUrl = "/home-information-release-api!page"; 26 commonOper(); 27 } 28 //…… 29 }
4、在繼承的公共類里面寫點代碼:
1 /** 2 * 功能: 具體操作由 currUrl 決定<br/> 3 * date: 2017年9月16日 下午7:53:18 <br/> 4 *把參數全都扔給后台項目的接口 5 * @author zhaijunfeng 6 */ 7 public void commonOper() { 8 paraMap = genParaMap(); 9 putOtherInfo(paraMap); 10 String jsonResult = HttpHelper.post(this.currUrl, paraMap); 11 renderJson(jsonResult); 12 } 13 14 /** 15 * 功能: 獲取 (String, String>)類型約束的request.getParameterMap() 16 * ,其主要目的是把參數發給服務器,不作處理,如須處理,請重寫<br/> 17 * date: 2017年9月16日 下午7:27:46 <br/> 18 * 19 * @author xxx 20 * @return 21 */ 22 protected Map<String, String> genParaMap() { 23 Map<String, String> map = Maps.newHashMap(); 24 Map<String, String[]> reMap = getParaMap(); 25 for (String key : reMap.keySet()) { 26 map.put(key, StringUtils.join(reMap.get(key), ",")); 27 } 28 return map; 29 }
5、引入工具類HttpHelper.java,調用了JFinal中的HttpKit.class,實現了后台項目的接口請求,強調了json格式,Constants.MEN_HU就是dev.txt中門戶地址(我寫錯了,應該是后台地址)下面那句.
1 public class HttpHelper { 2 private static String CHARSET = "UTF-8"; 3 4 public static String post(String method, Map<String, String> parm) { 5 String json = HttpKit.post(Constants.MEN_HU + method, parm, "", Constants.header); 6 return json; 7 } 8 //…… 9 }
6、后台項目的action層,新建一個包,專門放置微信的接口,包里的所有action完全對外開放(微信公眾號不需要注冊功能嘛,所以把攔截器干掉)
1 /** 2 * 功能: 信息發布管理<br/> 3 * date: 2017-4-8 11:50:08 <br/> 4 * 5 * @author robot 6 * @version 7 * @since JDK 1.8 8 */ 9 @Scope("prototype") 10 @ParentPackage(value = "struts-default") //就是這個,之前是struts-default-authority,至於是在哪設置的我就不知道了,攔截器我不會 11 @Namespace(value = "/") 12 @Results({ 13 @Result(name = "toAddOrUpdate", location = "/WEB-INF/jsp/gateway-menu-manage/home-information-release/create.jsp"), 14 @Result(name = "toPage", location = "/WEB-INF/jsp/gateway-menu-manage/home-information-release/page.jsp") }) 15 public class HomeInformationReleaseApiAction extends AbstractCrudAction<HomeInformationRelease> { 16 //…… 17 }
7、前后台開發者之間開會,需求分析,討論商量,約定接口(都是我來干,所以我就不用開會了)
8、后台項目開發者寫后台功能,微信前端開發者寫前端頁面(這些跟微信就沒啥關系了,原來的后台java怎么寫就怎么寫,原來的移動端web開發怎么寫就怎么寫)
9、特殊功能開發,可能跟微信有關,在這里就不詳細說明了。可通過瀏覽我別的學習微信開發的文章了解。
10、完成項目,收工。