微信公众号要求OAuthor 2.0认证只能从一个域名,绑定在微读客平台上的所有微信公众号目前都是使用cms.weiduke.com,这样会给其他域的调用并获取openid带来困难,导致无法使用。
由微读客平台对微信公众号的OAuthor认证和token进行合理的管理,对外提供统一的接口,供其他项目的域调用。
OAuthor 2.0认证
请求地址如下:
https://cms.weiduke.com/index.php?g=Wap&m=Api4WeixinOpenid&a=getopenid&token=cccccc&returl=xxxxxxx
此接口供其他网站调用,完成Oauthor2.0的认证过程,因为微信公众号接口限制了该认证只能在一个域名内完成,使用此方法支持其他域名下的网站获取网页访问用户的openid。
需要提供两个参数:
(1)token:微信公众号绑定到微读客平台后分配给其的唯一参数值。
(2)returl:是认证完成之后要跳转过去的网址,应该是http打头的。
如果还需要同时获取用户的头像和昵称,即提示微信用户授权,则多带一个参数:
(3)scope: snsapi_userinfo
微读客平台收到该地址请求后,经过若干次页面跳转,成功获取openid之后,会在returl网址上追加两个参数:
(1)openid:微信号的openid;
(2)check:是微信用户openid、微信公众号appid、和字符串常量“cms.weiduke.abot.cn” 三个变量拼接后做md5,形式如:$weixin_openid.$this->__appid.'cms.weiduke.abot.cn' 。
获取头像和昵称
如果设置了scope为snsapi_userinfo,在成功回调之后,可以在服务器端发起请求获取openid对应的头像和昵称,以及性别、所在城市等属性,请求的API接口为:
https://cms.weiduke.com/openapi/WeixinMp/get_userinfo
可以使用以下两种形式的参数,加上openid。
序号 | 参数 | 说明 |
---|---|---|
1 | weiduke_id | weiduke_token值 |
2 | weiduke_secret | weiduke_secret值 |
序号 | 参数 | 说明 |
---|---|---|
1 | appid | 公众号的appid |
2 | appsecret | 公众号的appsecret |
安全设置
如果带有openid和check两个参数的网址被其他人点击,会造成获取到的openid结果不正确,如果您的系统中以openid做为用户身份的唯一认证标志,则会造成用户身份资料泄露等风险。因此,建议调用的时候增加安全机制,具体如下:
(1)向请求网址跳转之前,写cookie,设置时间为5~10秒;
(2)收到带有openid和check的请求,先检查cookie中是否有值,如果没有,则可能是直接点击这类网址进入的,不去处理;如果cookie有值,则将cookie清空,再去做后续的处理。