1 | 目录 |
本篇主要记录开发公众号时搜集到的一些案例,开发过程,以及开发中遇到的问题及解决方式。
微信公众号,分为 订阅号、服务号、企业号,之间的区别,以下来自官方:
1 | 1、订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息; |
具体区别说明,见官方说明。
其中订阅号是不用写代码开发的,只是微信公众平台后台的一些配置,这是大部分公众号的使用形式,实际上也够用了,每天发发文章。而服务号需要利用微信提供的接口进行二次开发,其实就是将网页嵌入到微信公众号中。
话不多说,直接上开发过程。
1. 调研阶段
因为要在微信公众号做一些业务,所以只能采用服务号的形式,需要开发,否则可以申请个订阅号解决问题。
在确定这个方案之后,开始咨询做过这方面的同学,搜索引擎查询。
当然,做一个技术选型,市场调研时,最关键的最直接的还是访问官方,微信公众平台。
当时也考虑用第三方做,如微擎,开源地址。最后否决了,不建议,因为不可控。
1.1 一般开发步骤
1.填写服务器配置
- 购买服务器,搭建服务;
服务器:腾讯云、阿里云或其他服务器;
搭建服务:例子是Python Web。
找到几个Java的开源项目,见下方。
- 申请公众号(服务号需要证件、资料) 多少天?钱?
2.验证服务器地址有效性
3.依据接口文档实现业务逻辑
接口权限根据认证与否有差别。
接口调用频次,每个帐号每月共10次清零操作机会。
1.2 GitHub参考项目
- weixin-java-mp-demo 微信公众号demo,使用weixin-java-tools,基于Spring MVC框架
- weixin-java-tools 微信支付、开放平台、小程序、企业号和公众号(包括服务号和订阅号) Java SDK开发工具包
- weixin-popular 微信SDK JAVA (公众平台、开放平台、 商户平台、 服务商平台)
1.3 需客户协助公众号申请
企业资质才可申请的微信公众号-服务号。
必须经过认证,未认证的公众号许多接口不开放,功能配置也无法完成。
2. 开发&测试
2.1 微信账号信息
APPID = wxbaasdasdff1d0bae6
APPSECRET = 4cbb8dasdff7d8c104a922acef0b7
TtMsR8sMx4yOYeMNPraocqKovYlUSuKWBSuakbRe5LQ
http://0f80dce6.ngrok.io/wechat/portal
2.2 测试服务器
192.168.1.1 root
域名:wechat.company-name.com(必须有域名,测试可用ngrok等工具实现内网穿透)
2.3 测试号
- appID:wx41asdfasdf3fc29
- appsecret:582a656aaae8387ff46bac7c58580e8d
2.4 用本机当外网服务器
运行 ngrok 8080(ngrok是一个让外网访问本机的工具)
运行ngrok后会出现类似下面的信息:
1 | Tunnel Status online |
以后访问 http://1bf992b1.ngrok.com 就等于访问 http://localhost:8080。
2.5 接口测试
获取access_token
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
- 如:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxbaadasdf481d0bae6&secret=4cbb8d7fe225297d8c104a922acef0b7
- 返回:{“access_token”:”YkLkXErasdffadk3nSHI1OAkxefvCb_k-nhYPfkvW6aT1CegobzHg7N8l1ag5fDOK8INSXmxVaJOfGj7kCTbuhKtOk9D8ofKcshh9UIgXVZK7p-9KfaUjQAWmGDVXUgAAAOQN”,”expires_in”:7200}
3. 部署及系统配置、部分代码
3.1 微信公众号服务系统
3.1.1 部署步骤
A. 当新版本改动较大时,建议直接全量更新,步骤如下
- 1.用FileZilla等工具传输war包到服务器
/../apache-tomcat-7.0.82/webapps/wechat.xxx.com/
路径下,修改war包名为ROOT.war
; - 2.ps -ef|grep tomcat查看tomcat服务进程,kill -9 progressNum杀死进程;或使用
/../apache-tomcat-7.0.82/bin/shutdown.sh
命令杀死该服务; - 3.修改webapps/projectname/WEB_INf/classes目录下的db.properties文件的服务器地址和账号密码,修改;
- 4.修改webapps/projectname/WEB_INf/classes目录下的wx.properties文件的微信开发账号信息;
- 5.
/../apache-tomcat-7.0.82/bin/startup.sh
命令 重启tomcat。
B. 当只有部分业务更改,涉及到class文件更新,则可采用替换单个文件的方式,然后按照A中的方式重启服务。
C. 当只有前端页面更改,则可直接替换jsp文件的方式,无需重启服务。
- 访问方式
微信公众号 搜索 公众号名称
3.2 公众号平台管理
3.2.1 公众号信息
1 | - 注册人:xxx |
3.2.2 wx.properties配置信息
先登录公众号平台,进行配置:网页帐号,网页授权获取用户基本信息。这一项需要设置域名。
1 | # 正式帐号 gh_123fe421235c |
WeChat openId 的获取方法见附录 4.2.
3.2.3 模板设置
排序 | 模板id | 对象 | 模板标题 | 模板内容 |
---|---|---|---|---|
1 | 8jkcCo8u0OSasdffdsb9PYzatk2TtsFflC-XhBXUg | 申请提交,通知管理员 | 申请通知 | 申请从 进入园区。请尽快审核! |
2 | KLmQ_CBKiJqsadfge94R6qAasffJnNHnmJT6Lqxev7_i0 | 审核提交,同时通知提交人 | 申请成功,等候审核 | 您的申请已提交给管理员审核,通过之后会在微信通知您。 |
3 | x2ouup403Masdfgo0o9Ey5pQ5hoXMRYasfaasdWDrhFEXW-sRk | 审核通过,通知申请人 | 车辆入园审核通过 | 申请从 进入园区。已由管理员审核通过! |
请使用管理员微信号登录公众号管理平台,设置消息模板。
模板申请 通过需要 1-3个工作日。
1.给管理员的申请
标题:申请通知
模板:
1 | {{first.DATA}} |
2.给申请人的提醒
标题:申请成功,等候审核
模板:
1 | {{first.DATA}} |
3.通过,给申请人
标题:车辆入园审核通过
模板:
1 | {{first.DATA}} |
3.2.4 公众号菜单地址配置
1 | # 车辆入园申请 url |
注意:需确保该服务器访问公网的权限放开,因为需要请求微信的api。
1 | org.apache.http.conn.ConnectTimeoutException: Connect to api.weixin.qq.com:443 [api.weixin.qq.com/110.214.11.192, api.weixin.qq.com/110.214.0.121] failed: Connection timed out |
解决方式
Linux 虚拟机 服务器 放行,使其可访问公网。
服务器可被外网访问和服务器可访问外网是两个概念。
3.2.5 公众号网页账号授权域名配置
登录微信公众平台,进入公众号设置
-功能设置
-网页授权域名
,填写域名,注意需要先将MP_verify_RC1aoToVCFF3stcz.txt
文件放置到ROOT目录下,否则会出现下面错误:
1 | "GET /MP_verify_RC1aoToVCFF3stcz.txt HTTP/1.0" 404 1011 |
3.3 微信公众号 关注着 openId 获取工具类 WeChatOpenIdUtils.java
1 | package com.xxx.utils; |
3.4 给公众号关注者微信发送通知
1 | /** |
4. Problems
本节记录开发过程中遇到的问题。包括但不限于编码问题。
4.1 微信获取openId,跳转链接错误
可能原因分析
- 微信跳转机制?
- 服务器配置错误?
- 微信公众平台网页授权域名配置错误?
- 基本配置里,ip白名单配置错了,成了局域网ip?公网ip啊
发现错误:
1 | org.apache.http.conn.ConnectTimeoutException: Connect to api.weixin.qq.com:443 [api.weixin.qq.com/120.204.11.196, api.weixin.qq.com/120.204.0.120] failed: Connection timed out |
- 尝试措施
|序号|措施|结果|备注|
|:-:|:-:|:-:|:-:|:-:|
|1|通过另一个页面,用js跳转|失败||
|2|直接将微信公众号主页菜单,配置为open链接|失败|||
- 最终解决方式
Linux 虚拟机 服务器 放行,使其可访问公网。
服务器可被外网访问和服务器可访问外网是两个概念。
收获:
1.log日志相当重要。尤其是涉及到网络、IO
2.Linux操作不熟练
3.网络知识匮乏
4.2 ajax request HTTP status 400
服务器返回400错误。
原因:form表单提交的字段名称与后端接收的model类型中字段 数据类型 不一致。
解决方式:form表单中字段用model类型的字段;保证类型一致,尤其是long和string。
4.3 db.properties 中 jdbc.username 和 jdbc.password设反
注意反了,难找到。
4.4 ModelAndView setview 页面不跳转,刷新后才跳转
Ajax请求不能用ModelAndView返回。
4.5 Can’t find bundle for base name system, locale zh_CN
1 | private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("system"); |
引入 system.property 文件
4.6 com.mysql.jdbc.driver
注意引入 mysql-connect..jar
4.7 BeanNotOfRequiredTypeException… but was actually of type com.sun.proxy.$Proxy**
- 解决方法
1 | <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式) --> |
- 参考
http://blog.csdn.net/CSDN___LYY/article/details/76687588
- 错误信息:
1 | Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'weixinService' is expected to be of type [com.xxx.service.WeixinService] but was actually of type [com.sun.proxy.$Proxy23] |
4.8 At least one base package must be specified
- 原因
某些 service、controller、mapper、handler、config未扫描到。
- 解决方法
1.检查 web.xml contextConfigLocation 两处配置
1 | # 引入需要 SpringMVC 扫描的xml文件 |
- 检查修改项目结构,加入扫描路径。
1 | <!-- 自动扫描(自动注入) --> |
- 错误信息如下
1 | [ERROR] 2018-01-18 18:43:37,924 [RMI TCP Connection(3)-127.0.0.1]:org.springframework.web.context.ContextLoader:351#initWebApplicationContext() Context initialization failed |
4.9 redirect 和 forward运用
1 | # forward 绝对路径 |
4.10 微信公众号子菜单url size超限
1 | me.chanjar.weixin.common.exception.WxErrorException: |
网友评论:
1 | 1. 微信服务器老爱抽风。 |
参考链接:
发现问题:
1 | 我将 button23.setUrl(baseUrl + "frame"); |
4.11 WxMpConfig
错误描述:
1 | Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: |
解决参考链接:
https://blog.csdn.net/daihui05/article/details/7560570
1 | 改用下面标签: |
4.12 AopProxyUtils.getSingletonTarget(Ljava/lang/Object;)Ljava/lang/Object;
Spring4.3.12 才有这个方法
4.13 版本对应关系
在中心仓库中,可以查看某个 包 依赖的对应关系。
需要特别注意,版本的兼容性,导致很多问题。
- 本文作者: Linking
- 本文链接: https://linking.fun/2018/06/21/微信公众号开发总结/
- 版权声明: 版权所有,转载请注明出处!