直接放干货吧,今日头条飞鱼CRM的PHP调用方法,点我跳转。

很简单的两个方法,加密时重要的是有一个空格,必须要有,这个也是坑了我很长时间的一个坑。

接下来具体说一下飞鱼CRM系统接口加密的方法。

<?php

  // 今日头条飞鱼CRM系统API域名
$host = 'https://feiyu.oceanengine.com'; // 拉取数据的路由
$pull_route = '/crm/v2/openapi/pull-clues/'; // 飞鱼CRM系统中,你生成的秘钥字符串,这里要替换成你自己的key
$signature_key = 'ABCDEFGHIGKLMNOP'; // 飞鱼CRM系统中,你生成的Token字符串,这里要替换成你自己的Token
$token = '01234567890123abcdefghijklmnopqrstuvwxyz'; // 飞鱼的加密参数还有三个:start_time、end_time、timestamp,这三个字段都是时间戳格式 // 拉取的数据从哪一天开始取数据,开始日期,例如从 2019-08-01 开始取数据
$start_time = strtotime('2019-08-01'); // 拉取的数据到哪一天截止停止取数据,结束日期,例如到 2019-09-01 停止取数据
$end_time = strtotime('2019-09-01'); // 时间戳,当前执行加密方法的时间
$timestamp = time(); // 飞鱼CRM担心数据量太大会挂掉,所以要求进行分页获取数据,这个是第几页
$page = 1; // 每页数据要多少条,例如我设置每页获取10条数据
$page_size = 10; // 以上必须得参数都提供完整无误后,就可以进行数据加密了 // 第一步,将拉取数据的路由和开始日期和结束日期和时间戳进行拼接,结果类似这样:"/crm/v2/openapi/pull-clues/?start_time=1569859200&end_time=1572537600 1572574424"
// 注意:这一步有一个空格,一定要保留,否则签名会失败的!!!
// 注意:这一步有一个空格,一定要保留,否则签名会失败的!!!
// 注意:这一步有一个空格,一定要保留,否则签名会失败的!!!
$data = $pull_route.'?start_time='.$start_time.'&end_time='.$end_time.' '.$timestamp; // 第二步,将第一步拼接后的字符串进行哈希256加密,然后将结果再进行base64加密
$signature = base64_encode(hash_hmac('sha256', $data, $signature_key)); // 第三步,配置curl信息,然后获取数据,请求地址类似这样:"https://feiyu.oceanengine.com/crm/v2/openapi/pull-clues/?page=1&page_size=10&start_time=1569859200&end_time=1572537600"
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host.$pull_route.'?page='.$page.'&page_size='.$page_size.'&start_time='.$start_time.'&end_time='.$end_time);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 设置请求头信息,每个头信息的冒号后面要保留一个空格
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json;charset=UTF-8',
'Signature: ' . $signature,
'Timestamp: ' . $timestamp,
'Access-Token: ' . $token,
]); // 执行curl获取数据
$output = curl_exec($ch); // 关闭资源
curl_close($ch); // 如果不出意外,那么这里你就可以获取到飞鱼CRM系统中的客户信息了
print_r($output);

以上就是加密过程的分析,总结一下关键点:

1. 加密的原始数据是:不带host地址的路由+start_time+end_time+空格+timestamp 。其中“空格”很重要!

2. 拉取数据和回传数据是两个路由地址,要区分清楚。

3. 拉取数据是GET请求,回传数据是POST请求,记得改请求方式。

接下来是使用 FeiYu 加密类的教程,这个类文件可以在 飞鱼CRM 中获取到。

<?php

// 引入FeiYu.php 类文件
require_once './FeiYu.php'; use FeiYuCRM\FeiYu; // 实例化 FeiYu 类并传入初始化参数
$feiyu = new FeiYu([
'host' => 'https://feiyu.oceanengine.com',
'pull_route' => '/crm/v2/openapi/pull-clues/',
'push_route' => '/crm/v2/openapi/clue/callback/',
'signature_key' => 'ABCDEFGHIGKLMNOP',
'token' => '01234567890123abcdefghijklmnopqrstuvwxyz',
]); // 拉取数据方法,传入开始日期和结束日期,第三个参数是每页数据条数
$feiyu->pullData('2019-08-01', '2019-09-01', 100)->run(function($customers){
// 这里是一个闭包,会在取完一整页的数据后执行
foreach ($customers as $customer) {
// run yourself function
print_r($customer);
die;
}
}); // 回传数据方法
$res = $feiyu->pushData([
// 客户id,这个id在上面的拉取数据中,飞鱼CRM会给你的,每个客户的 clud_id 是唯一的
'clue_id' => '1234567891234567891',
// 这个参数根据飞鱼CRM的文档有四个状态可选:[1:无效]、[2:潜在客户]、[3:高价值客户]、[4:已付费]
'clue_convert_state' => 3,
]);

