H5与企业微信jssdk集成

一、公众号设置

注册企业微信,在应用与小程序栏目中,设置可信域名,配置公众号菜单。可信域名不得不说下,在最初开发时,认为设置并验证后,微信认证接口会实现跨域请求,其实并没有。所以全在H5端还得配合服务端完成票据获取等操作。

二、开发步骤

  1. 获取accesstoken
    接口地址 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET , 获取到的token的有效时间为2小时
    H5不能直接访问,需要服务端通过代理访问

    //author herbert QQ:464884492
    getAccessToken() {
    // 判断是否缓存有
    return new Promise((resolve, reject) => {
    var access_token = localStorage.getItem("accessToken");
    var expires = localStorage.getItem("expires_accessToken");
    if (expires > new Date().getTime() - 2000) {
    resolve(access_token);
    return;
    }
    let accessTokenUrl = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + this.groupId + "&corpsecret=" + this.secretId; // fetch(accessTokenUrl, { method: "GET" })
    fetch(this.porxyUrl, {
    method: "POST",
    body: JSON.stringify({
    method: "GET",
    url: accessTokenUrl
    })
    }).then(resp => {
    return resp.json()
    }).then(data => {
    if (data.errcode == 0) {
    //保存本次获取的accessToken
    localStorage.setItem("accessToken", data.access_token);
    localStorage.setItem("expires_accessToken", new Date().getTime() + data.expires_in * 1000);
    resolve(data.access_token);
    }
    }).catch(data => {
    reject();
    })
    });
    },
  1. 获取ticket

    使用上一步骤获取到的access_token获取ticket,接口地址https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN
    H5不能直接访问,需要服务端通过代理访问

    //author herbert QQ:464884492
    getTicket() {
    return new Promise((resolve, reject) => {
    var ticket = localStorage.getItem("ticket");
    var expires = localStorage.getItem("expires_ticket");
    if (expires > new Date().getTime() - 2000) {
    resolve(ticket);
    return;
    }
    let ticketUrl = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + localStorage.getItem("accessToken"); //fetch(ticketUrl, { method: "GET" })
    fetch(this.porxyUrl, {
    method: "POST",
    body: JSON.stringify({
    method: "GET",
    url: ticketUrl
    })
    }).then(resp => {
    return resp.json()
    }).then(data => {
    if (data.errcode == 0) {
    //保存本次获取的accessToken
    localStorage.setItem("ticket", data.ticket);
    localStorage.setItem("expires_ticket", new Date().getTime() + data.expires_in * 1000);
    resolve(data.ticket);
    }
    }).catch(data => {
    reject();
    })
    });
    },
  1. 生成签名
    文档地址 https://work.weixin.qq.com/api/doc#90000/90136/90506
    需要将参数构造如下格式JSAPITICKET&noncestr=NONCESTR×tamp=TIMESTAMP&url=URL,然后做SHA1算法获取字符串哈希值。其中NONCESTR是一个随机字符串,URL不能包含#以及后边的部分

    //author herbert QQ:464884492
    getSignature(timestamp, ticket) {
    let url = window.location.href.split("#")[0];
    let jsapi_ticket = "jsapi_ticket=" + ticket + "&noncestr=" + timestamp + "×tamp=" + timestamp.substr(0, 10) + "&url=" + url;
    this.printStatuInfo("签名原始信息:" + jsapi_ticket);
    let sha1Str = new jsSHA(decodeURIComponent(jsapi_ticket), "TEXT");
    return sha1Str.getHash("SHA-1", "HEX");
    }
  1. 初始微信配置信息
    根据前边几个步骤获取的参数,初始微信配置信息

    //author herbert QQ:464884492
    wx.config({
    beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: wxUtils.groupId, // 必填,企业微信的corpID
    timestamp: timestamp.substr(0, 10), // 必填,生成签名的时间戳
    nonceStr: timestamp, // 必填,生成签名的随机串
    signature: sig,// 必填,签名,见附录1
    jsApiList: ["scanQRCode"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
  1. 调用api
    初始完成后,需要立即调用api需要在 wx.ready函数中注册回调函数,如果是不立即调用可以忽略。以下为调用微信扫一扫功能

    //author herbert QQ:464884492
    wx.scanQRCode({
    desc: 'scanQRCode desc',
    needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
    scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
    success: function (res) {
    // 回调
    wxUtils.printStatuInfo("扫描信息:" + JSON.stringify(res));
    lblCostTime.innerText = "单次扫码总共花费:【" + (new Date().getTime() - timeStar) + "】ms";
    },
    error: function (res) {
    if (res.errMsg.indexOf('function_not_exist') > 0) {
    alert('版本过低请升级')
    }
    }
    });

三、总结

H5集成微信JSSDK功能虽然简单,但是该有的步骤一个都不能少。在最初开发中遇到了以下几个问题:

  1. 获取token与ticket存在跨域问题,需要配置一个代理完成

  2. 有时生成的签名与官方有差别,官方提供了一个测试地址https://work.weixin.qq.com/api/jsapisign

有喜欢聊技术朋友也欢迎入群,若二维码失效可加我微信回复**前端**

H5与企业微信jssdk集成的更多相关文章

  1. 企业微信JS-SDK实现会话聊天功能

    vue引入企业微信JS-SDK实现会话聊天功能 这两天在做一个对接企业微信实现会话聊天的功能, 发现企业微信文档这块儿做的不是特别详细,网上搜索也没找到特别完整的流程. 期间也踩了不少的坑, 在此进行 ...

  2. 企业微信jssdk分享接口管理系统

    服务项目 新手技术咨询 企业技术咨询 定制开发 服务说明 QQ有问必答 QQ.微信.电话 微信开发.php开发,网站开发,系统定制,小程序开发 价格说明 200元/月 1000/月 商议       ...

  3. ionic+微信js-sdk集成初步融合,在子路由页引入js操作dom节点

    .controller('yaoheCtrl',['$scope',function ($scope) { $scope.$watch('$viewContentLoaded',function(ev ...

  4. Java企业微信开发_07_JSSDK多图上传

    一.本节要点 1.1可信域名 所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),可在企业微信的管理后台“我的应用”里设置应用可信域名.这个域名必须要通过ICP备案,不然jssdk会配置失 ...

  5. vue 开发系列(六) 企业微信整合

    概述 手机端程序可以和企业微信进行整合,我们也可以使用企业微信JSSDK功能,实现一些原生的功能. 整合步骤 在整合之前需要阅读 整合步骤. http://work.weixin.qq.com/api ...

  6. 01: 企业微信API开发前准备

    目录:企业微信API其他篇 01: 企业微信API开发前准备 02:消息推送 03: 通讯录管理 04:应用管理 目录: 1.1 术语介绍 1.2 开发步骤 1.1 术语介绍返回顶部 参考文档:htt ...

  7. 使用JSSDK集成微信分享遇到的一些坑

    h5项目中需要集成微信分享,以实现自定义标题.描述.图片等功能.结果遇到了很多坑. 准备工作 务必详细阅读微信JS-SDK说明文档 需要后端支持 强烈建议下载使用微信web开发者工具 按文档配置好公众 ...

  8. 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索

    本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...

  9. myEclipse+Spring boot+Hbuilder+jwt Token+mongoDB+企业微信H5开发

    企业微信应用的H5开发 1.参考文档:weUI:http://jqweui.com/ 2.企业微信接口文档:https://work.weixin.qq.com/api/doc#10029 3.百度地 ...

随机推荐

  1. Apache 80端口被占用

    前段时间停止了Apache,结果在打开的时候发现无法打开,80端口被占用,于是win+r 运行cmd 输入netstat -ano 可以看到80端口被PID4占用,于是打开任务管理器-进程-查看,选择 ...

  2. rpm和yum软件管理

    rpm简介 数据库管理工具,通过读取数据库,判断软件是否安装,如已安装可读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package Manager(递归 ...

  3. POSIX信号量

    DESCRIPTION POSIX 信号量允许进程间和线程间同步他们的操作. 一个信号量是一个整型(integer),其值不能小于0. 信号量允许2中操作:给信号量的值加1(sem_post); 给信 ...

  4. AspNet Core下利用 app-metrics+Grafana + InfluxDB实现高大上的性能监控界面

    在日常系统工作中,我们为了洞察系统的问题和运作情况通常会记录日志的方式来进行分析,但是在很多情况下都是被动的在出问题后才会去查日志.在很多时候,我们可能更需要相对实时的了解整个系统或者某一时段的运行的 ...

  5. spark DataFrame 读写和保存数据

    一.读写Parquet(DataFrame) Spark SQL可以支持Parquet.JSON.Hive等数据源,并且可以通过JDBC连接外部数据源.前面的介绍中,我们已经涉及到了JSON.文本格式 ...

  6. Windows环境下编译Assimp库生成Android可用的.so或.a文件

    在做项目过程中需要使用Assimp这个3D模型读取库来读取obj格式的模型,因为项目是基于Android平台,采用NDK开发,所以就打算编译Assimp库并生成.so文件.本文使用Assimp-v.5 ...

  7. Love Live!-01字典树启发式合并

    链接:https://ac.nowcoder.com/acm/contest/201/D?&headNav=www 思路:题目要求的是每个等级下的最大 简单路径中的最大异或值,那么我们为了保证 ...

  8. 爬虫之urllib库

    一.urllib库简介 简介 Urllib是Python内置的HTTP请求库.其主要作用就是可以通过代码模拟浏览器发送请求.它包含四个模块: urllib.request :请求模块 urllib.e ...

  9. 树莓派虚拟环境手动安装HA

    树莓派手动安装 https://www.home-assistant.io/docs/installation/raspberry-pi/ sudo apt-get update sudo apt-g ...

  10. NOIP2012提高组day2 T2借教室

    这题骗分可以骗到满分(可能是数据不太强给强行过去了) 这道题如果是按照题意去模拟用循环去修改区间的话只有45分,正解是二分+差分数组,骗分也是差分数组但是没有使用二分,时间复杂度在最坏的情况下是O(n ...