介绍

功能: 支持微信/支付宝网页静默授权
为什么需要线上html
因为在开发环境的时候,是本地服务http://localhost:8080,但是微信需要JS接口安全域名.

配置信息

  1. 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“网页授权域名”
  2. 然后把 html 文件放到服务器上, 安全域名指向这个html
  3. 在 vue 环境配置文件(.env.development、.env.production),中配置以下参数
    1. VUE_APP_WX_GET_CODE_DOMAIN = ‘第二步的html文件的线上地址’
    2. VUE_APP_APP_ID = ‘微信/支付宝的appid’
  4. 使用方法:
    1. 直接调取 util 文件中的 getAuthorCode 方法
    2. 调取完后,就可以在地址栏中,看到那个 code 了 (获取code的时候,可以使用这个方法 onGetRequest().code )

代码信息

授权文件


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>授权code</title>
</head>
<body></body>
</html>
<script>
(function () {var tools = {getParamer: function (key) {var map = this.getSearch();return map[key];},getSearch: function () {var search = window.location.search;return this.getSearchByStr(search);},getSearchByStr: function (search) {if (search) {search = search.substring(1);} else {return {};}var strsz = search.split("&");var map = {};for (var i = 0; i < strsz.length; i++) {var strs = strsz[i];if (strs.indexOf("=") != -1) {var tempsz = strs.split("=");var tempkey = tempsz[0];var tempvalue = tempsz[1];map[tempkey] = decodeURIComponent(tempvalue);}}return map;},setLocalStorage: function (key, val) {var map = {};map[key] = val;localStorage.setItem(key, JSON.stringify(map));},getLocalStorage: function (key) {var mapStr = localStorage.getItem(key);if (!mapStr) {mapStr = "{}";}var map = JSON.parse(mapStr);return map[key];},urlAddProp: function (url, key, val) {var jing = url.indexOf("#");var left = "";var right = "";if (jing == -1) {//无#号情况left = url;} else {//有#号情况left = url.substring(0, jing);right = url.substring(jing);}if (left.indexOf("?" + key + "=") != -1 || left.indexOf("&" + key + "=") != -1) {var start = left.indexOf("?" + key + "=");if (start == -1) {start = left.indexOf("&" + key + "=");}var end = left.indexOf("&", start + 1);if (end == -1) {end = left.length;}right = left.substring(end) + right;left = left.substring(0, start + 1);} else {var type = left.indexOf("?") != -1 ? "&" : "?";left += type;}var data = key + "=" + val;return left + data + right;},/*** 设置环境*/getCodeName() {if (/MicroMessenger/.test(window.navigator.userAgent)) {  // 微信return 'code'} else if (/AlipayClient/.test(window.navigator.userAgent)) { // 支付宝return 'auth_code'} else {return ''}}}function wxLogin(callback) {const codeName = tools.getCodeName()if (tools.getParamer(codeName)) {callback(tools.getParamer(codeName));} else {//去取codelet url = ''var appid = tools.getParamer('appid');if(codeName === 'code'){url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + encodeURIComponent(window.location.href) + "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";}else if(codeName === 'auth_code'){url = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=" + appid + "&redirect_uri=" + encodeURIComponent(window.location.href) + "&response_type=code&scope=auth_base";}window.location.href = url;}}var url = tools.getParamer("url");tools.setLocalStorage("url", url);wxLogin(function (code) {const codeName = tools.getCodeName()var toUrl = tools.getLocalStorage("url");toUrl = tools.urlAddProp(toUrl, codeName, code);window.location.href = toUrl;});
})()
</script>

util 文件

// 在util 文件中放入一下方法
/*** 获取认证 code* @param {String}} routerCallback  回调路由*/
function getAuthorCode(routerCallback) {const a = document.createElement('a');const urlCallback = encodeURIComponent(process.env.VUE_APP_BASE_DOMAIN + routerCallback);if (process.env.NODE_ENV === 'development') {// 测试环境走线上a.href = `${process.env.VUE_APP_WX_GET_CODE_DOMAIN}?url=${urlCallback}&appid=${process.env.VUE_APP_APP_ID}`;} else {// 正式环境 直接获取switch (judgeEnvironment()) {case 'WX':a.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${process.env.VUE_APP_APP_ID}&redirect_uri=${urlCallback}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;break;case 'ZFB':a.href = `https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=${process.env.VUE_APP_APP_ID}&redirect_uri=${urlCallback}&response_type=code&scope=auth_base`;break;case 'OTHER':a.href = 'javascript:;'console.error('当前环境不支持授权~')break;}}document.body.appendChild(a);a.click();document.body.removeChild(a);
}
/***  获取 url* @returns params的参数*/
function getUrl() {const url = window.location.hrefvar params = []var hvar hash = url.slice(url.indexOf('?') + 1).split('&')for (var i = 0; i < hash.length; i++) {h = hash[i].split('=') //params[h[0]] = h[1]}return params
}
/*** 判断浏览器环境*/
function judgeEnvironment() {if (/MicroMessenger/.test(window.navigator.userAgent)) {return 'WX'} else if (/AlipayClient/.test(window.navigator.userAgent)) {return 'ZFB'} else {return 'OTHER'}
}
/**** @returns {Object} url参数集*/
function onGetRequest() {const url = window.location.hrefvar params = []var hvar hash = url.slice(url.indexOf('?') + 1).split('&')for (var i = 0; i < hash.length; i++) {h = hash[i].split('=')params[h[0]] = h[1]}return params
}

wx-微信公众号-静默登陆授权相关推荐

  1. 微信公众号开发之授权

    微信公众号开发之授权 开发前准备 首先准备自己的服务器资源,已有服务器的请忽略服务器资源. 我这里演示新浪云服务器环境搭建:(新注册号有免费云豆可用) 服务器资源(https://sae.sina.c ...

  2. 微信公众号的网页授权如何在本地调试?

    调试微信公众号的网页授权时,要填写网页授权域名(如图1),否则授权的时候会提示redirect_uri参数错误(图2),可是我得在localhost先调试成功才能上传到实际的网站上吧,可是这里不支持l ...

  3. 微信,支付宝支付,微信公众号小程序授权等

    微信,支付宝支付,微信公众号小程序授权等 前言 微信支付 微信授权 maven依赖(更新) 前言 最近在公司也做了很多移动端项目,如今微信公众号,小程序又特别火爆,免不了要接触支付,授权这类的业务需求 ...

  4. 微信公众号开发之授权登录(前端vue篇)

    前序: 由于之前一直是后端直接调用微信授权后,拿到相关信息后再返回给我(就是以前的前后端不分离),所以对微信公众号开发的微信授权登录还一直处于懵逼情况,直到今天有一个项目需要前后端分离,要前端主动去获 ...

  5. 微信公众号-测试号-网页授权

    微信公众号-测试号-网页授权 自己摸索几天,总算搞清楚了 第一步 登录微信公众号平台,开发者工具菜单进入公众平台测试账号 第二步 设置网页帐号 网页授权获取用户基本信息的域名,测试号是可以用ip和域名 ...

  6. 微信公众号无限回调授权系统源码

    微信公众号后台默认只能授权两个网页域名,用此源码可以突破这个限制,对接无限个网站域名授权!! 准备工具:微信公众号授权无限回调工具 认证过的公众号,记着加白名单IP,这个网上教程很多就是在微信公众号设 ...

  7. 微信公众号平台登陆-你已授权登陆过XXXX

    上周开始开发微信 从微信公众号点击按钮去我们的服务器 结果除了第一次点击按钮确认授权以外,以后每次都会出现这个页面 加班研究了好几天 终于解决了 原来参考微信公众号平台文档 文档告诉我,state这个 ...

  8. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  9. url 微信公众号开发 配置失效_微信公众号开发之授权登录

    一.UnionId和openId 微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId.两者之间有着必然的联系. UnionID机制的作用说明:如果开发者拥有多个移动应用.网站应用和 ...

  10. 基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录获取手机号微信公众号网页---联合授权登录

    战前准备 1.使用 composer 安装 EasyWeChat $ composer require overtrue/wechat:~4.0 -vvv 或者在composer.json文件renq ...

最新文章

  1. wxDrawjs循环添加图形后增加标识记录点击的是哪个的另类方法
  2. tensorflow 模型预训练后的参数restore finetuning
  3. Scrapy框架----- Spiders
  4. python报错:ModuleNotFoundError: No module named ‘tkinter‘ 解决办法
  5. hashCode之二--Java:重写equals()和hashCode()
  6. matlab从矩阵中取rp开头文件,matlab trainrp
  7. 作者:高丰,英国南安普敦大学计算机博士,现为开放数据与创新独立咨询顾问,兼复旦大学数字与移动治理实验室特邀研究员。...
  8. 【cocos2d-x】游戏构成要素③----游戏关卡的实现
  9. 树:二叉树的内存拷贝和内存释放
  10. 【JAVA】关于向上转型与向下转型
  11. GCD API记录(二)
  12. Android 初级探讨 OOM问题 以及解决优化之道
  13. C#等同于正则表达式的写法
  14. vue项目实战(移动端)
  15. Chrome 小恐龙
  16. 电脑手机css自适应,怎么把一个pc页面自适应手机屏幕
  17. 【二代示波器教程】第3章 示波器设计—功能划分和准备工作
  18. 语义分割学习笔记(一)
  19. 贫民窟里的WPF系列讲座(二)
  20. 笔记本电脑如何玩游戏不卡顿,提升自己的笔记本性能!开启高性能模式的方法

热门文章

  1. (八)列表操作2(函数番外篇)
  2. centos部署mosquitto
  3. Ubuntu恢复被删除的文件
  4. Android安卓WebView下载文件问题
  5. 无法打开xlsx文件_什么是XLSX文件(以及如何打开一个文件)?
  6. 批量修改文件夹名称的一部分字符
  7. python怎样定义数组_终于知道python如何定义二维数组
  8. ACM的奇计淫巧_bitset优化
  9. 遍历输出数组-----淫巧
  10. .axf文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?