明道云支持API和Webhook功能,今天笔者就教会大家,如何在明道中进行API鉴权自动刷新,以及调用前参数签名,学会这些可以说市面上90% 的第三方API接口都可以调用。(以分贝通对接案例讲解)
一.Token的自动刷新
应用程序可通过调用开放平台提供的API获取到第三方的数据,因为涉及数据隐私,所以在使用前必须获得企业/会员的授权,才可以调用API(公开数据除外)。所以就需要获取用户的授权,以及保证授权的有效性。
第一次获取授权请手动获取,把对应的数据保存到一张工作表中来进行维护,Token初始化后,可以设置【自动刷新token】 工作流,来保证token的有效性。
实现原理:由于大部分的第三方API授权接口返回都包含以下三个参数:(access_token,refresh_token,expires_in)我们根据每次返回的Expires_in过期时间来计算出下一自动刷新token的时间。
如果第三方平台没有Expires_in 返回 ,一般第三方API文档中会有说明token的时效。例如: 2小时 7小时 1天 7天不等,可以根据时效自动计算下次的自动刷新时间。
工作流设置步骤如下:
- 新建工作流->选择按日期字段触发
2.调用token刷新接口,拿到对应的返回值:
3.对于Expires_in参数进行处理 然后更新工作表中的token refresh_token 自动刷新日期。
二.JavaScript中签名的加密
对于分贝通平台,接口信息文档,Appkey需要作为参数参与签名,且不参与传递.加密数据包括时间戳timestamp和data数据,以上三个数据按照 “timestamp={0}&data={1}&sign_key={2}”顺序拼接后,进行MD5加密。
以下在代码块中的具体实现:
var crypto = require(‘crypto’);//引入加密 划重点敲黑板
var key=input.singKey;//appkey
var page=input.page;
var timespan=new Date().getTime();//获取时间戳
var data={};
data.page_index=new Number(page);
data.page_size=20;
data.state=0;//获取所有状态
data.search_category=1;//获取所有企业
Var signstr=new Buffer.from(“timestamp=”+timespan+”&data=”+JSON.stringify(data)+”&sign_key=”+key, ‘utf-8’)
function md5(s) { //Md5加密
var hash = crypto.createHash(‘md5’);
hash.update(s);
return hash.digest(‘hex’);
}
Output= {“timespan”:timespan,”page_index”:page,”page_size”:data.page_size,sign:md5(signstr),”data”:JSON.stringify(data)};
效果如下图:
三.WebHook调用以及返回值写入工作表
添加webhook 节点,使用发送自定义请求,POST,接口地址按照接口文档填写下,把代码块返回值按照接口中需要传递的参数一一对应赋值。
获取返回值,获取到数据就可以写入到工作表中,就可以进行审批报销等操作了。关于工作流Wehhook的用法,可以参考帮助文档:《Webhook:如何请外部系统API请求数据,并写入工作表》
最终效果如下图:
总结
只要了解nodejs 中的加密方式,根据这个教程,参考其他第三方接口文档一步步来,一定可以完成设置。
如有需要欢迎咨询!
参考资料
- 分贝通签名规则说明:http://docs.open.fenbeitong.com/open-api/2apijie-ru/22-apijie-ru-shuo-ming/221-qian-ming-suan-fa.html
- 分贝通获取机票列表地址:http://docs.open.fenbeitong.com/open-api/2apijie-ru/25-ji-piao/252-ji-piao-ding-dan-xiang-qing.html
- nodejs加密(sha1 base64 md5)参考地址:http://nodejs.cn/api/crypto.html#crypto_crypto