顺带说明一下,有朋友联系我,想知道飞鱼的接口返回 -2 是什么意思。这个其实没有任何意思,只要是你的接口请求错误,他们统一都是返回 -2 代码,并且,仅有以下几种状况才会有 `msg` 说明:

- 签名过程有错误,或者是请求时的地址拼接错误(如没有拼接上 `start_time` 或者 `end_time` 参数)

Array
(
[status] => -2
[msg] => 无效的签名
)

- 请求头信息没有设置 `Signature: ` 参数、或者 `Signature: ` 值设置错误

Array
(
[status] => -2
[msg] => 请在header中添加签名
)

- 请求头信息没有设置 `Timestamp: ` 参数、或者 `Timestamp: ` 值设置错误

Array
(
[status] => -2
[msg] => 请在header中添加时间戳
)

- 请求头信息没有设置 `Access-Token: ` 参数、或者 `Access-Token: ` 值设置错误,等一些其他原因,只有 -2 一个状态码,没有错误说明。

Array
(
[status] => -2
[msg] => Array
(
)
)

除了以上的错误消息,基本上就没见过别的了。

如果有问题可以在评论中追问。

飞鱼CRM的更多相关文章

  1. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  2. SAP CRM 性能小技巧

    导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...

  3. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  4. SAP CRM 用户界面对象类型和设计对象

    在CRM中的用户界面对象类型的帮助下,我们可以做这些工作: 进行不同的视图配置 创建动态导航 从设计层控制字段标签.值帮助 控制BOL对象的属性的可视性 从导航栏访问自定义组件 一个用户界面对象类型之 ...

  5. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  6. Dynamics CRM 2015-Data Encryption激活报错

    在CRM的日常开发中,Data Encryption经常是不得不开启的一个功能.但是有时,我们可能遇到一种情况,Organization导入之后,查看Data Encryption是已激活的状态,但是 ...

  7. SAP CRM 客户控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入客户控制器(Custom Controller)(译者注:SAP CRM客户端中,不同地方的Custom Controller会翻译为“客 ...

  8. SAP CRM BOL编程基础,代码+详细注释

    网络上可以找到一些使用BOL查询.维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解.本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念. 这是一篇翻译的文章,你可能会 ...

  9. SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据

    这个(BOL里面)最重要的类值得一看. BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示.至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作.在业务场景中,我们也许 ...

随机推荐

  1. jq大体架构。先记录再慢慢剖析

    //工具方法 Utilities //回调函数列表 Callbacks Object //异步队列 Deferred Object //浏览器功能测试 Support //数据缓存 Data //队列 ...

  2. 2021.11.30 eleveni的水省选题的记录

    2021.11.30 eleveni的水省选题的记录 因为eleveni比较菜,eleveni决定先刷图论,再刷数据结构,同时每天都要刷dp.当然,对于擅长的图论,eleveni决定从蓝题开始刷.当然 ...

  3. 如何使用 Redis 缓存

    如何使用 Redis 缓存 前言 旁路缓存 只读缓存 读写缓存 设置多大的缓存合适 内存被写满了如何处理 缓存经常遇到的问题 1.缓存中的数据和数据库中的不一致 读写缓存 只读缓存 来个异常的栗子 1 ...

  4. 得到知识服务app原型设计比较与实践

    一.几种原型设计工具的比较 墨刀 优点: 拥有PC端.手机端.网页版,让你随时随地可以进行产品原型设计: 其定位是主要用于设计移动APP原型,其控件的拖拉.大小的调整,都会自然去匹配相应的母版大小,非 ...

  5. XCTF练习题---MISC---reverseMe

    XCTF练习题---MISC---reverseMe flag:flag{4f7548f93c7bef1dc6a0542cf04e796e} 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是个 ...

  6. python matplotlib在mac os x 中如何显示中文,完美解决

    一. 下载相关的中文字体 simhei 文件: 下载地址 二.通过以下代码查找matplotlib的数据存放位置: import matplotlib print(matplotlib.matplot ...

  7. 团队Beta5

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 无 接下来的计划 无 **还剩下哪些任务 ...

  8. Git 后续——分支与协作

    Git 后续--分支与协作 本文写于 2020 年 9 月 1 日 之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的. ...

  9. IX交换中心网络架构分析

    拓扑如上 IX功能介绍 IX交换中心,客户接入交换中心只收取端口费用,在交换中心网内的流量不收取任何费用,一个交换中心是否值得接入主要看该ix所接入的用户 假如客户A是做视频网站,用的视频源是IQY的 ...

  10. SQL连接查询优化[姊妹篇.第五弹]

    上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析. 接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨.篇 ...