企业微信内部应用开发 WECOM-JSSDK 调用扫一扫

import * as ww from '@wecom/jssdk'
import {type CommonResult, ScanQRCodeType} from '@wecom/jssdk'
import {useQwConfigStore} from "@/store/qwConfig";
import {onMounted} from "vue";
import {getAppJsapiTicket, getEntJsapiTicket} from "@/api/qw";
import {getNanoId} from "@/utils/randomUtils";
import useCrypt from "@/hooks/useCrypt";

export default function () {
    const qwConfigStore = useQwConfigStore()
    const {sha1Encrypt} = useCrypt()
    let entJsapiTicket = ''
    let appJsapiTicket = ''

    onMounted(async () => {
        console.log('useQw.ts 挂载完毕')
        // 获取ticket
        getEntJsapiTicket().then(({data}) => {
            entJsapiTicket = data;
        })
        getAppJsapiTicket().then(({data}) => {
            appJsapiTicket = data;
        })
    })


    function register() {
        ww.register({
            corpId: qwConfigStore.corpId,       // 必填,当前用户企业所属企业ID
            agentId: qwConfigStore.agentId,                  // 必填,当前应用的AgentID
            jsApiList: ['scanQRCode'], // 必填,需要使用的JSAPI列表
            getConfigSignature,                // 必填,根据url生成企业签名的回调函数
            getAgentConfigSignature            // 必填,根据url生成应用签名的回调函数
        })
    }

    async function getConfigSignature(url: string) {
        // 生成方法参考 https://developer.work.weixin.qq.com/document/14924
        let timestamp = Date.now();
        let nonceStr = getNanoId();
        let signature = getSignature(entJsapiTicket, nonceStr, timestamp, url);
        return {timestamp, nonceStr, signature}
    }

    async function getAgentConfigSignature(url: string) {
        // 根据 url 生成应用签名,生成方法同上,但需要使用应用的 jsapi_ticket
        let timestamp = Date.now();
        let nonceStr = getNanoId();
        let signature = getSignature(appJsapiTicket, nonceStr, timestamp, url);
        return {timestamp, nonceStr, signature}
    }

    function getSignature(ticket: string, nonceStr: string, timestamp: number, url: string) {
        let str = `jsapi_ticket=${ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`
        return sha1Encrypt(str);
    }

    async function scanQRCode() {
        console.log('scanQRCode')
        register()

        // @ts-ignore
        let res: CommonResult & { resultStr?: string } = {};
        await ww.scanQRCode({
                needResult: true, //扫描结果是否由企业微信处理
                scanType: [ScanQRCodeType.qrCode],
                success(result) {
                    // 成功回调,result.errMsg 固定格式为“方法名:ok”
                    if (result.errCode != 0) {
                        alert(`扫描成功,出现未知错误,联系开发人员进行处理 result:${JSON.stringify(result)}`)
                    }
                    res = result;
                },
                fail(result) {
                    alert(`扫描失败,出现未知错误,联系开发人员进行处理  result:${JSON.stringify(result)} `)
                },
                cancel(result) {
                    // alert(`cancel 回调`)
                },
                complete(result) {
                    // alert(`complete 回调`)
                }
            }
        )
        return res;
    }

    return {scanQRCode}
}

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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值