學習之路--微信公眾號開發(一)


一、開發前的准備

  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、完成項目,收工。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM