微信开发笔记
官方开发文档
接入步骤
1、利用filter获取微信验证
需要更改端口为80,(默认端口不要写)
遇到的问题:
该帐号是微信公众平台帐号,不能用于登录微信开放平台
需要重新注册,因为是独立的
2、在开发-基本配置里找到appid、secret,然后填入下面图片中进行验证,如果校验通过,则可以通过此接口获取access_token
微信公众平台接口调试工具
如果校验失败,可以重新再试!
3、通过access_token获取iplist
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
获取微信服务器ip list:
{"ip_list":["101.226.62.77"]}
网页授权:
填写第一步获取的code参数
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
总结
启用服务器配置后,无法推送获取,另外菜单也不能使用
签名是为了给微信服务器发送随机穿并验证,并且是get方法
以后所有的聊天请求都会由另外的post来处理
网页授权的地址,不要带www,另外也不要有/,也就是com截止!
内网穿透:
http://www.ngrok.cc/
openID is 公众号ID与用户微信ID合成加密而来
所以才有了unionid
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
方案一:为每个授权过的用户创建一个线程定时刷新token
因为,用户受过权。可以利用refresh_token的30天期限特征不需要其再授权,
除非取消了关注,重新关注后openid任然可以继续使用
之前的逻辑全部错误!
if (code == null || code.equals("authdeny")) { isValidCode = false; }
这个是用户不同意,然后取消授权后强制跳转到授权按钮
//如果session未空或者取消授权,重定向到授权页面,这句没搞懂是什么意思
这个是用于验证用户是否点击了授权同意按钮
,并不是拿来二次调用的!!!!!!!!!!!!!
不对,是需要二次调用的,第二次调用因为有code了
获取用户信息,只是获取本地的数据库表中的缓存,所以,没有必要使用access_token
跨域 回调解决
<mvc:mapping path="/**"/> <mvc:exclude-mapping path="/hello"/>
exc必须放在下面!!!!!!!!!!
这个地方,以及其它若干地方需要去掉http
// UserWx userWx = JSONObject.toJavaObject(jsonUser, UserWx.class); 报错需要解决
项目位置: System.out.println(System.getProperty("user.dir") );
request.getSession().getServletContext().getRealPath("")
用户点击认证连接,无论是否确认授权,都会调到redirectUrl页面, code可能会变为ahthden
把code放在首口,可能是因为作者的回调地址也是认证地址
// UserWxService memberService = (UserWxService) WebAppContext.getObject("UserWxService");
// response.getWriter().print(obj);
userWx = userWxService.saveOrUpdate(userWx);
//如果openid不存在,则返回state并跳转到注册,但是跳转需要用到 页面,可是参数怎么传过去
//或者使用微信回调 XXX行不通
//放在json里面作为
//--不存在话返回标识,约定值,1,到达用户中心,2,到达注册页面
response.getWriter().print(code);
关于网页授权access_token和普通access_token的区别
1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
关于微信用户登录的最后的决策:
提供统一的页面式回调URL,然后后面所有的业务尽量在后台完成