'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 } }