一、必备知识
1)语言:
a、后端:Java,Python,php
b、前端:Javascript、jQuery、css、HTML5
2)常用方法:
a、httpclient(用于模拟请求)
post请求
将参数set进body
将参数set进请求
get请求
b、SHA1加解密
c、XML文档解析
d、XML字符串生成
e、JSONObject
f、正则表达式
3)其他:
a、文档阅读能力
b、英文文档阅读能力
c、动手操作能力
d、一定的自学能力
二、开发准备
1)内网穿透(用于本地调试程序)
三、核心
1)模拟请求
2)解析数据
微信只是提供展示平台,后台依然和平时开发一样
四、开发
1)准备,根据开发文档配置授权连接
后期所有的微信公众号的消息推送都将推送到这个链接
注意:文档提及,根据得到的参数,加上自己设置的参数,进行SHA1加密,比对加密后的数据,如果相同,原路返回微信提供的一个数据;
这里简单粗暴点,直接原路返回微信提供的数据即可,微信返回的都对字符串(如果按照微信提示正确操作 后,始终无法通过授权,请检查返回值是否进行了json装换,请在页面请求打印一下你返回的值是否包含其他信息——如”“,值得注意的是,微信所说的返回对应的字符串是指的没有”“的结果值,java开发中为了方便, 会配置@ResponseBody返回值自动进行json转换,导致返回结果带有”“)
2)获取access_token
注意:每日限制次数和有效时长;文档中的提醒很重要,文档建议单独的服务器管理access_token,避免同时刷新导致后者覆盖前者,出现无法使用异常,
同时需要考虑多线程并发问题,避免多线程同时访问数据导致线程异常
也需要考虑到刷新前的access_token也能使用,刷新后的access_token也能使用,保证平缓过度,刷新时间最好提前半个小时,创建一个副本,刷新后销毁另一个
3)开发菜单:文档说明和详细
注意:菜单的格式是这样的{“button”:[{“type”:”click”,”key”:”Acc_cc”,”url”:”“}]}(参照文档说明)
值得注意的是,请求菜单设置地址时,参数是写入body并非的参数param这个可以通过在线接口调试工具进行一次调试后,按F12进行查看;
再进行模拟post请求时,应该使用httppost.setEntity(new StringEntity(param,”UTF-8”))来进行设置参数,如果是设置请求参数param请使用httppost.setEntity(new UrlEncodedFormEntity(params,”UTF-8”));
虽然前者好用,但还是建议使用后者
4)被动回复消息:文档说明详细
两种触发:a)微信底部菜单按钮触发b)用户给公众号发送消息
根据b)可以开发回话机器人,联系图灵机器人,可以使开发变得更容易
这个没有接口,微信推送请求后你回复一个消息字符串(xml)给微信就好了,必须是文档规定的格式,不然微信提示”服务器不支持。。。。。”
注意:切记,进行队列设计;微信推送请求后,切记请第一时间返回”success”或者”“字符串;(如果返回给微信”success”或”“后微信提示“该公众号暂时无法提供服务,请稍后重试”,请在页面请求打印一下你返回的值是否包含其他信息–如”“,值得注意的是,微信所说的返回”success”或”“是指的没有”“的结果值,也就是success或者 ,java开发中为了方便, 会配置@ResponseBody返回值自动进行json转换,导致返回结果带有”“,从而导致微信服务器获取信息解析错误)
当回复给用户的消息中有中文时,务必将中文进行”ISO-8859-1”编码,不然用户接收到的信息将会是乱码
这里提到的先记录,后回复是指的先记录下来,之后调用微信客服发送消息接口;
原因:问题提示,微信推送请求后,如果服务器未能5s能回应或者未能恢复正确的响应,微信将默认发起三次确认请求,
实时证明,微信的5s真的有点短,强烈建议第一时间返回”success”避免微信的三次确认请求,导致重复回复用户;
开发过程中会出现一种无限请求回复的恶性循环,原因未知,我想应该跟微信三次确认请求有关
微信第一次推送的请求中包含openid;但后面的三次确认请求增加了经纬度信息
因为微信推送信息的时候会携带用户openID,我们可以依据开发基于对话的信息获取机制
记住(这些说明同样适用于后面的推送)
5)客服发送消息:文档说明
注意:同3)
其他尚未尝试,后续更新
微信公众开发
最新推荐文章于 2024-11-13 20:43:20 发布