当前位置: 首页 > news >正文

网站的面包屑怎么做的/怎么推广产品最有效

网站的面包屑怎么做的,怎么推广产品最有效,html5 css3响应式网站模板,wordpress微信带头像分享第一步:注册钉钉企业账号 打开链接:https://oa.dingtalk.com/#/login,注册账号即可 第二步:创建应用 以创建e应用为例: 还需要授权一个开发人员,并获取CorpSecret,需要把corpId和CorpSecret作为参数请求api…

第一步:注册钉钉企业账号

打开链接:https://oa.dingtalk.com/#/login,注册账号即可

 

第二步:创建应用

以创建e应用为例:

 

还需要授权一个开发人员,并获取CorpSecret,需要把corpId和CorpSecret作为参数请求api接口获取AccessToken,后面的所有接口都需要AccessToken

第三步:接入接口

一、获取token

 1 const corpid = 'dingd***587da6ee21d35c2f4657eb63***';
 2 const corpsecret = '*********';
 3 const requestPromise = require("request-promise");
 4 
 5 const getAccessToken = async (corpid, corpsecret) => {
 6   // https://oapi.dingtalk.com/gettoken?corpid={corpid}&corpsecret={corpSecret或开发授权码}
 7   const result = await requestPromise({ uri: 'https://oapi.dingtalk.com/gettoken', qs: { corpid, corpsecret } });
 8   console.log(result);
 9 };
10 getAccessToken(corpid, corpsecret);

二、promise请求接口封装

