uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)

这篇具有很好参考价值的文章主要介绍了uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

想知道怎么搭建一个企业微信侧边栏应用的,请移步:
https://blog.csdn.net/u013361179/article/details/131936040?spm=1001.2014.3001.5501

1、网页授权,获取code

代码:

oauthUrl() {
		const that = this
		uni.removeStorageSync('code')
		let REDIRECT_URI = encodeURIComponent(window.location.href)
		let CORPID = webConfig.appId
		let url =
			`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${CORPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`
		if (window.location.href.indexOf('code=') != -1) { // 避免一直重复重定向无限获取code
			let code = that.getQueryVariable('code')
			if (code == that.getCode()) { // 微信获取code会重定向,所以从上个页面返回主页后,返回的其实是重定向之后的url,此时url一定带有上次的code,code只能用一次,这时候要重新获取
				let urls = that.ridUrlParam(window.location.href, ['code']) // 从url中祛除code,用没有code的url重新生成code 
				window.location.href = urls
			}
			that.setCode(code)  // 保存code
			that.getConfig() // 注入企业权限
		} else {
			window.location.href = url
		}
	},

里面用到的方法:

// 获取url后参数code

getQueryVariable(variable) {
		var query = window.location.search.substring(1);
		var vars = query.split("&");
		for (var i = 0; i < vars.length; i++) {
			var pair = vars[i].split("=");
			if (pair[0] == variable) {
				return pair[1];
			}
		}
		return (false);
	},

// 删除URL中指定search参数

ridUrlParam(url, params) {
		/**
		 * 删除URL中指定search参数,会将参数值一起删除
		 * @param {string} url 地址字符串
		 * @param {array} aParam 要删除的参数key数组,如['name','age']
		 * @return {string} 返回新URL字符串
		 */
		for (var index = 0; index < params.length; index++) {
			var item = params[index];
			var fromIndex = url.indexOf(item + "="); //必须加=号,避免参数值中包含item字符串
			if (fromIndex !== -1) {
				// 通过url特殊符号,计算出=号后面的的字符数,用于生成replace正则
				var startIndex = url.indexOf("=", fromIndex);
				var endIndex = url.indexOf("&", fromIndex);
				var hashIndex = url.indexOf("#", fromIndex);

				var reg = "";
				if (endIndex !== -1) {
					// 后面还有search参数的情况
					var num = endIndex - startIndex;
					reg = new RegExp(item + "=.{" + num + "}");
					url = url.replace(reg, "");
				} else if (hashIndex !== -1) {
					// 有hash参数的情况
					var num = hashIndex - startIndex - 1;
					reg = new RegExp("&?" + item + "=.{" + num + "}");
					url = url.replace(reg, "");
				} else {
					// search参数在最后或只有一个参数的情况
					reg = new RegExp("&?" + item + "=.+");
					url = url.replace(reg, "");
				}
			}
		}
		var noSearchParam = url.indexOf("=");
		if (noSearchParam === -1) {
			url = url.replace(/\?/, ""); // 如果已经没有参数,删除?号
		}
		return url;
	}

这个时候就会发现,如果你是从企业微信客户端侧边栏配置的自定义应用,点击不同的外部联系人时,获取到的code都是一致的,这时候从企业微信后台管理去配置,就每次获取到不同的code了

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信

2、注入企业权限、应用权限、获取当前外部联系人userid
html引入js文件

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>

然后在manifest.json中配置模板路径
uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信

这个时候,一般页面中会出现一个无法去掉的“取消”字样,通过查看是多了个<uni-actionsheet__action>组件,这时候在index.html中加了一行代码就解决了

<link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />

完整代码如下:
uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信

注入企业权限(必须先注入企业权限,不然wx(jWeixin)中找不到agentConfig方法,就没法注入应用权限):

如果你使用的是uniapp,那么你会发现你在html引入js文件后,window中会找不到wx对象,这是因为uniapp把wx自用了,但是wx返回了wx和jWeixin两个,这时候直接用jWeixin就行(这个方法仅限PC)。
如果需要兼容安卓和ios的手机端,那就需要进行判断,Android使用jWeixin这个变量,iPhone|iPad|iPod|iOS使用wx这个变量,可以通过一个全局方法进行判断,示例代码:

