您的位置:首页 > 移动开发 > 微信开发

微信开发学习总结

2016-07-11 12:46 513 查看

微信开发项目学习总结

目录

微信开发项目学习总结
目录

开发过程
一接入准备
测试号申请

编写接入类
文档说明

开发要点

参数配置

二自定义菜单
编写调用接口的工具类
开发要点

按文档参数写按钮的pojo类

编写创建自定义菜单类
开发要点

三消息接收处理

开发要点

四消息被动回复

五生成带用户参数的海报

开发要点

六扫码积分功能
dbcp连接池
开发要点

编写dao层

扫码积分增加
开发要点

优化
消息处理超时
问题

方法

请求排重

连接工厂单例化

不重复获取access_token

方便添加删除功能

所用技术

心得

开发过程

一、接入准备

1. 测试号申请

微信测试平台

2. 编写接入类

[b]文档说明[/b]

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

加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

[b]开发要点[/b]

在 doGet 方法中通过 request 获取参数

将参数和自己填写的token参数值按流程进行排序(Arrays.sort())、加密(MessageDigest)和校验

返回内容(response.getWriter())

3. 参数配置

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

二、自定义菜单

1. 编写调用接口的工具类

/**
* sendHttpRequest
* @param urlstr,接口的调用地址
* @param method,请求调用方法
* @param outputstr,POST方法传过去的参数
* @param charset
*            return string,返回微信端返回的状态码
*/


[b]开发要点[/b]

获取连接,URL.openConnection()

HttpsURLConnection 设置

conn.getOutputStream() 向微信端传数据

conn.getInputStream() 拿取微信端返回的数据

2. 按文档参数写按钮的pojo类

3. 编写创建自定义菜单类

[b]开发要点:[/b]

将 pojo 数据转成 json

调用接口工具类(String.format() 拼接参数)

三、消息接收处理

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

[b]开发要点[/b]

将微信传来的数据转成pojo类

根据 MsgType 进行响应处理

消息分为普通消息和事件消息两大类

四、消息被动回复

将 pojo 类转成 xml 传给微信端

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

[b]开发要点[/b]

ImageIO.read() 获取图片流

BufferedImage.createGraphics() 得到 Graphics2D类

drawImage() 方法

ImageIO.write() 保存图片

微信上传临时素材

六、扫码积分功能

1. dbcp连接池

[b]开发要点[/b]

根据 dbcp 官方文档配置参数

连接工厂类(BasicDataSourceFactory..createDataSource())

*

2. 编写dao层

3. 扫码积分增加

[b]开发要点[/b]

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 语句若日后增减功能则要重新编译

方法:

把业务做成实现接口规范的插件

利用配置名反射得到这个类

所用技术

properties文件读取

java反射机制

HttpsURLConnection

fastjson

内部类

XStream

图片合并

连接池

线程

单例模式

心得

用户和开发者间通过微信服务端进行消息交互,因此要会看文档、根据文档要求转发的参数来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信 优化