婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Html5調用企業微信的實現

Html5調用企業微信的實現

熱門標簽:西安金倫外呼系統 智能語音電銷機器人客戶端 通遼地圖標注app 地圖標注沿海城市房價 高德地圖標注廁所 威海語音外呼系統平臺 地圖標注員工作內容 江西ai電銷機器人如何 中國地圖標注城市的

前言

基于H5的頁面調通 企業微信的API (已調通demo)

一、環境

企業微信管理員 添加應用 ,地址指向H5程序的地址。(企業微信通過內部游覽器訪問你自己發布出來的web端的手機項目,不做本文重點)

二、使用步驟

1.js引用

https://work.weixin.qq.com/api/doc/90000/90136/92455

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

2.config接口注入權限驗證配置

代碼如下:

wx.config({
    beta: true,// 必須這么寫,否則wx.invoke調用形式的jsapi會有問題
    debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
    appId: '', // 必填,企業微信的corpID
    timestamp: , // 必填,生成簽名的時間戳
    nonceStr: '', // 必填,生成簽名的隨機串
    signature: '',// 必填,簽名,見 附錄-JS-SDK使用權限簽名算法
    jsApiList: [] // 必填,需要使用的JS接口列表,凡是要調用的接口都需要傳進來
});

其中 appId 在企業微信上獲取,timestamp 時間戳,nonceStr 一個16位的隨機字符串,signature 這個簽名是最復雜的 (下面有講到配置方法)。

signature 這個 簽名 需要的如下(官網文檔)

參與簽名的參數有四個: noncestr(隨機字符串), jsapi_ticket(如何獲取參考“獲取企業jsapi_ticket”以及“獲取應用的jsapi_ticket接口”), timestamp(時間戳), url(當前網頁的URL, 不包含#及其后面部分)

將這些參數使用URL鍵值對的格式 (即 key1=value1&key2=value2…)拼接成字符串string1。
有兩個注意點:1. 字段值采用原始值,不要進行URL轉義;2. 必須嚴格按照如下格式拼接,不可變動字段順序。

jsapi_ticket=JSAPITICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=URL
然后對string1作sha1加密即可。
示例 :

假如有如下參數:

noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://mp.weixin.qq.com?params=value
步驟1. 將這些參數拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value
步驟2. 對string1進行sha1簽名,得到signature:

0f9de62fce790f9a083d5c99e95740ceb90c27ed

下面我來一一實現這些參數

3.生成access_token

請求方式: GET(HTTPS) 請求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET (其中 corpid 跟 corpsecret 都是通過企業微信獲取)

提示:這個get 請求 我一開始寫在前端js中,用Hbuilder(開發軟件)開發測試時,能正常返回信息,但是到游覽器才意識到有 跨域問題。后來將獲取access_token 的方法放到了 后端獲取 ,在丟給前臺就可以了。

			//前端
			$.ajax("自己的url", {
				dataType: 'json', //服務器返回json格式數據
				type: 'post', //HTTP請求類型
				headers: {
					'Content-Type': 'application/json'
				},
				
				//contentType: "application/json;charset=utf-8",
				success: function(data) {
					
					var sad = JSON.parse(data.d);
					 
					var token = sad.access_token;

					sunc(token);
				},
				error: function(xhr, type, errorThrown) {
					//異常處理;
					alert("進錯誤了");
					

				}
			})

		//后端 
		 public string test()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=自己的corpid&corpsecret=自己的corpsecret");
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            //接受返回來的數據
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));
            string retString = streamReader.ReadToEnd();
            streamReader.Close();
            stream.Close();
            response.Close();

            return retString;
        }

就實現了GET 請求獲取 access_token

4.生成jsapi_ticket

請求方式:GET(HTTPS)
請求URL:https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=ACCESS_TOKEN

與獲取access_token 相同 要放在后臺獲取 參數就是
access_token

5.生成noncestr 隨機字符串 (len隨機字符串長度)(方法是復制過來的)

//隨機字符串
		function randomString(len) {
			len = len || 32;
			var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默認去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
			var maxPos = $chars.length;
			var pwd = '';
			for (i = 0; i < len; i++) {
				pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
			}
			return pwd;
		}

5.生成timestamp時間戳

var timestamp = Date.parse(new Date());

6.生成signature 簽名

					var timestamp = Date.parse(new Date());
					// noncestr 隨機 字符串
					var noncestr = randomString(16);
					var qiname = getSignature(resyltt, noncestr, timestamp);