// global.js
// 当前手机系统
	getEWechatSdk() {
		let eWechatSdk = ''
		
		if (/(Android)/i.test(navigator.userAgent)) {
			eWechatSdk = 'jWeixin'
		} else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
			eWechatSdk = 'wx'
		} else {
			eWechatSdk = 'jWeixin'
		}
		return eWechatSdk
	}
// index.vue
created() {
	this.chatSdk = this.$global.getEWechatSdk()
},
methods: {
	window?.[this.chatSdk].invoke('sendChatMessage', {
	  	msgtype: "text", //消息类型,必填
		enterChat: true, //为true时表示发送完成之后顺便进入会话,仅移动端3.1.10及以上版本支持该字段
		text: {
			content: "你好", //文本内容
		}
	}, function(res) {
		console.log(res, 'res')
	if (res.err_msg == 'sendChatMessage:ok') {
			//发送成功
		}
	})
}

tips:代码中的getWxVerify是我们后台的接口,用来获取签名的,,,,最重要的一点,告知后台开发仔细看文档,获取access_token要用的corpsecret是应用秘钥,不是企业秘钥

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信
还有,请求你们后端接口是,要把请求的ip添加到企业微信后台管理的白名单中

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2),uni-app,企业微信

// 注入企业权限

getConfig() {
	const that = this
	const path = window.location.href.indexOf("#") !== -1 ? window.location.href.split("#")[0] : window.location.href;
	getWxVerify({
		url: encodeURIComponent(path),
		appId: webConfig.appId
	}).then(res => {
		console.log(res, 'ressss')
		window?.[chatSdk].config({
		    beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
		    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
		    appId: res.result.appid, // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
		    timestamp: res.result.timestamp, // 必填,生成签名的时间戳
		    nonceStr: res.result.noncestr, // 必填,生成签名的随机串
		    signature: res.result.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
		    jsApiList: ['getCurExternalContact'] ,// 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
		});
		window?.[chatSdk].ready(function(){
			console.log('注入企业权限成功')
			console.log(window, 'window')
		    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
			that.getAgentConfig()  // 注入应用权限
		});
	})
},

注入应用权限:

// 注入应用权限

getAgentConfig() {
		const that = this
		const path = window.location.href.indexOf("#") !== -1 ? window.location.href.split("#")[0] : window.location.href;
		getWxVerify({
			url: encodeURIComponent(path),
			appId: webConfig.appId,
			type: 'agent_config'
		}).then(res => {
			console.log(res, 'ressss')
			window?.[chatSdk].agentConfig({
			    corpid: res.result.appid, // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
				agentid: 1000066, // 必填,企业微信的应用id (e.g. 1000247)
			    timestamp: res.result.timestamp, // 必填,生成签名的时间戳
			    nonceStr: res.result.noncestr, // 必填,生成签名的随机串
			    signature: res.result.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
			    jsApiList: ['getCurExternalContact'] ,// 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
				success: function(res) {
					// 回调
					console.log('注入应用权限成功',res)
					that.getCurrentUserId()  // 获取当前联系人的userid
				},
				fail: function(res) {
					console.log('注入应用权限失败',res)
					if (res.errMsg.indexOf('function not exist') > -1) {
						alert('版本过低请升级')
					}
				}
			});
		})
	},

获取当前联系人userid:文章来源地址https://www.toymoban.com/news/detail-654849.html

getCurrentUserId() {
		const that = this
		window?.[chatSdk].invoke('getCurExternalContact', {
			}, function(res){
				console.log(res, '获取当前外部联系人userIdres')
			if(res.err_msg == "getCurExternalContact:ok"){
				let userId  = res.userId ; //返回当前外部联系人userId
				that.setCurrentUserId(userId)
				console.log(userId, '获取当前外部联系人userId', res)
			}else {
				//错误处理
			}
		});
	},

