微信授权登录问题【公众号登录、PC扫描登录】

微信授权登录问题

微信的授权登录比较多,主要分两大类,一类是微信客户端的公众号网站授权登录 微信公众号网页授权;第二种是网站或者android、ios的授权登录 网站应用微信扫描授权; 具体的android 和 ios 授权登录类似 pc 网站,这里不详细描述;

  • 重点说明微信公众号登录和微信pc扫描登录是两个开放平台,但是 都可以直接获取unionId,同一个微信,应该出来是一个账号。

微信公众号网页(h5)授权登录

  • 前置条件:
    • 认证的微信公众平台账号:拥有已经认证了的微信公众号注册账号(大陆300RMB, 境外 99$)[首年是认证,隔年是复审,都需要交纳给第三方认证公司的]
    • 安全域名设置(公众号设置-JS接口安全域名设置: 设置网站地址为安全域名 才能调用微信开发接口
    • 开发者设置,如果要通过微信开发者工具调试微信,就需要把 对应的开发者微信 添加到 微信公众号。
      • 微信公众号开发文档网页授权
      • 业务域名 配置了,微信里面就不会提示 “防欺诈盗号,请勿输入qq或者支付密码”
	#授权样例:
	https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx2ce2eddc9f96be5e&redirect_uri=http%3A%2F%2Fwww.mall.com.cn%2F&response_type=code&scope=snsapi_userinfo&state=18049531390#wechat_redirect
	#其中 state=18049531390 这个是自己随便定义的

微信开放平台网页扫描授权

  • 微信的pc 授权扫描登录需要用到微信开放平台:
  • 前置条件:
    • 注册一个微信开放平台账号,公司类型(需要营业执照和盖章等),一天左右
    • 注册一个微信网页应用,需要3个工作日左右,可能被拒绝。
    • 微信开发者认证,继续需要公司的资料,并且需要交纳 300元 或者 99$, 这个好像没有年审,交纳一就行了。
	#授权样例:
	https://open.weixin.qq.com/connect/qrconnect?appid=wx25374aca5f46d26e&redirect_uri=http%3A%2F%2Ftest189.ourslook.com/qcurepc&response_type=code&scope=snsapi_login&state=18049531390#wechat_redirect
	#其中 state=18049531390 这个是自己随便定义的
 /**
     * ==============================================================
     * 1:微信公众号  微信公众平台
     * 开放h5应用需要
     * ==============================================================
     * @see ApiWeappUserController#loginByWxJSCode(String, Boolean, Boolean, HttpServletRequest)
     * <p>
     * https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
     * 地址形如:
     * https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx2ce2eddc9f96be5e&redirect_uri=http%3A%2F%2Fwww.mall.com.cn%2F&response_type=code&scope=snsapi_userinfo&state=18049531390#wechat_redirect
     * <p>
     * scope:snsapi_base 公众号 静默授权,用户没有感知
     * scope:snsapi_userinfo 公众号  用户有感知授权
     * <p>
     * 必要条件:
     * 1:需要在微信里面 或者 微信开发者工具里面才能使用该url
     * 2:redirectUrl: 必须微信公众号上面配置过了的, 否则报错:redirect_uri 参数错误      redirect_url域名和后台配置不一致,错误码:10003
     * <p>
     * 调试的前提条件:❗️❗️❗️❗️
     * 1:绑定开发者: 希望调试的公众号,我们要求开发者微信号与之建立绑定关系。具体操作为:公众号登录管理后台,启用开发者中心,在开发者工具——web 开发者工具页面,向开发者微信号发送绑定邀请。
     * 2:绑定服务器域名  公众号设置--功能设置
     * 2-1:业务域名 配置了,微信里面就不会提示  "防欺诈盗号,请勿输入qq或者支付密码"
     * 2-2:JS接口安全域名 公众号开发者可在该域名下调用微信开放的JS接口。
     * 2-3:网页授权域名 只有配置了该域名,该域名能获取到公众号的jscode ❗️❗️❗️❗️ , 否则 redirect_uri 参数错误
     *
     *
     *  ==============================================================
     *  2:微信开放平台
     *  开放网页端、android、ios应用需要
     *  ==============================================================
     *  https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html   微信网页登录 网站应用微信登录开发指南  【【微信开放平台~~网站应用】】
     *  地址形如:
     *  https://open.weixin.qq.com/connect/qrconnect?appid=wx25374aca5f46d26e&redirect_uri=http%3A%2F%2Ftest189.ourslook.com/qcurepc&response_type=code&scope=snsapi_login&state=18049531390#wechat_redirect
     *  如果报错:Scope 参数错误或没有 Scope 权限,   那肯定是没有在 微信开放平台对应的网页应用里面来通 微信登录权限(前提需要开通微信开发者认证)
     *  <p>
     *  scope: snsapi_login 微信网页开发扫码授权
     *
     *
     *  ❗️❗️❗️❗️ 微信公众号登录的appid 和 微信网页登录的appid 肯定不是一个appid
     */
    @ApiOperation(value = "微信公众号获取jscode的链接地址", position = 1, notes = "微信公众号要获取jscode必须要使用固定的链接地址获取,这个连接地址后台来拼接." +
            "\n 官网地址: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 \n")
    @ResponseBody
    @IgnoreAuth
    @RequestMapping(value = "getLoginUrl", method = RequestMethod.GET)
    public XaResult<String> getLoginUrl(
            @ApiParam(value = "重定向url,字段名:redirectUrl,公众号授权之后的url;这里不用encode,后台做了一次encode", defaultValue = "http://www.mall.com.cn/") @RequestParam(value = "redirectUrl", required = false) String redirectUrl,
            @ApiParam(value = "授权方式,字段名:scope;取值: 第一种 snsapi_base 公众号 静默授权,用户没有感知、第二种:snsapi_userinfo 公众号  用户有感知授权 第三种:snsapi_login 微信网页开发扫码授权; 如果不填,后台给默认值") @RequestParam(value = "scope", required = false) String scope,
            @ApiParam(value = "isPc,字段名:isPc;默认是h5, pc需要填写:true") @RequestParam(value = "isPc", required = false, defaultValue = "false") Boolean isPc,
            @ApiIgnore HttpServletRequest request) throws UnsupportedEncodingException {
        String baseUrl =  isPc ? "https://open.weixin.qq.com/connect/qrconnect" : "https://open.weixin.qq.com/connect/oauth2/authorize";
        String appId = WxPublicNumberConfig.getAppId();
        //我们自己随便生成一个,后面前端可以传回给后台,后台来校验是否是我们系统生成的。
        String state = "mall18049531390";

        //验证 scope
        if (isPc) {
            scope = "snsapi_login";
        } else {
            if (XaUtils.isBlank(scope)) {
                scope = "snsapi_base";
            } else {
                if (!("snsapi_base".equalsIgnoreCase(scope) || "snsapi_userinfo".equalsIgnoreCase(scope))) {
                    throw new RRException("公众号授权scope填写错误,取值: snsapi_base、snsapi_userinfo");
                }
            }
        }

        //redirectUrl 设置
        if (XaUtils.isBlank(redirectUrl)) {
            if ("prod".equalsIgnoreCase(profilesActive)) {
                redirectUrl = "http://www.mall.com.cn/";
            } else {
                redirectUrl = "https://test189.ourslook.com/qcureweb/";
            }
        }

        String url = baseUrl + "?appid=" + appId + "&redirect_uri=" + URLEncoder.encode(redirectUrl, StandardCharsets.UTF_8.name()) + "&response_type=code&scope=" + scope + "&state=" + state + "#wechat_redirect";

        XaResult<String> xr = new XaResult<>();
        xr.success(url);
        return xr;
    }

发布了112 篇原创文章 · 获赞 85 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/ab601026460/article/details/102553554