网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记

  • 微信官方文档:微信官方文档-公众号-网页授权
  • 微信公众平台:微信公众平台
  • 微信开放平台:微信开放平台
  • 在线urleEcode编码/解码:在线urleEcode编码/解码

scope不能为空

因为配置回调地址时候,没有urlEncode回调地址,导致微信解析不了授权地址。

配置开发注意

  1. 授权地址参数需要按顺序,并且我们自己设置的回调地址是需要urlEncode编码,就是比如/%2f:%3a=%3d,当然也能用js的现有方法。
    以下是scope为snsapi_userinfo的授权地址,只需要更改红色的就行,其他不用动,appId是类型为服务号的公众号的appId,并且该公众号需要有网页授权接口权限。

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第1张图片网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第2张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第3张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第4张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第5张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第6张图片

  1. 前端根据授权地址得到code,然后后台得到code后,请求以下链接获取access_token:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    我只用到了unionid,但是之前做小程序登录时候,遇到过只有openid没有unionid的情况,需要另外请求接口去获取unionId。

结果json:
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第7张图片
前端代码:
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第8张图片
后端代码:

        //公众号access_token基地址
        String authUrl ="https://api.weixin.qq.com/sns/oauth2/access_token";
        //公众号APPID
        String appId = "wx4c**********7230";
        //公众号APPsecret
        String appSecret ="554**************************b1";
        //前端根据授权成功得到的code
		String code="071RdKfY1LrMOZ0FJtcY1hvEfY1RdKfI&";

        String url = authUrl + "?appid=" + appId + "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code";//获得openid的链接
        String str = HttpUtils.doGet(url);
        log.info("公众服务号获取AccessToken回调{}",str);
        
        JSONObject jsonObject = JSONObject.parseObject(str);
        String unionid = jsonObject.getString("unionid");

        //如果根据access_token没有得到unionid,则通过accesstoken和openId去获取用户信息得到unionid
        if(StringUtils.isEmpty(unionid)){
            //公众号服务号获取用户信息基地址
            String snsUrl = "https://api.weixin.qq.com/sns/userinfo";
            String userInfoUrl = snsUrl + "?access_token=" + jsonObject.getString("access_token") + "&openid=" + jsonObject.getString("openid") +"&lang=zh_CN";
            String userInfoStr = HttpUtils.doGet(userInfoUrl);
            log.info("公众服务号AccessToken获取用户信息回调{}",result);
            
            JSONObject result = JSONObject.parseObject(userInfoStr);
            unionid= result.getString("unionid");
        }

===========================================================================

redirect_uri 域名与后配置不一致

因为上线后,没有在公众号配置线上服务器的网页授权域名。

第一次使用这个服务号类型的公众号,启用了公众号的服务器配置,配置时候会有一个文件需要放置到服务器上,域名的根目录,还需要配置开发的ip白名单,启用后,自动回复功能失效,需要自行开发。
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第9张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第10张图片
以下是验证微信发送的token的代码

public String checkSignature(WXReturnParam param){
        //配置服务器时候生成的token
        String token = "token******";
        String timestamp = param.getTimestamp();
        String nonce=param.getNonce();

        List<String> list=new ArrayList<>();
        list.add(token);
        list.add(timestamp);
        list.add(nonce);
        Collections.sort(list);
        StringBuilder stringBuilder=new StringBuilder();
        list.forEach(a->stringBuilder.append(a));
        String s = DigestUtils.sha1Hex(stringBuilder.toString());
        if(s.equals(param.getSignature())){
            return param.getEchostr();
        }else {
            return "signature不匹配";
        }
    }

配置顺序:先将信息填好,url是以上验证方法的访问url(https://test.xxxx.com/xxx/checkSignature),token是自定义的一串英文或数字,EncodingAESKey由可手动填写或随机生成,将用作消息体加解密密钥。我选择了兼容模式。将以上验证方法配置到外网可访问的服务器。点击确认,微信就会立刻发送验证请求到你配置的url,如果验证通过,就会配置成功。
服务器配置是第一次配置,可能因为第一次配置,网页授权的域名自动生成,且是你配置url的域名(test.xxxx.com)。
因为一直是测试服务器开发测试,之后测试完成上线时候,我只更改了服务器配置,将url改成了正式的访问地址,并且也验证通过了。
但是授权时候一直提示,redirect_uri域名与后台配置的不一致
最终发现网页授权域名配置的是测试的,然后加上正式的(不带https,如:www.baidu.com)就可以了。
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第11张图片
网页H5微信授权-scope不能为空-redirect_uri 域名与后配置不一致-写bug历险记_第12张图片

你可能感兴趣的:(笔记,微信H5授权)