admin管理员组文章数量:1641356
微信授权登录问题
微信的授权登录比较多,主要分两大类,一类是微信客户端的公众号网站授权登录 微信公众号网页授权;第二种是网站或者android、ios的授权登录 网站应用微信扫描授权; 具体的android 和 ios 授权登录类似 pc 网站,这里不详细描述;
- 重点说明微信公众号登录和微信pc扫描登录是两个开放平台,但是 都可以直接获取unionId,同一个微信,应该出来是一个账号。
微信公众号网页(h5)授权登录
- 前置条件:
- 认证的微信公众平台账号:拥有已经认证了的微信公众号注册账号(大陆300RMB, 境外 99$)[首年是认证,隔年是复审,都需要交纳给第三方认证公司的]
- 安全域名设置(公众号设置-JS接口安全域名设置: 设置网站地址为安全域名 才能调用微信开发接口
- 开发者设置,如果要通过微信开发者工具调试微信,就需要把 对应的开发者微信 添加到 微信公众号。
- 微信公众号开发文档网页授权
- 业务域名 配置了,微信里面就不会提示 “防欺诈盗号,请勿输入qq或者支付密码”
#授权样例:
https://open.weixin.qq/connect/oauth2/authorize?appid=wx2ce2eddc9f96be5e&redirect_uri=http%3A%2F%2Fwww.mall%2F&response_type=code&scope=snsapi_userinfo&state=18049531390#wechat_redirect
#其中 state=18049531390 这个是自己随便定义的
微信开放平台网页扫描授权
- 微信的pc 授权扫描登录需要用到微信开放平台:
- 前置条件:
- 注册一个微信开放平台账号,公司类型(需要营业执照和盖章等),一天左右
- 注册一个微信网页应用,需要3个工作日左右,可能被拒绝。
- 微信开发者认证,继续需要公司的资料,并且需要交纳 300元 或者 99$, 这个好像没有年审,交纳一就行了。
- 微信网页登录 网站应用微信登录开发指南 【【微信开放平台~~网站应用】】
- ❗️❗️❗️❗️ 微信公众号登录的appid 和 微信网页登录的appid 肯定不是一个appid
#授权样例:
https://open.weixin.qq/connect/qrconnect?appid=wx25374aca5f46d26e&redirect_uri=http%3A%2F%2Ftest189.ourslook/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/wiki?t=resource/res_main&id=mp1421140842
* 地址形如:
* https://open.weixin.qq/connect/oauth2/authorize?appid=wx2ce2eddc9f96be5e&redirect_uri=http%3A%2F%2Fwww.mall%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/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 微信网页登录 网站应用微信登录开发指南 【【微信开放平台~~网站应用】】
* 地址形如:
* https://open.weixin.qq/connect/qrconnect?appid=wx25374aca5f46d26e&redirect_uri=http%3A%2F%2Ftest189.ourslook/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/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/") @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/connect/qrconnect" : "https://open.weixin.qq/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/";
} else {
redirectUrl = "https://test189.ourslook/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;
}
版权声明:本文标题:微信授权登录问题【公众号登录、PC扫描登录】 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729306944a1195097.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论