解决一个微信号同时支持多个环境网页授权问题


Posted in Javascript onAugust 07, 2019

项目进行微信开发, 认证了一个微信服务号专门用于内部测试,但是内部可能存在多套不同环境(开发dev、测试sit、预发布uat)等,由于微信限制一个服务号只能配置一个网页授权域名, 又不可能给每个环境单独配一个服务号,这样不仅需要成本而且很浪费资源, 所以重点需要解决下面这个问题:

1、可以自动区分环境。比方部署开发环境。url可能是http://dev.xxx.com/api/,而在测试环境的时候应该是http://sit.xxx.com/api/。而并且不能写死,否则开发和测试就要换来换去。非常麻烦

解决一个微信号同时支持多个环境网页授权问题

本文总结分享一下思路:

主要是通过中间页面代理获取微信授权CODE,然后跳转到对应需要使用的环境URL下;

比如原来开发环境, 微信中授权域名配置的是dev.xxx.com,那么现在配置的是一个代理域名proxy.xxx.com,通过代理域名拿到code后在跳回dev.xxx.com,如下图所示

解决一个微信号同时支持多个环境网页授权问题

代码片段 getCode.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>微信授权登录</title>
</head>
<body>
</body>
<script>
 var code = getPara("code");
 if(!code)
 {
  var redirect = getPara("url");
  var appid = getPara("appid");
  var _from = getPara("from");
  var redirect_url = encodeURIComponent('https://proxy.xxx.com/getCode.html?url='+redirect);
  var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri=" + redirect_url + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
  location.href = url;
 }else{
  var redirect = getPara("url");
  var code = getPara("code");
  if(redirect.split('?').length > 1){
  location.href = redirect + "&code=" + code;
  }else{
    location.href = redirect + "?code=" + code;
  }
 }
 function getPara(name){
  var url = location.href;
  eval("var reg = /("+name+"=[A-Za-z0-9_,-@!#\.\:\/]*)/i")
  var match = url.match(reg);
  if(match && match.length > 1){
    var arr = match[0].split("=");
  arr.shift();
  return arr.join('=');
  }else{
   return "";
  }
 }
</script>
</html>

使用方法https://proxy.xxx.com/getCode.html?url=http://dev.xxx.com/uinfo&appid=wx6d421c188956xx95

总结

以上所述是小编给大家介绍的解决一个微信号同时支持多个环境网页授权问题呢,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
js的window.showModalDialog及window.open用法实例分析
Jan 29 Javascript
javascript 数组操作详解
Jan 29 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
Sep 14 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
mui back 返回刷新页面的实例
Dec 06 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 #Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 #Javascript
javascript中的数据类型检测方法详解
Aug 07 #Javascript
scrapyd schedule.json setting 传入多个值问题
Aug 07 #Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
Aug 07 #Javascript
微信小程序引入Vant组件库过程解析
Aug 06 #Javascript
Vue数据绑定实例写法
Aug 06 #Javascript
You might like
第十四节--命名空间
2006/11/16 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
Python线程详解
2015/06/24 Python
Python实现登陆文件验证方法
2018/10/06 Python
pandas 时间格式转换的实现
2019/07/06 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
python 获取计算机的网卡信息
2021/02/18 Python
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
经典导游欢迎词大全
2014/01/16 职场文书
高中语文教学反思
2014/01/16 职场文书
法人代表任命书范本
2014/06/05 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
假释思想汇报范文
2014/10/11 职场文书
考试作弊检讨书
2014/10/21 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Python利用FlashText算法实现替换字符串
2022/03/31 Python
Redis基本数据类型List常用操作命令
2022/06/01 Redis