- 开发者模式的开启
- 进入到公众号管理平台——开发——基本配置,对服务器配置进行服务的开启
- 服务器的地址url为:http://127.0.0.1:8080/myproject/WeChatServer
- 令牌(token)的设置与程序配置文件中的token设置字符相同:
配置文件prop.properties——wechat_server_token=845C2550903CE6FA54CACDB82EAD4351
2.服务器接收微信消息
- 消息密钥随机获取即可,消息加密方式选择明文模式。
- 微信服务器会以get方式调用我们部署在sae服务器上的servlet,并传signature、timestamp、nonce、echostr四个参数。其中signature是微信加密签名;timestamp是时间戳,防止即使有别有用心之人获得另外的参数而因时间戳的不一致无法完成验证;nonce是随机数;echostr是随机字符串,用于返回给微信服务器作比较。
- servlet接收到以上数据后,会将token(在servlet中写好且要用公众平台上开发者中心的token相同)timestamp、nonce按字典方式排序,再拼接成字符串进行sha1加密将加密后的字符串与signature比较,如果相同就返回echostr。
- 微信服务器接收到返回的echostr,与发过去的echostr相比较,如果相同,就接入成功,否则失败。
- 处理后响应给微信的数据格式为xml格式的字符串,具体的返回xml格式可参考开发者文档说明。
- 假如服务器无法保证在五秒内处理回复,则必须回复“success”或者“”(空串),否则微信后台会发起三次重试。流程图如下:
- 微信公众号菜单设置
- 开发者工具——在线接口调试工具,填写appid、secret获取access_token
- 创建微信自定义菜单(如果没有生效,可取关后重新关注即可看见)
自定义菜单请求json格式示例:
{
"button":[
{
"name": "在线开户",
"sub_button": [
{
"type": "view",
"name": "极速开户",
"url": "网页链接"
},
{
"type": "view",
"name": "APP下载",
"url": "网页链接"
}
]
},
{
"name": "尊嘉福利",
"sub_button": [
{
"type": "view",
"name": "入金有奖",
"url": "网页链接"
},
{
"type": "view",
"name": "邀请有奖",
"url": "网页链接"
},
{
"type": "view",
"name": "招募合伙人",
"url": "网页链接"
},
{
"type": "view",
"name": "领取奖励",
"url": "网页链接"
}
]
},
{
"name":"服务直达",
"sub_button":[
{
"type": "view",
"name": "在线客服",
"url": "网页链接"
},
{
"type": "view",
"name": "常见问题",
"url": "网页链接"
},
{
"type": "view",
"name": "实时资讯",
"url": "网页链接"
},
{
"type": "view",
"name": "账户绑定&解绑",
"url": "网页链接"
}
]
}
]
}
- 注意事项
- 尽量使用流返回,response的getWriter().print(xmlStr)返回,不要使用return String;的方式返回,容易携带些不知名的信息。
- 返回的xml数据格式一定要正确,尤其是<![CDATA 和 ]]> 这不是多个符号,而是两个符号,所以中间不要有空格,不然你是无法把字符串转XML的,返回的时候也会报错。
- 参数问题,回复消息的参数,发送人与接收人不要弄反。