微信公众平台获取openid
微信公众平台可以通过接口获取用户的openid,但是获取用户信息的时候需要做一次跳转。
我在后台有一张用户表,用户如果关注了公众平台就将他的信息录入到数据库,包括openid。现在要做一个简单的系统,用户参加某些活动可以获得积分,积分可以兑换成金币,所以在页面中需要使用openid来标识每一个用户。
现在的问题是,活动有好几个页面,每个页面都需要用到openid,并且无法限定用户从哪个页面进入,想请问有没有办法将用户openid存储起来,在不同页面之间传递?
ps: session这种方式是不行的,微信浏览器对session的支持有问题,我抓包做过测试
Answers
获取用户信息的时候需要网页授权,网页授权有静默授权(snsapi_base)和用户可感知的授权(snsapi_userinfo)
你只要openid的话用静默授权就可以了
静默授权流程:
用户打开你的页面-》跳转到微信授权页面-》跳转到你设定的页面并能够拿到code-》根据code拿到OpenId
拿到openid之后你可以保存到session,这个是绝对没问题的~
你先做一下检查:
1.确定下否真的拿到了OpenId
2.查看下服务端是否有保存session数据?
3.页面跳转比较多,最后session是保存在哪个域,这个要确定!
可能出现的问题:
因为PHP的session需要客户端的cookies来配合(保存PHPSESSID),如果客户端禁用了cookies,你可以把PHPSESSID放到URL里面进行传递或者写到html的header里面
如果活动人数不是很多,可以使用网页授权的方式去获取OpenId
以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的
无论用户从哪个页面进来,你都可以通过这种方式获取用户的OpenId。如果你需要在用户进入页面之后,将用户的openId在各个页面中传递,我记得PHP有个全局变量_global,各个页面贡献该变量,或者放在redis
不过在java中可以将变量放在ThreadLocal中,这样可以唯一确定是哪个用户,不知道PHP有没有类似的方法。如果多个用户同时进入,你要实现OpenId在各个页面传递,怎么标识唯一的用户