企业微信能否实现h5,企业微信发送html消息
前言
H5页面调用企业微信的API(demo已调用)
一、环境
企业微信管理员添加应用,地址指向H5程序的地址。(企业微信通过内部浏览器访问自己发布的web端手机项目,本文不做重点介绍)
二、使用步骤
1.js引用
https://work.weixin.qq.com/api/doc/90000/90136/92455
script= 3358res.wx.qq.com/open/js/jweixin-1.2.0.js/script:
2.config接口注入权限验证配置
代码如下:
Wx.config({ beta: true,//必须这样写,否则以wx.invoke调用的形式出现jsapi的问题。debug: true,//开启调试模式,所有被调用API的返回值都会在客户端预警。要查看传入的参数,可以在pc端打开,参数信息会通过log录入,只在pc端打印。appId: ,//必选,corpID时间戳://企业微信必选,时间戳nonceStr: ,//签名生成必选,随机字符串签名: ,//签名必选,见附录-JS-SDK使用权签名算法jsApiList: [] //必选,必选其中,AppId在企业微信上获取,时间戳时间戳,nonceStr为16位随机字符串,签名为最复杂的签名(配置方法如下所述)。
signature本签名需要以下(官网文档)
签名有四个参数:noncestr(随机字符串)、jsapi_ticket(如何获取引用“获取企业的jsapi_ticket”和“获取应用的jsapi_ticket接口”)、timestamp(时间戳)和url(当前网页的URL,不包括#及其以下部分)
使用URL键-值对的格式(即key1=value1key2=value2…)将这些参数拼接成一个字符串string1。
有两点需要注意:1。使用字段的原始值,不要对URL进行转义;2.必须严格按照以下格式拼接,场序不可更改。
jsapi _ ticket=JSAPITICKETnoncestr=non cast timestamp=timestamp URL=URL
然后对string1执行sha1加密。
示例:
如果有以下参数:
non castr=wm3 wzytpz 0 wzccnw
jsapi _ ticket=sm 4 aovdwfpe 4d xk xges 8 vmcpggvi 4 C3 VM 0 p 37 wvucfvkvay _ 90 u 5h 9 nbslyy 3-Sl-HHT DFL 2 fzfy 1 aochkp 7 qg
时间戳=1414587457
url=http://mp.weixin.qq.com?params=值
1.将这些参数拼接成一个字符串string1:
jsapi _ ticket=sm 4 aovdwfpe 4d xk xges 8 vmcpggvi 4 C3 VM 0 p 37 wvucfvkvay _ 90 u 5h 9 nbslyy 3-Sl-HHT DFL 2 fzfy 1 aochkp 7 qgnoncestr=WM 3 wzytpz 0 wzccnwtimestamp=1414587457 URL=http://MP . weixin . QQ . com?params=值
2.sha1签署string1以获取签名:
0 F9 de 62 FCE 790 F9 a 083 D5 c 99 e 95740 CEB 90 c 27 ed
让我逐一实现这些参数。
3.生成access_token
请求方式:GET(HTTPS)请求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken? corp id=idcorpsecret=secret(corp id和corpsecret均通过微信获取)
提示:我一开始是用前端js写的这个get请求,用Hbuilder(开发软件)开发测试的时候可以正常返回信息,但是直到浏览器才意识到有跨域问题。后来我把获取access_token的方法放在后端获取,直接扔到前台就行了。
//前端$.ajax(自己的url ,{dataType: json ,//服务器返回数据格式数据类型: post ,//HTTP请求类型头:{ Content-Type : application/JSON },//内容类型: application/JSON;charset=utf-8 ,success:function(data){ var sad=JSON。解析(数据。d);var token=sad.access _ tokensunc(代币);},error: function(xhr,type,errorThrown) {//异常处理;警报(进错误了);}})//后端public string test(){ http WebRequest request=(http WebRequest)WebRequest .创建( https://qyapi。微信。QQ。com/CGI-bin/gettoken?corpid=自己的corpidcorpsecret=自己的公司机密’);请求. Method= GET请求content type= text/html;charset=UTF-8 ;//接受返回来的数据网络流响应=(HttpWebResponse)请求GetResponse();流流=响应GetResponseStream();StreamReader streamReader=新的StreamReader(流,编码获取编码( utf-8 );string retString=streamReader .ReadToEnd();streamReader .close();溪流. close();回应. close();返回retString}就实现了得到请求获取访问令牌
4.生成jsapi_ticket
请求方式:获取(HTTPS)
请求网址:https://qyapi。微信。QQ。com/CGI-bin/ticket/get?访问令牌=访问令牌
与获取访问令牌相同要放在后台获取参数就是
访问令牌
5.生成noncestr 随机字符串 (len随机字符串长度)(方法是复制过来的)
//随机字符串函数random string(len){ len=len 32;var $ chars= abcdefghjkmnpqrstwyzabcdefhijkmnprstwxyz 2345678 ;/****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 * * * */var maxPos=$ chars。长度;var pwd=for(I=0;我lenI){ pwd=$ chars。charat(数学。地板(数学。random()* maxPos));}返回pwd}
5.生成timestamp时间戳
var timestamp=Date。parse(new Date());
6.生成signature 签名
变量时间戳=日期。parse(new Date());//非中心随机字符串var non castr=randomString(16);var qiname=getSignature(resyltt,noncestr,timestamp);//获取签名函数getSignature(票证、非中心、时间戳){ var URL=window。位置。href。split( # )[0];var jsapi _ ticket= jsapi _ ticket= ticket non centr= non centr timestamp= timestamp URL= URL;返回sha1(jsapi _ ticket);}//字符串加密成十六进制字符串函数sha1(s){ var data=新uint 8数组(编码utf8(s))var I,j,t;var l=((data.length 8) 6 4) 16,s=新uint 8数组(L2);s . set(新的uint 8数组(数据。buffer)),s=新的uint 32数组(s . buffer);for (t=新数据视图(s.buffer),I=0;I l;I)s[I]=t . getu int 32(I ^ 2);s[数据。长度2]=0x 80(24-(数据。长度3)* 8);s[l - 1]=数据长度3;var w=[],f=[function(){ return m[1]m[2] ~ m[1]m[3];},function(){返回m[1]^ m[2]^ m[3];},function(){ return m[1]m[2] m[1]m[3] m[2]m[3];},function(){返回m[1]^ m[2]^ m[3];}],rol=function(n,c){ return n c n(32-c);},k=[1518500249,1859775393,-1894007588,-899497514],m=[1732584193,-271733879,null,null,-1009589776];m[2]=~m[0],m[3]=~ m[1];for(I=0;长度;I=16){ var o=m . slice(0);for(j=0;j 80j )w[j]=j 16?s[I j]:rol(w[j-3]^ w[j-8]^ w[j-14]^ w[j-16],1),t=rol(m[0],5)f[j/20 0]()m[4]w[j]k[j/20 0] 0,m[1]=rol(m[1],30),m.pop(),m . un shift(t);for(j=0;j 5;j)m[j]=m[j]o[j] 0;};t=新数据视图(新Uint32Array(m)).缓冲);for(var I=0;i5;I)m[I]=t . getu int 32(I ^ 2);var hex=数组。原型。地图。打电话(新Uint8Array(新Uint32Array(m)).缓冲剂),函数{return (e 16?0 : )e . tostring(16);}).联接("");返回十六进制;}函数encodeUTF8(s) {var i,r=[],c,x;for(I=0;长度;I)if((c=s . charcode at(I))0x 80)r . push(c);else if(c0x 800)r . push(0xc 0(c 60x1F),0x 80(c0x3F));else {if ((x=c ^0xD800) 10==0) //对四字节UTF-16转换为unicode=(X10)(s . charcodeat(i)^0x DC 00)0x 10000,r.push(0xF0 (c 180x7),0x 80(c 120x3f));else r . push(0x E0(c 120xF));r.push(0x80 (c 60x3F),0x 80(c0x3F));};return r;}
6.信息填入config
wx.config({beta: true,//必须这么写,否则wx.invoke调用形式的支付插件会有问题调试:真,//开启调试模式,调用的所有美国石油学会(美国石油协会)的返回值会在客户端警报出来,若要查看传入的参数,可以在个人计算机端打开,参数信息会通过原木打出,仅在个人计算机端时才会打印appId: appId ,//必填,企业微信的corpIDtimestamp:时间戳,//必填,生成签名的时间戳非中心:非中心,//必填,生成签名的随机串签名:qiname,//必填,签名,见附录-JS-SDK使用权限签名算法jsApiList: [chooseImage] //必填,需要使用的射流研究…接口列表,凡是要调用的接口都需要传进来});到这里配置就配置完成(下面就是写的一个简单的弹出手机的相册跟拍照功能)(已测试正常调用好的。
//测试应用程序接口接口使用函数hreftestce() {alert(开始执行);wx。选择图像({ success:function(RES){ images。localid=RES . localids警报(已选择 res.localIds.length 张图片);}});}
到此这篇关于Html5调用企业微信的实现的文章就介绍到这了,更多相关Html5调用企业微信内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。