123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- <?php
- namespace App\Services;
- use App\Models\JxAdPlacementLog;
- use App\Models\JxTransformRecord;
- use App\Models\Sys\SysCustomerAdver;
- use App\Support\EmailQueue;
- use App\Support\Log;
- use App\Support\TaoBaoAd;
- use Illuminate\Http\Request;
- class AdPlacementService
- {
- /**
- * 处理快手广告位下单数据
- * @param $data
- * @param $logId
- * @return array
- */
- public static function handleAdPlacementLogData($data, $logId) {
- $requestId = 'kuxuan-'.time().rand(1000, 9999);
- //每新建一个广告位,监测链接中都携带广告位ID,
- $advertiserSpaceId = !empty($data['advertiser_space_id']) ? $data['advertiser_space_id'] : '1939686';//todo 后续要将默认值取消,并判断字段不存在或者为空时要报警
- // $testAccount = '54284957';
- $requestParams = [
- 'taskId' => '570901022',
- 'app' => 1,
- 'channel' => '2200803434552',
- 'advertisingSpaceId' => $advertiserSpaceId,
- 'requestId' => $requestId,
- 'callbackUrl' => 'https://zhitou.wenxingshuju.com/order/callback?log_id='.$logId,
- 'transformType' => 64
- ];
- if(!empty($data['imei_md5']) && $data['imei_md5'] != '__IMEI2__') {
- $requestParams['imeiMd5'] = $data['imei_md5'];
- }
- if(!empty($data['oaid']) && !in_array($data['oaid'], [
- '00000000-0000-0000-0000-000000000000', '__OAID__'])) {
- $requestParams['oaid'] = $data['oaid'];
- }
- if(!empty($data['oaid_md5']) && !in_array($data['oaid_md5'], [
- '9f89c84a559f573636a47ff8daed0d33', '__OAID2__'])) {
- $requestParams['oaidMd5'] = $data['oaid_md5'];
- }
- if(!empty($data['idfa_withdash_md5']) && $data['idfa_withdash_md5'] != '__IDFA2__') {
- $requestParams['idfaMd5'] = $data['idfa_withdash_md5'];
- }
- if(!empty($data['imei']) && $data['imei'] != '__IMEI__') {
- $requestParams['imei'] = $data['imei'];
- }
- if(!empty($data['idfa']) && $data['idfa'] != '__IDFA__') {
- $requestParams['idfa'] = $data['idfa'];
- }
- if(!empty($data['kenyid_caa']) && $data['kenyid_caa'] != '__KENYID_CAA__') {
- $kenyidCaa = json_decode(urldecode($data['kenyid_caa']), true);
- foreach($kenyidCaa as $kenyid) {
- if($kenyid['version'] == '20220111') {
- $requestParams['caid'] = $kenyid['kenyId'];
- $requestParams['caidMd5'] = $kenyid['kenyId_MD5'];
- $requestParams['caidVersion'] = $kenyid['version'];
- }elseif($kenyid['version'] == '20211207') {
- $requestParams['caid2'] = $kenyid['kenyId'];
- $requestParams['caid2Md5'] = $kenyid['kenyId_MD5'];
- $requestParams['caid2Version'] = $kenyid['version'];
- }
- }
- }
- if(!empty($data['ip']) && $data['ip'] != '__IP__') {
- $requestParams['ip'] = $data['ip'];
- }
- if(!empty($data['androidid_md5']) && $data['androidid_md5'] != '__ANDROIDID2__') {
- $requestParams['androidId'] = $data['androidid_md5'];
- }
- if(!empty($data['ua']) && $data['ua'] != '__UA__') {
- $requestParams['ua'] = $data['ua'];
- }
- $taobaoAd = new TaoBaoAd();
- if(1 == $data['action_type']) {
- $result = $taobaoAd->exposureReport($requestParams);
- } else if(2 == $data['action_type']) {
- $result = $taobaoAd->clickReportAndCallback($requestParams);
- }
- return $result;
- }
- /**
- * 处理请求数据
- * @param Request $request
- * @return array
- */
- public static function processRequestData(Request $request)
- {
- return [
- 'promotion_channel_id' => $request->input('promotion_channel_id'),
- 'action_type' => $request->input('action_type') == 'impression' ? 1 : ($request->input('action_type') == 'click' ? 2 : 0),
- 'tracking_id' => $request->input('tracking_id'),
- 'account_id' => $request->input('account_id'),
- 'campaign_id' => $request->input('campaign_id'),
- 'campaign_name' => $request->input('campaign_name'),
- 'ad_id' => $request->input('ad_id'),
- 'creative_id' => $request->input('creative_id'),
- 'idfa_withdash_md5' => $request->input('idfa_withdash_md5'),
- 'mac_upper_withcolon' => $request->input('mac_upper_withcolon'),
- 'mac_upper_withcolon_md5' => $request->input('mac_upper_withcolon_md5'),
- 'mac_upper_nocolon_md5' => $request->input('mac_upper_nocolon_md5'),
- 'timestamp_ms' => $request->input('timestamp_ms'),
- 'ip' => $request->input('ip'),
- 'callback_url' => $request->input('callback_url'),
- 'csite' => $request->input('csite'),
- 'idfa_sha1' => $request->input('idfa_sha1'),
- 'imei_md5' => $request->input('imei_md5'),
- 'androidid_md5' => $request->input('androidid_md5'),
- 'oaid' => $request->input('oaid'),
- 'oaid_md5' => $request->input('oaid_md5'),
- 'imei_sha1' => $request->input('imei_sha1'),
- 'androidid_sha1' => $request->input('androidid_sha1'),
- 'ua' => $request->input('ua'),
- 'brand' => AdPlacementService::detectMobileBrand($request->input('ua')),
- 'os_code' => $request->input('os_code') != '__OS__' ? $request->input('os_code') : 3,
- 'kuaishou_photo_id' => $request->input('kuaishou_photo_id'),
- 'imei' => $request->input('imei'),
- 'idfa' => $request->input('idfa'),
- 'kenyid_caa' => $request->input('kenyid_caa'),
- 'adsocial_aid' => $request->input('adsocial_aid'),
- 'adsocial_uid' => $request->input('adsocial_uid'),
- 'advertiser_space_id' => $request->input('space_id'),
- 'mission_id' => $request->input('mission_id'),
- 'order_id' => $request->input('order_id'),
- ];
- }
- /**
- * 检测手机品牌
- * @param string|null $ua
- * @return string|null
- */
- public static function detectMobileBrand($ua)
- {
- if (empty($ua)) {
- return null;
- }
- $ua = strtolower($ua);
- $brands = [
- 'iphone' => 'Apple',
- 'huawei' => 'Huawei',
- 'xiaomi' => 'Xiaomi',
- 'oppo' => 'OPPO',
- 'vivo' => 'Vivo',
- 'samsung' => 'Samsung',
- 'honor' => 'Honor'
- ];
- foreach ($brands as $key => $brand) {
- if (strpos($ua, $key) !== false) {
- return $brand;
- }
- }
- return null;
- }
- public static function handleTransformData($logId, $transformType) {
- # 根据记录查询广告ID
- $logInfo = JxAdPlacementLog::getInfoById($logId);
- # 根据记录以及行为类型查询是否已经记录
- $recordInfo = JxTransformRecord::getInfo($logId, $transformType);
- if(!empty($recordInfo)) {
- Log::info('记录已经存在,无需重复处理', ['log_id' => $logId, 'transform_type' => $transformType], 'ActionReport');
- return ;
- }
- # 数据回传 start
- $adReportActionType = 0;
- $adReportOrderStatus = 0;
- if(!empty($logInfo->adsocial_aid) && $logInfo->adsocial_aid != '__ADSOCIAL_AID__') {
- # 获取漏单配置
- $missConfig = UserActionsReportService::accountReportRule($logInfo->adsocial_aid, $transformType, $logInfo->advertiser_space_id);
- if(isset($missConfig['enable']) && 1 == $missConfig['enable']) {
- # 判断是否需要漏单
- $missRes = UserActionsReportService::accountMissValue($logInfo->adsocial_aid, $logInfo->advertiser_space_id, $missConfig);
- if($missRes) {
- # 需要漏单
- Log::info('漏单', [
- 'log_id' => $logId,
- 'account_id' => $logInfo->adsocial_aid,
- 'transform_type' => $transformType,
- 'advertiser_space_id' => $logInfo->advertiser_space_id,
- 'callback_url' => $logInfo->callback_url], 'ActionReport');
- $adReportOrderStatus = 3;
- } else {
- $missionId = $logInfo->mission_id;
- $eventType = 1;// 激活
- if(in_array($missionId, [1054157749954837, 1054157535090288, 1054157125538975])) {
- $eventType = 84;// 唤起应用
- }
- # 数据回传
- $rst = HttpService::httpGet($logInfo->callback_url . '&event_type='.$eventType.'&event_time=' . time() . rand(100, 999) );
- $response = json_decode($rst, 1);
- Log::info('数据回传', [
- 'log_id' => $logId,
- 'account_id' => $logInfo->adsocial_aid,
- 'transform_type' => $transformType,
- 'mission_id' => $missionId,
- 'advertiser_space_id' => $logInfo->advertiser_space_id,
- 'event_type' => $eventType,
- 'callback_url' => $logInfo->callback_url,
- 'response' => $response], 'ActionReport');
- // EmailQueue::rPush('数据回传结果记录', json_encode(['log_id' => $logId, 'callback_url' => $logInfo->callback_url, 'response' => $response]), ['song.shen@kuxuan-inc.com'], '聚星系统');
- $adReportActionType = 1;
- if(isset($response['result']) && 1 == $response['result']) {
- $adReportOrderStatus = 1;
- } else {
- $adReportOrderStatus = 2;
- }
- }
- }
- } else {
- EmailQueue::rPush('快手订单回传异常 - 广告ID或账户ID获取失败', json_encode([
- 'log_id' => $logId, 'transformType' => $transformType, 'ad_id' => $logInfo->ad_id, 'account_id' => $logInfo->adsocial_aid], 256),
- ['song.shen@kuxuan-inc.com'], '聚星系统');
- $adReportOrderStatus = -2;
- }
- # 数据回传 end
- # 保存订单数据入库 start
- $orderData['platform'] = 1;
- $orderData['ad_placement_log_id'] = $logId;
- $orderData['transform_type'] = $transformType;
- $orderData['callback_url'] = $logInfo->callback_url;
- $orderData['advertiser_id'] = $logInfo->adsocial_aid ?? 54284957;//todo 后续监测此项数据是否异常,异常时要报警出来,包括下面查询客户ID的逻辑也是一样
- $orderData['report_action_type'] = $adReportActionType;
- $orderData['report_order_status'] = $adReportOrderStatus;
- $orderData['task_id'] = $logInfo->mission_id;
- # 根据账户ID查询客户ID
- $orderData['customer_id'] = 192;
- if(!empty($logInfo->adsocial_aid)) {
- $customerInfo = SysCustomerAdver::getInfoByAdvertiserId($logInfo->adsocial_aid);
- $orderData['customer_id'] = $customerInfo->customer_id ?? 192;
- }
- if(!empty($orderData['customer_id'])) {
- JxTransformRecord::saveData($orderData);
- } else {
- Log::error('查询投放账户对应客户ID失败', ['account_id' => $logInfo->adsocial_aid], 'transformRecordSave');
- EmailQueue::rPush('查询投放账户对应客户ID失败', json_encode(['account_id' => $logInfo->adsocial_aid]), ['song.shen@kuxuan-inc.com'], '聚星系统');
- }
- # 保存订单数据入库 end
- }
- }
|