function request(url, method, params, headers = {}) {const options = {url,method,// timeout: 3000,headers: Object.assign(headers, {'content-type': 'application/json',}),rejectUnauthorized: false, // httpsjson: true,};switch (method) {case 'POST':case 'PUT':options.body = params;break;case 'GET':case 'DELETE':options.qs = params;break;default:break;}return new Promise((resolve, reject) => {request(options, (error, response, body) => {if (!error) {resolve(body);} else {reject(error);}});});.catch (error => ({msg: error.message,}));
}

  

三、接口见代码(后端使用koa.js)

const host = 'https://oapi.dingtalk.com/';
/**发送工作通知消息*/
router.post('/api/dingtalkserve/asyncsend_v2', async ({ request, response, session }) => {try {let body = request.fields;if (!body['userid_list'] && !body['dept_id_list'] && !body['to_all_user']) {return response.fail({'msg': "userid_list,dept_id_list, to_all_user必须有一个不能为空"});}if (!body['msg']) {return response.fail({'msg': "msg不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {agent_id: parseInt(agentId4EP),msg: {"msgtype": "text","text": {"content": body['msg']}}};body['to_all_user'] ? params['to_all_user'] = true : false;body['dept_id_list'] ? params['dept_id_list'] = body['dept_id_list'] : "";body['userid_list'] ? params['userid_list'] = body['userid_list'] : "";let messageRes = await request(`${host}topapi/message/corpconversation/asyncsend_v2?access_token=${accessToken}`, 'POST', params);return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取工作通知消息的发送进度*/
router.post('/api/dingtalkserve/getsendprogress', async ({ request, response, session }) => {try {let body = request.fields;if (!body['task_id']) {return response.fail({'msg': "task_id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {agent_id: parseInt(agentId4EP),task_id: body['task_id']};let messageRes = await request(`${host}topapi/message/corpconversation/getsendprogress?access_token=${accessToken}`, 'POST', params);return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取工作通知消息的发送结果*/
router.post('/api/dingtalkserve/getsendresult', async ({ request, response, session }) => {try {let body = request.fields;if (!body['task_id']) {return response.fail({'msg': "task_id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {agent_id: parseInt(agentId4EP),task_id: body['task_id']};let messageRes = await request(`${host}topapi/message/corpconversation/getsendresult?access_token=${accessToken}`, 'POST', params);return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取子部门ID列表*/
router.post('/api/dingtalkserve/list_ids', async ({ request, response, session }) => {try {let body = request.fields;if (!body['id']) {return response.fail({'msg': "父部门id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,id: body['id']};let messageRes = await request(`${host}department/list_ids`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取部门列表*/
router.post('/api/dingtalkserve/list', async ({ request, response, session }) => {try {let body = request.fields;if (!body['id']) {return response.fail({'msg': "父部门id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,id: body['id']};body['lang'] ? params['lang'] = body['lang'] : "";body['fetch_child'] ? params['fetch_child'] = true : false;let messageRes = await request(`${host}department/list`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取部门详情*/
router.post('/api/dingtalkserve/departmentget', async ({ request, response, session }) => {try {let body = request.fields;if (!body['id']) {return response.fail({'msg': "部门id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,id: body['id']};body['lang'] ? params['lang'] = body['lang'] : "";let messageRes = await request(`${host}department/get`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 查询部门的所有上级父部门路径*/
router.post('/api/dingtalkserve/list_parent_depts_by_dept', async ({ request, response, session }) => {try {let body = request.fields;if (!body['id']) {return response.fail({'msg': "部门id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,id: body['id']};let messageRes = await request(`${host}department/list_parent_depts_by_dept`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});
/** 查询指定用户的所有上级父部门路径*/
router.post('/api/dingtalkserve/list_parent_depts', async ({ request, response, session }) => {try {let body = request.fields;if (!body['userId']) {return response.fail({'msg': "用户id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,userId: body['userId']};let messageRes = await request(`${host}department/list_parent_depts`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取企业员工人数*/
router.post('/api/dingtalkserve/get_org_user_count', async ({ request, response, session }) => {try {let body = request.fields;if (!body['onlyActive']) {return response.fail({'msg': "激活钉钉状态不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,onlyActive: body['onlyActive']};let messageRes = await request(`${host}user/get_org_user_count`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取用户详情*/
router.post('/api/dingtalkserve/userinfo', async ({ request, response, session }) => {try {let body = request.fields;if (!body['userid']) {return response.fail({'msg': "userid不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,userid: body['userid']};body['lang'] ? params['lang'] = body['lang'] : "";let messageRes = await request(`${host}user/get`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取部门用户userid列表*/
router.post('/api/dingtalkserve/getDeptMember', async ({ request, response, session }) => {try {let body = request.fields;if (!body['deptId']) {return response.fail({'msg': "部门id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,deptId: body['deptId']};let messageRes = await request(`${host}user/getDeptMember`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取部门用户(详情)*/
router.post('/api/dingtalkserve/listbypage', async ({ request, response, session }) => {try {let body = request.fields;if (!body['department_id']) {return response.fail({'msg': "部门id不能为空"});}if (!body['offset']) {return response.fail({'msg': "偏移量不能为空"});}if (!body['size']) {return response.fail({'msg': "每页数量不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,department_id: body['department_id'],offset: parseInt(body['offset']),size: parseInt(body['size'])};let messageRes = await request(`${host}user/listbypage`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 根据unionid获取userid*/
router.post('/api/dingtalkserve/getUseridByUnionid', async ({ request, response, session }) => {try {let body = request.fields;if (!body['unionid']) {return response.fail({'msg': "unionid不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,unionid: body['unionid']};let messageRes = await request(`${host}user/getUseridByUnionid`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取通讯录权限范围*/
router.post('/api/dingtalkserve/authScopes', async ({ request, response, session }) => {try {// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken};let messageRes = await request(`${host}/auth/scopes`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 创建群*/
router.post('/api/dingtalkserve/createChat', async ({ request, response, session }) => {try {let body = request.fields;if (!body['name']) {return response.fail({'msg': "群名称不能为空"});}if (!body['owner']) {return response.fail({'msg': "群主userid不能为空"});}if (!body['useridlist']) {return response.fail({'msg': "群成员不能为空"});}if (body['useridlist'].indexOf(body['owner']) < 0) {return response.fail({'msg': "群主必须为群成员"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {name: body['name'],owner: body['owner'],useridlist: body['useridlist'].split(",")};let messageRes = await request(`${host}chat/create?access_token=${accessToken}`, 'POST', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 获取群聊会话信息*/
router.post('/api/dingtalkserve/chatInfo', async ({ request, response, session }) => {try {let body = request.fields;if (!body['chatid']) {return response.fail({'msg': "群id不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,chatid: body['chatid']};let messageRes = await request(`${host}chat/get`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 发送群消息*/
router.post('/api/dingtalkserve/chatSend', async ({ request, response, session }) => {try {let body = request.fields;if (!body['chatid']) {return response.fail({'msg': "群id不能为空"});}if (!body['msg']) {return response.fail({'msg': "群消息不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {chatid: body['chatid'],msg: {"msgtype": "text","text": {"content": body['msg']}}};let messageRes = await request(`${host}chat/send?access_token=${accessToken}`, 'POST', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});/** 查询群消息已读人员列表*/
router.post('/api/dingtalkserve/getReadList', async ({ request, response, session }) => {try {let body = request.fields;if (!body['messageId']) {return response.fail({'msg': "messageId不能为空"});}if (!body['cursor']) {return response.fail({'msg': "cursor不能为空"});}if (!body['size']) {return response.fail({'msg': "每页数量不能为空"});}// 获取TOKENlet accessToken = await getAccessToken();let params = {access_token: accessToken,messageId: body['messageId'],cursor: body['cursor'],size: parseInt(body['size']),};let messageRes = await request(`${host}chat/getReadList`, 'GET', params);console.log("messageRes", messageRes)return response.success({ 'data': messageRes });} catch (e) {console.log(e);return response.fail({'msg': e});}
});

以上针对的是钉钉企业内部应用

如果是ISV开发者应用,则需要通过接口获取企业的基本信息

nodejs签名实现

/** 把timestamp + "\n" + suiteTicket当做签名字符串, suiteSecret做为签名秘钥,*  使用HmacSHA256算法计算签名, 然后进行Base64 encode获取最后结果。*  然后把签名参数再进行urlconde, 加到请求url后面。*/
const crypto = require('crypto');
const accessKey = 'suiteqh0ljtdheuee****'; // suiteKey
const suiteSecret = '******';
const suiteTicket = 'TestSuiteTicket';
const timestamp = Date.now();
const stringToSign = timestamp + "\n" + suiteTicket;const hash = crypto.createHmac('sha256', suiteSecret).update(stringToSign, 'utf8').digest().toString('base64');
console.log(hash);
var request = require("request");
var urlencode = require('urlencode');var options = {method: 'POST',url: 'https://oapi.dingtalk.com/service/get_auth_info',qs: {signature: hash,timestamp: timestamp,suiteTicket: suiteTicket,accessKey: accessKey},headers: {'Cache-Control': 'no-cache','Content-Type': 'application/json'},body: { auth_corpid: 'dingd142a587da6ee21d35c2f4657eb6378f' },json: true
};request(options, function (error, response, body) {if (error) throw new Error(error);console.log(body);
});

  

钉钉文档开发者链接 :https://open-doc.dingtalk.com/microapp/serverapi2/isu6nk

 

 

 

 

转载于:https://www.cnblogs.com/xiaosongJiang/p/9991573.html

http://www.lbrq.cn/news/1252099.html

相关文章:

  • 网站建设规划方案模板/短视频seo推广
  • 上海做网站的公司多少钱/个人如何推广app
  • 一家专做中式设计的网站/百合seo培训
  • 网站建设 东道网络/推广链接点击器
  • 做网站开发一般用什么语言/太原seo公司
  • 大型网站建设建设公司/如何自己建个网站
  • 最近新闻报道/seo网络营销外包公司
  • 厚街做网站公司/搜索引擎优化工作
  • 网站建设方案怎么做/广州网站快速排名
  • 网站怎么做交易平台/seo上海培训
  • 中国商标注册网查询网官网/seo服务 文库
  • b2c网上支付是什么意思/湖南seo优化报价
  • 外贸生意做哪个网站好/流量神器
  • 南昌做网站公司/seo点石论坛
  • 益阳北京网站建设/郑州客串seo
  • 如何建设网站方便后期维护/360提交入口网址
  • 大连网站制作.net/查询网站收录
  • 网站建设属于哪类工作/登封网站设计
  • 网站建设与维护的论述题/湖南竞价优化哪家好
  • 后缀int网站/app开发公司有哪些
  • 珠海网站建设贵公司/新品上市怎么推广词
  • wordpress 中文客户端/seo公司推荐
  • 郑州新闻网站/北京、广州最新发布
  • 临沂网站建设公司/2345网址导航官方网站
  • 效果图哪个网站好/兰州seo优化公司
  • 网站中下滑菜单怎么做/泰安网站建设
  • 龙岗网站设计效果/黄页引流推广
  • 空气能空调如何做网站/线在科技成都网站推广公司
  • 织梦视频网站源码/网络营销岗位招聘信息
  • 字体设计网站大全/英语培训机构前十名
  • 物联网架构全解析:华为“1+2+1”与格行随身WiFi,技术如何定义未来生活?
  • 【嵌入式电机控制#26】BLDC:三相模拟采集
  • DHCP 服务器与DNS服务器
  • 【数据结构与算法-Day 12】深入浅出栈:从“后进先出”原理到数组与链表双实现
  • 力扣面试150题--加一
  • Linux84 SHELL编程:流程控制 前瞻(1)