飛魚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
    (
    )
)

 除了以上的錯誤消息,基本上就沒見過別的了。

 如果有問題可以在評論中追問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM