uniapp移动端——企业微信H5调用jssdk实现扫一扫,通过weixin-java-cp获取ticket签名,配置config

本文详细介绍了如何在企业微信中实现扫一扫功能,包括可信域名验证、Nginx配置、网页授权、JS-SDK的使用和签名获取,以及后端通过weixin-java-cp工具生成签名的过程。
摘要由CSDN通过智能技术生成

背景:
使用企业微信开发扫一扫功能

可信域名验证
 (1)企业微信的可信域名需要和企业微信的备案主体一致。

域名备案主体可通过站长工具查看域名备案主体。https://icp.chinaz.com/

企业微信备案主体可以咨询管理员

(2)通过nginx配置域名归属验证txt文件

具体操作详见:

https://blog.csdn.net/zhaolulu916/article/details/128613264?spm=1001.2014.3001.5502

(3)网页授权及JS-SDK配置成功效果如下


  (4)可信域名配置正确,但无法通过验证,可在开发者中心提问。也可以配置重定向后带端口的地址


2. 白名单配置
代码最终部署到服务器上,将服务器的IP配置到白名单里,这样调试就不会提示IP不在白名单范围内,此界面在系统管理员界面有。


3 .前端代码获取企业微信签名,并配置JSSDK权限
(1)npm安装weixin-js-sdk

npm install weixin-js-sdk --save

(2)在main.js全局引入weixin-js-sdk

import wx from 'weixin-js-sdk'
Vue.prototype.$wx = wx

在组件中使用:

(3) 配置获取企业微信签名和使用JSSDK权

此时获取的url可以是域名重定向后的带端口的,但是此url需要在企业微信上进行可信域名登记。

	// 扫一扫
			async scan() {
				let url = window.location.href.split('#')[0];
				const respose = await getSignature(
				)
				const {
					data
				} = respose
				this.wxConfig(data.appId,
					data.timestamp,
					data.nonceStr,
					data.signature)

			},


//wx.config的配置
			wxConfig(appId, timestamp, nonceStr, signature) {
				jweixin.config({
					debug: false, // 开启调试模式,
					appId: appId, // 必填,企业号的唯一标识
					timestamp: timestamp, // 必填,生成签名的时间戳
					nonceStr: nonceStr, // 必填,生成签名的随机串
					signature: signature, // 必填,签名
					jsApiList: ['scanQRCode', 'checkJsApi'], // 必填,需要使用的JS接口列表
				});
				jweixin.ready(() => {
					console.log('配置完成,扫码前准备完成')
					jweixin.scanQRCode({
						desc: 'scanQRCode desc',
						needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
						scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
						success: function(res) {
							var result = res.resultStr; // 当 needResult 为 1 时,扫码返回的结果
							// var resultArr = result.split(','); // 扫描结果以逗号分割数组(一维码)
							// var codeContent = resultArr[resultArr.length - 1]; // 获取数组最后一个元素,也就是最终的内容 
							// _this.form.imei = codeContent
							// alert('扫码成功!')
						},
					});

				})
				jweixin.error(function(res) {
					// console.log('出错了:' + res.errMsg); //wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
				});
			},

(4)新增qywx.js编写api接口

// 企业微信签名

export function getSignature(data) {
	return http.request({
		url: "/work-wechat/qywx/signature",
		data: data,
		method: "get",
	})
}

使用时引入

import {getSignature} from "@/api/employeeCare/index.js"

4. 后端代码通过weixin-java-cp开发工具获取签名
后端使用的是https://github.com/binarywang/的weixin-java-cp开发工具

(1)引入企业微信开发工具

<dependency>

<groupId>com.github.binarywang</groupId>

<artifactId>weixin-java-cp</artifactId>

<version>3.8.0</version>

</dependency>

(2)新增QywxController

