# GetWeixinCode

解决微信OAuth2.0网页授权只能设置一个回调域名的问题

## 使用方法

1. 部署`get-weixin-code.html`至你的微信授权回调域名的目录下

2. 使用方式类似于直接通过微信回调的方式,只是将回调地址改成了`get-weixin-code.html`所在的地址,另外省去了`response_type`参数(因为它只能为`code`)以及`#wechat_redirect`(它是固定的),它们会在`get-weixin-code.html`里面自己加上

3. `get-weixin-code.html`页面从微信那里拿到code之后会重新跳转回`redirect_uri`里面填写的url,并且在url后面带上`code`和`state`

## 详细示例

1. 前往微信公众平台->接口权限->网页授权获取用户基本信息->修改,填写授权回调页面域名,例如`www.abc.com`

2. 在`www.abc.com`域名下部署`get-weixin-code.html`,不一定是根目录,例如:`http://www.abc.com/xxx/get-weixin-code.html`

3. 假设你的`http://www.xyz.com/hello-world.html`这个页面需要获取微信授权,那么你应该使用以下地址来获取授权:`http://www.abc.com/xxx/get-weixin-code.html?appid=XXXX&scope=snsapi_base&state=hello-world&redirect_uri=http%3A%2F%2Fwww.xyz.com%2Fhello-world.html`

4. 这样最终就会跳转到这样一个地址:`http://www.xyz.com/hello-world.html?code=XXXXXXXXXXXXXXXXX&state=hello-world`,从而你就拿到了授权`code`以及自定义的`state`参数了

## 其他说明

- 通过多一次的跳转,解决了微信限制回调域名只能设置一个的问题

- 牺牲了一点用户体验,换来了项目部署的美感,不需要将各种项目都部署到一个域名下

**建议先弄懂微信授权回调的流程再使用本项目

