微信开发学习总结

微信开发项目学习总结


目录


开发过程

一、接入准备

1. 测试号申请

微信测试平台

2. 编写接入类
文档说明

若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

开发要点
  • 在 doGet 方法中通过 request 获取参数
  • 将参数和自己填写的token参数值按流程进行排序(Arrays.sort())、加密(MessageDigest)和校验
  • 返回内容(response.getWriter())
3. 参数配置

在 url 一栏中填写公网能访问的 servlet 地址


二、自定义菜单

1. 编写调用接口的工具类
/**
 * sendHttpRequest
 * @param urlstr,接口的调用地址
 * @param method,请求调用方法
 * @param outputstr,POST方法传过去的参数
 * @param charset
 *            return string,返回微信端返回的状态码
 */
开发要点
  • 获取连接,URL.openConnection()
  • HttpsURLConnection 设置
  • conn.getOutputStream() 向微信端传数据
  • conn.getInputStream() 拿取微信端返回的数据
2. 按文档参数写按钮的pojo类
3. 编写创建自定义菜单类
开发要点
  • 将 pojo 数据转成 json
  • 调用接口工具类(String.format() 拼接参数)

三、消息接收处理

微信用 xml 数据将消息信息 POST 过来

开发要点
  • 将微信传来的数据转成pojo类
  • 根据 MsgType 进行响应处理
  • 消息分为普通消息和事件消息两大类

四、消息被动回复

将 pojo 类转成 xml 传给微信端


五、生成带用户参数的海报

开发要点
  • ImageIO.read() 获取图片流
  • BufferedImage.createGraphics() 得到 Graphics2D类
  • drawImage() 方法
  • ImageIO.write() 保存图片
  • 微信上传临时素材

六、扫码积分功能

1. dbcp连接池
开发要点
  • 根据 dbcp 官方文档配置参数
  • 连接工厂类(BasicDataSourceFactory..createDataSource())
  • *
2. 编写dao层
3. 扫码积分增加
开发要点
  • String.replace() 获取二维码的参数即推荐人id
  • 调用dao的积分累加保存(score=score+1)
  • 到达定量返回提示信息

优化

1. 消息处理超时

问题:

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。
假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

方法:
  • Executor 线程执行处理
  • 将结果保存在数据库,避免重复调用

2. 请求排重

问题:
微信重试机制,导致重复处理相同的信息

方法:

关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

  • 定义 FIFO 的数据结构,不允许重复

3. 连接工厂单例化

问题:
1. 不需要每次获取数据库连接都读取配置文件
2. 连接工厂不需要每次都实例化

方法:

  • 定义同时声明类
  • 构造方法中读取参数实例化 BasicDataSource
  • 公共方法得到单个实例

4. 不重复获取access_token

问题:
每次调用接口都要用到 token

access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

方法:
* 一次获取 token ,容错判断 token 的失效时间
* 可设定定时任务和微信服务器同步时间

5. 方便添加/删除功能

问题:
在消息处理类中,用 if-else 语句若日后增减功能则要重新编译

方法:

  • 把业务做成实现接口规范的插件
  • 利用配置名反射得到这个类

所用技术

  1. properties文件读取
  2. java反射机制
  3. HttpsURLConnection
  4. fastjson
  5. 内部类
  6. XStream
  7. 图片合并
  8. 连接池
  9. 线程
  10. 单例模式

心得

用户和开发者间通过微信服务端进行消息交互,因此要会看文档、根据文档要求转发的参数来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值