1. 引入企业微信sdk:

1-1. 因为uni-app遵循Vue的单文件组件 (SFC) 规范,不能直接在页面上引入

在index.html中引入:

<script src="http://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" type="text/javascript"></script>

并在manifest.json中启用index.html:

1-2. 完成1-1后发现报错wx.config is not a function

不能使用 wx.config 和 wx.agentconfig 调用,而是使用 jWeixin.config() 和 jWeixin.agentconfig()

1-3. 发现页面和一开始做的不一样,样式乱了

在index.html中添加:

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

另:index.html中这一句代码在我这里会导致报错,所以注释掉了,好像也没有影响

<script type="module" src="main.js"></script>

2. 企业微信工作台弹窗

 

原因:debug参数沿用官方示例设为true。官方解释此状态为:

开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

3. wx.agentconfig报错

3-1. 在开发者工具中调试网页,发现结果如下:

{"errMsg":"config:ok","verifyJsApiList":[]}

原因:造成这个报错的原因好像挺多?通过查询前人经验帖,发现我这里有一部分犯懒了,给wx.config和wx.agentConfig的时间戳和随机串一样,但改过之后依然有这个结果(。)感觉似乎没有对后续操作有什么影响

3-2. 在开发者工具中调试网页,发现报错如下:

{err_Info: "fail", errMsg: "agentConfig:fail", hint: "Hint: '0402174502:vr89lewqaj:-30001'. More info at…://open.work.weixin.qq.com/devtool/query?e=-30001"}

在企业微信工作台中是弹出类似这样的弹窗:

 原因:据说是因为开发者工具不支持这个接口,真机时没有问题。通过弹窗测试结果,确实ok

 4. 未解决问题

4-1. wx.agentConfig的signature参数,使用后端计算传回的值会报错40093,但是使用前端sha加密的值(与后端传值一样)就可以成功调起审批窗口

4-2. 后续发现后端写了调用方法emmm就,白忙活(不是)一场

===================二编(留段前端代码)

async agentConfigFunc() {
	var URL = location.href.split('#')[0];
    
    // ActionGetJsdkConfig: 调用后端接口获取微信jsk配置信息
    // JsType:1-企业 2-应用
    // 1- https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={AccessToken}
    // 2- https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token={AccessToken}&type=agent_config
	this.jsdkConfig = await this.ActionGetJsdkConfig({JsType: 2, url: URL});
				
	var agentSignature = "jsapi_ticket=" + this.jsdkConfig.JsTicket + "&noncestr=" + this.jsdkConfig.NonceStr + "&timestamp=" + this.jsdkConfig.Timestamp + "&url=" + URL;
	var AGENTSIGNATURE = sha1(agentSignature);

	console.log(this.jsdkConfig.Signature === AGENTSIGNATURE);
				
	await jWeixin.agentConfig({
		corpid: this.jsdkConfig.Corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
		agentid: this.jsdkConfig.AppId, // 必填,企业微信的应用id 
		timestamp: this.jsdkConfig.Timestamp, // 必填,生成签名的时间戳
		nonceStr: this.jsdkConfig.NonceStr, // 必填,生成签名的随机串
		signature: AGENTSIGNATURE, //this.jsdkConfig.Signature,// 必填,签名,见附录-JS-SDK使用权限签名算法
		jsApiList: ['agentConfig', 'thirdPartyOpenPage'], //必填,传入需要使用的接口名称
		debug: 1,
		success: (res) => {
			// 回调
			jWeixin.invoke(
				'thirdPartyOpenPage', 
				{
					"oaType": "10001",// 操作类型,目前支持:10001-发起审批;10002-查看审批详情
					"templateId": "xxxxxxxxxxxx",// 发起审批的模板ID,在自建应用-审批接口中创建模板可获取。
					"thirdNo": "thirdNo" + new Date().getTime(),// 审批单号,由开发者自行定义,不可重复。
					"extData": {
						'fieldList': [
							{
								'title': '备注',
								'type': 'text',
								'value': this.Remarks,
							},
						],
					}
				}, 
				(res) => {
					// 输出接口的回调信息
					/* uni.showModal({
						title: '提交审批 success 回调的信息',
						content: JSON.stringify(res)
					}) */
				}
			);
		},
		fail: (err) => {
			uni.showModal({
				title: 'agentConfig fail',
				content: JSON.stringify(err)
			})
			if (err.errMsg.indexOf('function not exist') > -1) {
				alert('版本过低请升级')
			}
		}
	})
},

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