开启左侧

企微侧边栏项目搭建和初始化授权登录

[复制链接]
在线会员 wc4 发表于 2024-5-25 12:05:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
布景:需要是买通企微客户手刺取公司背景办理体系网校战crm的绑定战疑息检察,因为公司主要手艺栈为vue2且有部门名目自界说表单启拆组件能够复用,以是新名目仍是以vue2+ant design框架拆修

1.初初准备

    背景办理体系增加企微侧边栏菜单,并把侧边栏页里链交战自界说设置的表单id联系关系动作一条数据。
    登录企微背景创立使用、设置到谈天东西栏模块使用第一面的页里链交并拼交企业主体id使用id
    网页受权及JS-SDK、企业微疑受权登录等模块设置受权域名利剑名单并下载供给的txt文献后绝接给运维搁进前端效劳器根目次截至域名宁静校验。
    最初要忘患上勾选“客户取高低游”里客户tab的API可挪用交心的使用。
    拆修名目准备,使用vue2+ant design+less拆修(sass版原抵触成就没有友好非须要没有举荐),使用了ant design的长处是能够年夜水平满意UI战产物的需要且契合旧名目组件的复用,但是短处是不挪动真个友好提醒战中小屏下UI框架被干了处置,针对于那些成就需要干适配的劣化战组件的启拆。
    受权经调研后接纳战微疑公家号一致的方法,即跳转指定链交后获得code跟效劳端交心调换目前用户疑息。
2.初初化名目

    使用vue2号令创立名目,并收拾整顿相关文献:
    1. vue create sd-web-wecom-sidebar
    复造代码
    设置名目env文献,用于辨别多名目多情况。
    新修代码堆栈gitlab,并提接到长途代码堆栈。
    供给env文献名给运维设置到jenkins完毕主动化布置。
3.名目开辟

    起首是专用接互组件战款式启拆。
    加入名目要能保存agentId战corpId,那面正在链交地点栏上获得并保存vuex便可,至于写的职位,尔是写正在router文献的路由保卫。(写正在App.vue没有生效,写正在main.js也能够)
    登录鉴别,能够使用可否存了userInfo截至鉴别,已登录则跳转如下链交获得code并挪用效劳端交心调换userInfo,留神写佳沉定背地点逻辑。假设已经登录则施行后绝操纵。
    1. location.href =`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${corpId}&redirect_uri=${location.href}&response_type=code&scope=snsapi_base&agentid=${agentId}#wechat_redirect`
    复造代码
    挪用后端交心,获得signature等疑息。
  • 因为兼容成就,需要共时挪用二个企微初初化api,初初化后才可挪用后绝企微api:
    1. wx.config({beta:true,//必需 这样写,不然wx.invoke挪用方法的jsapi会有成就debug:false,// 启开调试情势,挪用的统统api的前去值会正在客户端alert进去,若要检察传进的参数,能够正在pc端翻开,参数疑息会颠末log挨出,仅正在pc端时才会挨印。appId: corpId,// 必挖,企业微疑的corpIDtimestamp: timestamp,// 必挖,天生署名的时间戳nonceStr: nonceStr,// 必挖,天生署名的随机串signature: signature,// 必挖,署名,睹 附录-JS-SDK使用权力署名算法
    2.     jsApiList // 必挖,需要使用的JS交心列表,但凡要挪用的交心皆需要传进来})
    3. wx.ready(asyncfunction(){resolve()})
    4. wx.error((res)=>{this.$alert('wx.config fail')
    5.     console.log('wxConfig',res)reject(res)})
    复造代码
    1. wx.agentConfig({corpid: corpId,// 必挖,企业微疑的corpid,必需取目前登录的企业不合agentid: agentId,// 必挖,企业微疑的使用id (e.g. 1000247)timestamp: timestamp,// 必挖,天生署名的时间戳nonceStr: nonceStr,// 必挖,天生署名的随机串signature: signature,// 必挖,署名,睹附录-JS-SDK使用权力署名算法
    2.     jsApiList,success:function(res){resolve(res)},fail:(res)=>{this.$alert('wx.agentConfig fail')reject('agentConfig',res)if(res.errMsg.indexOf('function not exist')>-1){this.$alert('版原太低请升级')}}})
    复造代码
  • 当时初化完毕后就能够使用如下获得目前对于话的内部客户id了(initAgentConfig为启拆的初初化检测):
    1. exportasyncfunctiongetCurExternalContact(retry){awaitinitAgentConfig()returnnewPromise((resolve, reject)=>{
    2.     wx.invoke('getCurExternalContact',{},asyncfunction(res){if(res.err_msg ==='getCurExternalContact:ok'){const userId = res.userId // 前去目前内部联系人userId// co妹妹it('SET_WX_USER_ID', userId)resolve(userId)}else{if(retry !==true){
    3.           store.co妹妹it('SET_INIT_AGENT_CONFIG',false)resolve(awaitgetCurExternalContact(true))}else{// 毛病处置reject(res.err_msg)}}})})}
    复造代码
    至此,名目的根本拆修、受权战初初化已经完毕。
    后绝持续启拆劣化名目,供给给其余小同伴使用。
碰到的一面小成就:
    需要完毕初初化名目获得地点栏参数并保存一次企微疑息,因为App.vue是已备案的组件,且名目一加入便跳转了crmUserInfo页里,以是App.vue其实不能获得到企微疑息。
    思路转化到全部进口main.js,使用new URLSearchParams(window.location.search),共同get办法能够获得到,但是关于router.params的**“/”**参数没有太友好,该当只可引进router真例截至使用。最初是挑选了router文献里路由保卫的方法完毕。
  • ant design框架的日期时间挑选框等均是英文,处置方法:
    1. <!-- App.vue -->
    2. <template>
    3.   <a-config-provider :locale="locale">
    4.     <div id="app">
    5.       <router-view />
    6.     </div>
    7.   </a-config-provider>
    8. </template>
    9. <script>
    10. import zhCN from "ant-design-vue/lib/locale-provider/zh_CN";
    11. export default {
    12.   name: "app",
    13.   data() {
    14.     return {
    15.       locale: zhCN,
    16.     };
    17.   },
    18. };
    19. </script>
    复造代码
    TinymceEditor富文原报错Uncaught SyntaxError: Unexpected token ‘<’,定位并简略设置代码处置。api烧毁警告可设置deprecation_warnings: false处置。
    其余企微受权成就,能够参考民间提醒处置。没有限于已设置利剑名单、设置参数毛病、已走cache招致交心挪用次数太多……
    怎样启开企微侧边栏调试情势?共时按Ctrl+Alt+Shift+D便可
  • 企微侧边栏怎样避免页里缩搁?能够测验考试如下办法(留神客户端会有一段时间慢存,能够正在树立-通用-保存空间-清理截至慢存考证):
    1. <metaname="viewport"content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    复造代码
    1. body{touch-action: manipulation;}
    复造代码
    1. <script>// 禁用用户缩搁
    2.     window.addEventListener('touchstart',(event)=>{if(event.touches.length >1){
    3.     event.preventDefault();}},{passive:false});let lastTouchEnd =0;
    4.     window.addEventListener('touchend',(event)=>{const now =newDate().getTime();if(now - lastTouchEnd <=300){
    5.     event.preventDefault();}
    6.     lastTouchEnd = now;},{passive:false});</script>
    复造代码
本文链交:xiaokar专客
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )