GdtAdapter.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace app\adapter;
  3. // 广点通-适配器
  4. use GuzzleHttp\Client;
  5. class GdtAdapter
  6. {
  7. public function OAuth($params)
  8. {
  9. $auth_code = $params['auth_code'];
  10. $appid = $params['appid'];
  11. // $secret = ACCOUNT[$cmid]['secret'];
  12. $timestamp = time() - 120;
  13. // 执行验证callback, 返回授权后的字段,跟数据库对应
  14. return [
  15. "advertiser_id" => "",
  16. "advertiser_name" => "",
  17. "access_token" => "",
  18. "refresh_token" => "",
  19. "expire_time" => "",
  20. ];
  21. }
  22. // 获取子账号列表
  23. public function getSubAccounts($pmid)
  24. {
  25. }
  26. // 刷新 token
  27. public function refreshToken($pmid)
  28. {
  29. }
  30. // 获取小时消耗
  31. public function getHourlyCost($advertiserId, $accessToken, $date): array
  32. {
  33. $page = 1;
  34. $data = [];
  35. do {
  36. $nonce = md5(time().rand(00000, 99999));
  37. $url = 'https://api.e.qq.com/v3.0/hourly_reports/get?access_token='.$accessToken.'&timestamp='.time().'&nonce='.$nonce;
  38. $request_data = [
  39. 'account_id' => $advertiserId,
  40. 'level' => 'REPORT_LEVEL_ADGROUP',
  41. 'date_range' => json_encode(['start_date' => $date, 'end_date' => $date]),
  42. 'group_by' => json_encode(['hour', 'adgroup_id']),
  43. 'fields' => json_encode(['hour', 'adgroup_id', 'adgroup_name', 'view_count', 'valid_click_count', 'cost', 'activated_count']),
  44. 'page' => $page,
  45. 'page_size' => 100,
  46. ];
  47. $url = $url."&".http_build_query($request_data);
  48. $httpClient = new Client(['timeout' => 10]);
  49. $res = $httpClient->request('GET', $url);
  50. $result = json_decode($res->getBody(), true);
  51. if (empty($result['data']['list'])) {
  52. break;
  53. }
  54. $data = array_merge($data, $result['data']['list']);
  55. $totalPage = $result['data']['page_info']['total_page'] ?? 1;
  56. $page++;
  57. } while ($page <= $totalPage);
  58. return $data;
  59. }
  60. // 获取媒体消耗
  61. public function getVideoCost($advertiserId, $accessToken, $date): array
  62. {
  63. $page = 1;
  64. $data = [];
  65. do {
  66. $nonce = md5(time().rand(00000, 99999));
  67. $url = 'https://api.e.qq.com/v3.0/daily_reports/get?access_token='.$accessToken.'&timestamp='.time().'&nonce='.$nonce;
  68. $request_data = [
  69. 'account_id' => $advertiserId,
  70. 'level' => 'REPORT_LEVEL_MATERIAL_VIDEO',
  71. 'date_range' => json_encode(['start_date'=>$date,'end_date'=>$date]),
  72. 'group_by' => json_encode(['date','video_id','adgroup_id']),
  73. 'fields' => json_encode(['date','video_id','adgroup_id','adgroup_name', 'view_count','valid_click_count','cost', 'activated_count','download_count','first_pay_count','video_outer_play_count','video_outer_play100_count']),
  74. 'page' => $page,
  75. 'page_size' => 1000,
  76. ];
  77. $url = $url."&".http_build_query($request_data);
  78. $httpClient = new Client(['timeout' => 10]);
  79. $res = $httpClient->request('GET', $url);
  80. $result = json_decode($res->getBody(), true);
  81. if (empty($result['data']['list'])) {
  82. break;
  83. }
  84. $data = array_merge($data, $result['data']['list']);
  85. $totalPage = $result['data']['page_info']['total_page'] ?? 1;
  86. $page++;
  87. } while ($page <= $totalPage);
  88. return $data;
  89. }
  90. public function getVideo($advertiserId, $accessToken, $videoIds): array
  91. {
  92. $nonce = md5(time().rand(00000, 99999));
  93. $url = 'https://api.e.qq.com/v3.0/videos/get?access_token='.$accessToken.'&timestamp='.time().'&nonce='.$nonce;
  94. $request_data = [
  95. 'account_id' => $advertiserId,
  96. 'filtering' => json_encode([
  97. [
  98. 'field' => 'media_id',
  99. 'operator' => 'IN',
  100. 'values' => $videoIds,
  101. ]
  102. ]),
  103. ];
  104. $url = $url."&".http_build_query($request_data);
  105. $httpClient = new Client(['timeout' => 10]);
  106. $res = $httpClient->request('GET', $url);
  107. $result = json_decode($res->getBody(), true);
  108. return $result['data']['list'] ?? [];
  109. }
  110. }