飞鱼CRM

直接放干货吧,今日头条飞鱼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
    (
    )
)

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

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

posted @ 2019-10-06 11:38  LiamHao  阅读(5861)  评论(6编辑  收藏  举报