//獲取簽名
			function getSignature(ticket, noncestr, timestamp) {
				var url = window.location.href.split("#")[0];
				var jsapi_ticket = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp +
					"&url=" + url;
			

				return sha1(jsapi_ticket);
			}
			// 字符串加密成 hex 字符串
			function sha1(s) {
				var data = new Uint8Array(encodeUTF8(s))
				var i, j, t;
				var l = ((data.length + 8) >>> 6 << 4) + 16,
					s = new Uint8Array(l << 2);
				s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
				for (t = new DataView(s.buffer), i = 0; i < l; i++) s[i] = t.getUint32(i << 2);
				s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
				s[l - 1] = data.length << 3;
				var w = [],
					f = [
						function() {
							return m[1] & m[2] | ~m[1] & m[3];
						},
						function() {
							return m[1] ^ m[2] ^ m[3];
						},
						function() {
							return m[1] & m[2] | m[1] & m[3] | m[2] & m[3];
						},
						function() {
							return 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 < s.length; i += 16) {
					var o = m.slice(0);
					for (j = 0; j < 80; j++)
						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.unshift(t);
					for (j = 0; j < 5; j++) m[j] = m[j] + o[j] | 0;
				};
				t = new DataView(new Uint32Array(m).buffer);
				for (var i = 0; i < 5; i++) m[i] = t.getUint32(i << 2);

				var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function(e) {
					return (e < 16 ? "0" : "") + e.toString(16);
				}).join("");
				return hex;
			}


			function encodeUTF8(s) {
				var i, r = [],
					c, x;
				for (i = 0; i < s.length; i++)
					if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
					else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
				else {
					if ((x = c ^ 0xD800) >> 10 == 0) //對四字節UTF-16轉換為Unicode
						c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
						r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
					else r.push(0xE0 + (c >> 12 & 0xF));
					r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
				};
				return r;
			}

6.信息填入config

			wx.config({
						beta: true, // 必須這么寫,否則wx.invoke調用形式的jsapi會有問題
						debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
						appId: 'appId', // 必填,企業微信的corpID
						timestamp: timestamp, // 必填,生成簽名的時間戳
						nonceStr: noncestr, // 必填,生成簽名的隨機串
						signature: qiname, // 必填,簽名,見 附錄-JS-SDK使用權限簽名算法
						jsApiList: ['chooseImage'] // 必填,需要使用的JS接口列表,凡是要調用的接口都需要傳進來
					});

到這里config 就配置完成(下面就是寫的一個簡單的 彈出手機的相冊跟拍照功能)(已測試正常調用OK)。

//測試API 接口使用

	function hreftestce() {
			alert("開始執行");
			wx.chooseImage({
				success: function(res) {
					images.localId = res.localIds;
					alert('已選擇 ' + res.localIds.length + ' 張圖片');
				}
			});

		}

到此這篇關于Html5調用企業微信的實現的文章就介紹到這了,更多相關Html5調用企業微信內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:青海 眉山 營口 北海 晉中 河池 崇左 阜陽

