做过好几次微信开发了;每一次都会遇到不同的坑,这一次只是总结一下教训,写给自己的,希望如果对你们有帮助的话,希望给个赞;
项目需求
项目原来是有php进行开发的,php内嵌html,这样是快速的开发了,但是,
对内部文件的保密性太差;这是改造项目的根本原因;
1:将后台改为java进行处理;但是因为前期前后人员进行任务划分的不明确
导致后期开发,遇到各种"坑";我们认为java可以处理用户的登陆问题;但是这一次,
确实没有成功;
2:对微信订阅号和微信服务号接口功能的认识不足,导致时间浪费;
1:微信公众号登陆和网页授权问题
首先,大家应该清楚,在进行微信公众号的时候,有的会提醒大家进行确认登录,但是有的公众号没有提醒,但是确实能够保存,大家之间进行操作的信息; 这是微信服务号给大家提供的两种网页授权方式; a:静默授权;当你进入公众号,但是没有提醒你确认等咯的时候,该服务号进行了静默授权; b:如果弹出了"确认登陆"的操作框的时候;是使用了微信的第二种授权方式; 个人总结:这两种的授权方式;是存在用户信息完整度的区别;不用说,大家也能知道;肯定是第二种授权方式,获取的用户信息更详细;这个需要根据不同的需求进行选择;
- 1:接下来我要说的进行网页授权的过程;详细过程大家请参照微信开发文档;我在这里要写的就是我自己遇到的一些问题
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
第一步:用户同意授权,获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
我想在这说的就是redirect_uri参数的问题;先说一下这个链接吧,这个链接的根本目是获取code,要注意的问题就是appID,一定是服务号的appid,如果报scope没有权限,或者关于scope问题;就很有可能就是这个id的问题;这个id没有必需是这个功能要上的id,可以是另外一个服务号的ID;但是id和对应的应用秘钥还有安全域名接口对应的秘钥txt,文件一定要相对应,不能再不同的公众对应的项;
这个链接可以解释为;经过用户点击相应这个链接之后,微信会进行redirect_uri回调,并且会在携带code在回调链接的后面;所以相应的redirect_uri后面的链接地址就是我们要让微信指向的连接地址;其中,我处理的是对我们自己的连接地址进行encodeURIComponent("这里面放我们自己链接地址");函数处理;接下来按照卫星给的方式进行拼接;当成功进行连接回调的时候;这个时候尽可以进入第二步了;
- 2:第二步:获取openid;
通过code换取网页授权access_token 首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,<em>也获取到了openid</em>,snsapi_base式的网页授权流程即到此为止。
这个功能我们最后协商的结果是使用php进行openid的获取.java具体可不可以还真不知道,这个我会继续验证;
接下来只需要运行下面的代码进行了;当然相应的php依赖文件还是要引入的;这个在微信开发文档中,JS-SDK;中有关于php还有node的demo;直接拿来用就行;
php代码如下:
$code = $_GET['code'];//获取code $weixin= file_get_contents("[https://api.weixin.qq.com/sns/oauth2/access_token?appid=](https://api.weixin.qq.com/sns/oauth2/access_token?appid=)这里是你的APPID&secret=这里是你的SECRET&code=".$code."&grant_type=authorization_code");//通过code换取网页授权access_token $jsondecode = json_decode($weixin); //对JSON格式的字符串进行编码 $array = get_object_vars($jsondecode);//转换成数组 $openid = $array['openid'];//输出openid
然后接下来前端人员,要做的就是通过ajax,将openid传给后台;'<? php echo $openid;?>'