以下是get-weixin-code.html 的代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>微信登录</title>
</head><body><script>var GWC = {version: '1.2.0',urlParams: {},appendParams: function (url, params) {if (params) {var baseWithSearch = url.split('#')[0];var hash = url.split('#')[1];for (var key in params) {var attrValue = params[key];if (attrValue !== undefined) {var newParam = key + "=" + attrValue;if (baseWithSearch.indexOf('?') > 0) {var oldParamReg = new RegExp('^' + key + '=[-%.!~*\'\(\)\\w]*', 'g');if (oldParamReg.test(baseWithSearch)) {baseWithSearch = baseWithSearch.replace(oldParamReg, newParam);} else {baseWithSearch += "&" + newParam;}} else {baseWithSearch += "?" + newParam;}}}if (hash) {url = baseWithSearch + '#' + hash;} else {url = baseWithSearch;}}return url;},getUrlParams: function () {var pairs = location.search.substring(1).split('&');for (var i = 0; i < pairs.length; i++) {var pos = pairs[i].indexOf('=');if (pos === -1) {continue;}GWC.urlParams[pairs[i].substring(0, pos)] = decodeURIComponent(pairs[i].substring(pos + 1));}},doRedirect: function () {var code = GWC.urlParams['code'];var appId = GWC.urlParams['appid'];var scope = GWC.urlParams['scope'] || 'snsapi_base';var state = GWC.urlParams['state'];var isMp = GWC.urlParams['isMp']; //isMp为true时使用开放平台作授权登录,false为网页扫码登录var baseUrl;var redirectUri;if (!code) {baseUrl = "https://open.weixin.qq.com/connect/oauth2/authorize#wechat_redirect";if (scope == 'snsapi_login' && !isMp) {baseUrl = "https://open.weixin.qq.com/connect/qrconnect";}//第一步,没有拿到code,跳转至微信授权页面获取coderedirectUri = GWC.appendParams(baseUrl, {'appid': appId,'redirect_uri': encodeURIComponent(location.href),'response_type': 'code','scope': scope,'state': state,});} else {//第二步,从微信授权页面跳转回来,已经获取到了code,再次跳转到实际所需页面redirectUri = GWC.appendParams(GWC.urlParams['redirect_uri'], {'code': code,'state': state});}location.href = redirectUri;}};GWC.getUrlParams();GWC.doRedirect();</script>
</body></html>

关于微信授权回调域名只能设置一个的解决办法相关推荐

  1. 网页授权域名需要加html,如何解决微信网页授权回调域名只能设置一个

    问题 在实际的需求中,我们常常遇到多个部署在不同域名下的业务,想使用同一个「微信服务号」进行微信网页授权.但是微信的网页授权只能设置一个回调地址.为了满足业务需求,有人想到给每个业务部门配置一个微信服 ...

  2. 解决微信服务号授权域名不够用,微信网页授权回调域名只能设置2个的问题!

    前言 最近在做微信网页项目时,发现服务号授权域名只能有两个,而多个项目都需要用到微信授权获取用户信息,这就导致了域名不够用的问题.如果给每个项目都配一个服务号,这显然是不现实的,不仅需要成本而且很浪费 ...

  3. 企业微信应用设置可信域名_企业微信应用变更域名,可信域名只能设置一个导致原有推送的模板消息(旧域名)直接提示需使用应用可信域名...

    事故过程: 域名从A变成B后,旧有的推送消息点击直接提示 [redirect_uri需要使用应用可信域名,原有的模板消息推送中带有旧的域名地址A], 而此时,企业微信管理后台该应用的可信域名已经变成了 ...

  4. 微信扫码登录只能填一个授权回调域问题

    背景 公司增加了个微信扫码登录,费劲千辛万苦终于把应用申请下来了,但遇到了一个头疼的事情:微信授权回调域只能写一个,且不支持通配.这下可好了,总不能把每个需要微信登录的二级域名都申请一个应用吧?而且一 ...

  5. 微信公众号开发 授权回调域名 微信授权验证

    问题: 配置了微信后台的授权回调域名还是没有通过微信验证,即出现 微信验证步骤: 1.通过一个链接A(www.xxx.com?str=xxxxxxxx)进入微信验证 2.因为链接不存在微信的code, ...

  6. 微信登录失败——授权回调域名校验出错,错误码:10003原因及解决办法

    配置文件这个路径是对应的微信端页面和JS相关的域名:不是后台的域名,对于前后端完全分离有不同域名的,要分清了: 微信授权回调页面域名和JAVA后台配置文件中的域名不一致,会导致微信登录失败--授权回调 ...

  7. 微信公众号开发redirect_uri 参数错误 的解决办法,Oauth2授权重定向域名参数错误解决办法

    问题概述 关于这个问题,博主是在进行微信公众号开发过程中获取微信公众号CODE用于下一步验证获取openid和access_token时遇到的, 回调地址: " https://open.w ...

  8. 发现网站被劫持该怎么办?网站域名劫持的情况及解决办法

    什么是网站劫持? 网站劫持是指本想打开某个网站的时候,却被拦截跳转到另一个网站页面,或者出现一个不属于此网站的广告. 网络劫持有什么危害? 1.用户输入网址后却跳转到其他页面,用户无法正常访问,从而导 ...

  9. 微信收到消息很慢无法连接服务器,微信消息延迟几分钟才收到 微信收消息有延迟的原因及解决办法...

    微信收到消息总是延迟怎么回事呢?第一个就是网络延迟,第二个是手机信号不好,第三个就是微信自己设置的问题.下面,我们来看看微信收消息有延迟的原因及解决办法. 微信消息延迟几分钟才收到怎么回事 一.网络延 ...

最新文章

  1. 2017年英特尔在其数据中心业务和AI方面下大注
  2. 购买阿里云服务器地域如何选择?
  3. Move from SQL to SOQL
  4. mysql语句orderby_mysql中的orderby_MySQL
  5. 阿里DataV案例:制作实时销售大屏流程
  6. 经典C语言程序100例之三九
  7. .process和ProcessFunction(没有整理完)
  8. qt android程序联网死机,qt android开发出现致命错误
  9. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵
  10. 神似华为Mate20!金立手机也开始复刻了...
  11. 《深度学习笔记》——训练加速篇
  12. 【linux系统学习笔记】Ubuntu文本界面和图像界面的切换
  13. paip.提升用户体验----c++ c# 配色方案
  14. WinRar注册机或注册码
  15. 关于DSP数字信号处理技术
  16. 看Spring实战有感(一)
  17. Valine魔改教程——添加自定义表情和QQ头像
  18. 利用CSS3实现图片3D旋转
  19. 自强不息,厚德载物——2021年年度总结
  20. 英伟达Flex-unity插件

热门文章

  1. 算法---LeetCode 887. 鸡蛋掉落
  2. 安卓虚拟机_VMOS虚拟大师独立的安卓虚拟机系统【安卓】
  3. 清华大学2020年毕业生就业质量报告出炉!连续三年无本科毕业生入职阿里
  4. 硬件工程师设计出错是什么体验
  5. 图像生成技术发展趋势_如何管理图像和视频中的颜色:最新趋势和最佳做法
  6. centos yum的配置文件 repo文件详解
  7. UML2.0最新版入门图解
  8. pdf.js-canvas出现文字显示缺失问题处理
  9. react 每2秒调用一次函数
  10. android微商助手功能,微商免费助手下载