巨人網絡通訊聲明:本文標題《Html5調用企業微信的實現》,本文關鍵詞  Html5,調用,企業,微信,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Html5調用企業微信的實現》相關的同類信息!
  • 本頁收集關于Html5調用企業微信的實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线免费不卡视频| 麻豆国产欧美一区二区三区| 在线一区二区三区四区五区| 久久免费看少妇高潮| 久久精品久久综合| 久久久久国产成人精品亚洲午夜| 麻豆精品视频在线观看| 久久只精品国产| 国产91丝袜在线18| 亚洲一级二级在线| 久久久另类综合| 午夜精品久久久久| 久久久高清一区二区三区| 在线精品视频免费播放| 国产尤物一区二区| 性做久久久久久免费观看| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩精品乱码av一区二区| 国产亚洲精品精华液| 欧美午夜精品理论片a级按摩| 免费日本视频一区| 日韩午夜中文字幕| 欧美一区二区三区视频在线| 亚洲老司机在线| 欧美精品电影在线播放| 风间由美一区二区三区在线观看| 最新国产の精品合集bt伙计| 欧美一级片免费看| 成人性生交大片免费看中文| 亚洲国产一区视频| 久久久青草青青国产亚洲免观| 韩国成人在线视频| 国产精品国产三级国产aⅴ入口 | 国产不卡视频在线观看| 日韩电影在线免费看| 国产精品女同一区二区三区| 日韩女优视频免费观看| 久久成人av少妇免费| 美女视频黄久久| 在线免费不卡电影| 色婷婷综合久久久久中文| 国产欧美一二三区| 99国产精品国产精品毛片| 日韩一区二区三区电影| 中文字幕乱码一区二区免费| 亚洲精品一区二区三区精华液| 国产精品区一区二区三区| 国产精品久久久一区麻豆最新章节| 久久99国产精品尤物| 日韩欧美的一区二区| 美国毛片一区二区三区| 91麻豆精品国产| 日韩—二三区免费观看av| 欧美日韩国产首页在线观看| 日本精品一级二级| 香蕉成人啪国产精品视频综合网| 欧美中文字幕一区二区三区 | 国产自产v一区二区三区c| 亚洲精品一线二线三线| 日韩精品中文字幕在线不卡尤物 | 国产电影精品久久禁18| 国产精品免费看片| 欧美日韩一区二区三区免费看| 美女视频黄 久久| 欧美国产日韩a欧美在线观看| 免费的成人av| 久久亚洲捆绑美女| 老色鬼精品视频在线观看播放| 久久网站热最新地址| 中文字幕久久午夜不卡| 欧美日韩一卡二卡| 成人av资源在线| 亚洲香肠在线观看| 日韩欧美一二三区| 色噜噜狠狠成人网p站| 日韩黄色免费网站| 久久国产精品99精品国产| 国产69精品久久久久毛片| 亚洲精品一卡二卡| 久久久无码精品亚洲日韩按摩| www.亚洲色图.com| 日韩精品91亚洲二区在线观看| 久久久国产午夜精品| 99re这里都是精品| 国产成人免费在线观看| 久久99深爱久久99精品| 欧美一级片在线看| 午夜精品aaa| 精品国产乱码久久久久久影片| 色偷偷一区二区三区| 精品成人免费观看| 欧美在线观看视频在线| 粉嫩高潮美女一区二区三区| 日韩不卡一二三区| 久久综合国产精品| 欧美一区二区三区视频免费| 午夜精品视频在线观看| 国产精品无码永久免费888| 91极品美女在线| www.亚洲在线| 国产尤物一区二区在线| 三级欧美在线一区| 亚洲国产高清在线| 欧美人与性动xxxx| jizz一区二区| 国产99久久久国产精品免费看 | 国产精品 欧美精品| 天天做天天摸天天爽国产一区| 精品国产一区二区亚洲人成毛片| 欧美一卡在线观看| 一区二区三区四区在线播放| 国产一区二区三区在线观看免费视频| 欧美精品色一区二区三区| 成人午夜av在线| www.欧美精品一二区| 91蜜桃在线免费视频| av福利精品导航| 日本精品视频一区二区三区| 波多野结衣欧美| 国产另类ts人妖一区二区| www.欧美日韩| 国产精品高潮呻吟| 亚洲特级片在线| 欧美日韩国产一二三| 91精品中文字幕一区二区三区| 国产黑丝在线一区二区三区| 伊人婷婷欧美激情| 久久久99精品免费观看不卡| 日韩欧美国产电影| 欧美激情一区在线| 亚洲少妇30p| 亚洲va韩国va欧美va精品| 另类小说色综合网站| 久久久久久久久免费| jlzzjlzz欧美大全| 美女视频黄频大全不卡视频在线播放| 蜜桃av一区二区| 激情综合色综合久久综合| 久99久精品视频免费观看| 欧美电视剧在线看免费| 欧美精品成人一区二区三区四区| 成人网页在线观看| 成人免费高清视频| 91麻豆福利精品推荐| 国产大陆亚洲精品国产| 欧美日韩aaaaaa| 亚洲国产成人一区二区三区| 日本不卡免费在线视频| 亚洲成人一区在线| 国产成人啪午夜精品网站男同| 99久久精品国产网站| 91精品国产乱码久久蜜臀| 2023国产精品| 一区二区日韩电影| 99国产精品久久久久久久久久 | 粉嫩久久99精品久久久久久夜| 亚洲成人动漫在线观看| 亚洲男女毛片无遮挡| 日韩不卡手机在线v区| 日韩精品中文字幕一区二区三区| 欧美一区二区三区喷汁尤物| 日韩一区二区三区在线| 椎名由奈av一区二区三区| 久久精品99久久久| 91激情五月电影| 日韩欧美一级精品久久| 亚洲日本欧美天堂| 精久久久久久久久久久| 欧美在线啊v一区| 国产农村妇女毛片精品久久麻豆| 日本欧美一区二区三区乱码| 91在线视频官网| 国产欧美日韩精品一区| 亚洲一区二区在线视频| 波多野结衣中文字幕一区二区三区 | 激情图片小说一区| www.在线欧美| 日韩亚洲欧美中文三级| 亚洲成av人片在www色猫咪| 成人午夜电影网站| 在线亚洲一区观看| 国产欧美一区二区精品秋霞影院| 免费观看久久久4p| 欧美日韩午夜在线| 中文字幕一区二区三区不卡在线 | 欧美日韩电影在线播放| 日韩一区有码在线| 激情文学综合网| 欧美一区二区三区男人的天堂| 国产精品污网站| 蜜臀av一区二区在线免费观看| 欧美亚洲国产一区在线观看网站| 欧美国产日韩精品免费观看| 看国产成人h片视频| 欧美一区二区视频在线观看2020 | 欧美日韩一级视频| 26uuu另类欧美| 欧美美女一区二区三区| 亚洲综合色自拍一区| 欧美午夜寂寞影院|