@RestController
public class QywxController {
    @Autowired
    private QywxService qywxService;
    @GetMapping(value = "/system/qywx/signature/")
    public WxJsapiSignature getJsapiSignature(@RequestParam("url") String url) {
        try {  // 直接调用wxMpServer 接口
            System.out.println("访问WxJsapiSignature=====/system/qywx/signature/"+url+"");
            WxJsapiSignature wxJsapiSignature = qywxService.getJsapiSignture(url);
            System.out.println("AppId==="+wxJsapiSignature.getAppId());
            System.out.println("Timestamp==="+wxJsapiSignature.getTimestamp());
            System.out.println("NonceStr==="+wxJsapiSignature.getNonceStr());
            System.out.println("Signature==="+wxJsapiSignature.getSignature());
            return wxJsapiSignature;
        } catch (WxErrorException e) {
            return null;
        }
    }


(3)新增QywxService,使用weixin-java-cp中的WxCpServiceImpl生成签名

@Service
public class QywxService {
    //获取对应应用的签名
    public WxJsapiSignature getJsapiSignture(String url) throws WxErrorException {
        // 替换成自己应用的appId和secret,agentId
        Integer agentId = 1111111;
        String corpId="XXXXXXXX";
        String corpSecret = "XXXXXXXX";
        WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
        config.setCorpId(corpId);      // 设置微信企业号的appid
        config.setCorpSecret(corpSecret);  // 设置微信企业号的app corpSecret
        config.setAgentId(agentId);     // 设置微信企业号应用ID
        WxCpServiceImpl wxCpService = new WxCpServiceImpl();
        wxCpService.setWxCpConfigStorage(config);
        System.out.println("WxJsapiSignature===url==="+url);
        WxJsapiSignature wxJsapiSignature = wxCpService.createJsapiSignature(url);
        //wxJsapiSignature中可以直接获取签名信息 且方法内部添加了缓存功能
        return wxJsapiSignature;
    }
 
}


(4)签名的结果验证

https://developer.work.weixin.qq.com/devtool/signature

其中jsapi_ticket是企业的ticket,不是应用的ticket
5. 扫一扫调用JSSDK代码  jweixin.scanQRCode


//wx.config的配置
			wxConfig(appId, timestamp, nonceStr, signature) {
				jweixin.config({
					debug: false, // 开启调试模式,
					appId: appId, // 必填,企业号的唯一标识
					timestamp: timestamp, // 必填,生成签名的时间戳
					nonceStr: nonceStr, // 必填,生成签名的随机串
					signature: signature, // 必填,签名
					jsApiList: ['scanQRCode', 'checkJsApi'], // 必填,需要使用的JS接口列表
				});
				jweixin.ready(() => {
					console.log('配置完成,扫码前准备完成')
					jweixin.scanQRCode({
						desc: 'scanQRCode desc',
						needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
						scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
						success: function(res) {
							var result = res.resultStr; // 当 needResult 为 1 时,扫码返回的结果
							// var resultArr = result.split(','); // 扫描结果以逗号分割数组(一维码)
							// var codeContent = resultArr[resultArr.length - 1]; // 获取数组最后一个元素,也就是最终的内容 
							// _this.form.imei = codeContent
							// alert('扫码成功!')
						},
					});

				})
				jweixin.error(function(res) {
					// console.log('出错了:' + res.errMsg); //wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
				});
			},

6. 扫一扫最终效果如下
以下效果图是代码部署到服务器上,配置成功手机端效果:
显示正常后,关闭调试模式

debug: false, // 开启调试模式,
7. 参考文章
https://blog.csdn.net/weixin_40816738/article/details/123170569

https://developer.work.weixin.qq.com/document/path/90547

https://blog.csdn.net/weixin_45243487/article/details/125101558

Vue.js本身是一个前端框架,并不具备直接操作企业微信用户列表的功能。它主要用于构建用户界面,而不是处理后端服务的集成。如果你想要从企业微信获取用户列表,通常需要通过微信JavaScript SDK(例如你在问题中提到的wecom-jssdk-2.0.2.js),这个库是微信官方提供的用于网页版的企业微信应用开发。 以下是基本步骤: 1. **在HTML中引入JS文件**:将`wecom-jssdk-2.0.2.js`放在你的项目中,然后在需要获取用户列表的地方通过`<script>`标签引用。 ```html <script src="https://wwcdn.weixin.qq.com/node/open/js/wecom-jssdk-2.0.2.js" charset="utf-8"></script> ``` 2. **初始化SDK**:在window.onload或Vue实例的mounted生命周期钩子里,调用`wx.config`设置配置项,如AppID等。 ```javascript window.addEventListener('load', function () { wx.config({ debug: false, // 是否启用调试模式,一般设置为false appId: 'your_app_id', // 企业微信公众号AppID timestamp: '', // 需要后端生成并返回的时间戳 nonceStr: '', // 非敏感字符串,后端生成并返回 signature: '', // 签名,后端生成并返回 jsApiList: ['get联系人'] // 需要使用的API列表 }); // 后续可以调用wx.getContact()来获取用户列表 }); ``` 3. **调用API**:在config成功后,你可以调用`wx.getContact()`来获取用户的联系人列表。 注意,这一步骤需要用户授权,而且获取的是微信用户的联系人,不是企业通讯录。如果你需要访问企业通讯录,可能需要使用更复杂的方式来集成企业的管理后台API。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流丶年丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值