学习之路--微信公众号开发(一)

时间:2022-12-23 00:06:42

一、开发前的准备

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