到了这里,关于uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信授权登录】uniapp开发小程序,实现微信授权登录功能 & 退出登录

    微信授权登录(获取用户信息) 1.先获取用户信息——用户授权允许后,通过调用uni.login 可以获取到code。 2.拿着获取到的code去调用——登录接口,可以获取到token。 3.把token存入缓存。就可以在页面判断是否登录了。 第一种方式: 第二种方式:

    2024年02月03日
    浏览(41)
  • uniapp开发小程序,实现获取【微信授权登录】功能

    APP微信授权登录需要到微信开放平台申请,在HBuilderX配置APP SDK中微信登录的appId,另外需要跟小程序、公众号授权账号互通的话也需要在微信开放平台申请 1、在微信公众平台申请应用,获取相应的appid和appsecret 2、在HBuilderX配置APP SDK中微信登录的appId和appsecret 微信授权登录(

    2024年02月09日
    浏览(40)
  • uniapp + vue3微信小程序开发(3)微信授权登录

    接口获取openId = 用户微信信息入库 = 手机号授权入库 我们知道小程序都是需要openId的,那我们可以通过前端获取,也可以通过后端接口获取, 前端就是这个地址,appid和secret 在你微信公众平台下都可以找到, code,在你调用uni.login就可以获取,但是切记, code码只能使用一次

    2024年02月08日
    浏览(88)
  • 【企业微信开发流程前端篇】企业微信自建应用开发流程详细介绍,js-sdk获取用户信息,快捷回复,授权,发送朋友圈功能实现【一次看懂,简单开发】

    最近刚好遇到了这么个任务 需要我在企业微信中内嵌一个自建应用, 用于打通跟我们医院后台系统的数据对接。 这样就可以直接让客服们在企业微信上点击右边页面操作后台的数据了。 这可是给我踩了好多坑。毕竟从来没有做过企业微信的开发,有点懵。 也是踩了好多坑

    2024年02月11日
    浏览(25)
  • UNIAPP中开发企业微信小程序

    概述 需求为使用uni-app开发企业微信小程序。希望可以借助现成的uni-app框架,快速开发。 遇到的问题是uni-app引入jweixin-1.2.0.js提示异常: Reason: TypeError: Cannot read properties of undefined (reading ‘title’)。 本文中描述了如何解决该问题,以及jweixin-1.2.0.js引入代码和wx.config方法调用方

    2024年02月12日
    浏览(25)
  • SpringCloud微服务实战——搭建企业级开发框架(五十三):微信小程序授权登录增加多租户可配置界面

      GitEgg框架集成weixin-java-miniapp工具包以实现微信小程序相关接口调用功能,weixin-java-miniapp底层支持多租户扩展。每个小程序都有唯一的appid,weixin-java-miniapp的多租户实现并不是以租户标识TenantId来区分的,而是在接口调用时,传入appid,动态切换ThreadLocal的appid来实现多租户

    2024年02月15日
    浏览(35)
  • SpringCloud微服务实战——搭建企业级开发框架:第三方登录-微信小程序授权登录流程设计和实现

      在前面的设计和实现中,我们的微服务开发平台通过JustAuth来实现第三方授权登录,通过集成公共组件,着实减少了很多工作量,大多数的第三方登录直接通过配置就可以实现。而在第三方授权登录中,微信小程序授权登录和APP微信授权登录是两种特殊的第三方授权登录

    2024年02月07日
    浏览(40)
  • uniapp开发企业微信应用中的定位问题记录

    项目背景 :开发工具为HBuilderX,框架为uniapp,开发移动端的Web应用,在企业微信中使用(自建应用),Web开发的应用,不是小程序。 需求点 :获取用户当前的位置信息,技术流程包括以下几个环节: 1、获取当前用户的经纬度位置信息,用的uniapp的 uni.getLocation() 接口。 2、

    2024年02月04日
    浏览(32)
  • uniapp 水印/相机/授权位置、相机、相册权限

    自定义相机水印 授权     // 手动授权【摄像头】     function getAuth() {         // 获取摄像头权限         uni.getSetting({             success(res) {                 console.log(\\\"auth res\\\", res);                 const authSetting = res.authSetting;                 if (auth

    2024年02月02日
    浏览(32)
  • 如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

    企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场景下,企业微信的回调数据无法直接请求到开发环境的服务。 内网穿透工具可以帮助开发者将应用开发调试过程中的回调请求,穿透到本地的开发环境。 Cpolar是一种安全的内网

    2024年04月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包