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


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 相关文章推荐
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
zTree实现节点修改的实时刷新功能
Mar 20 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
React数据传递之组件内部通信的方法
Dec 31 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
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
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
JS 时间显示效果代码
2009/08/23 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python 性能提升的几种方法
2016/07/15 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
pip install命令安装扩展库整理
2021/03/02 Python
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
什么是属性访问器
2015/10/26 面试题
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
个人银行贷款担保书
2014/04/01 职场文书
股东合作协议书
2014/09/12 职场文书
欢迎家长标语
2014/10/08 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
Python 数据可视化之Matplotlib详解
2021/11/02 Python
vue递归实现树形组件
2022/07/15 Vue.js