* @version : HUOSDK 9.0 */ namespace huoMpAd; use huo\controller\common\Base; use huolib\status\CommonStatus; use huomp\model\weixin\MpAdReportLogModel; use huomp\model\weixin\MpAdSourceModel; use huomp\model\weixin\MpConfAgentModel; use huomp\model\weixin\MpConfModel; use think\Log; class MpOpenMktNew extends Base { /** * 创建数据源 * https://ad.weixin.qq.com/guide/1680 * * @param $wx_app_id * @param $wx_app_secret * @param string $name 用户行为源名称 * @param string $type 用户行为源类型 默认:WECHAT_MINI_GAME * @param string $promoted_mp_id 小程序/小游戏对应的appid * * @return array */ public function createDataSourceByAppidSecret( $wx_app_id, $wx_app_secret, $name, $promoted_mp_id, $type = 'WECHAT_MINI_GAME' ) { $_param = [ 'type' => $type, 'name' => $name ]; if (!empty($promoted_mp_id)) { $_param['wechat_app_id'] = $promoted_mp_id; } $_rs = (new MpAdApi())->createDataSource($wx_app_id, $wx_app_secret, $_param); if (CommonStatus::NO_ERROR != $_rs['code']) { if ($_rs['code'] == '900351000') { // 已经创建过 // msg = "WECHAT_MINI_PROGRAM App wxf4603b9c18a0b5ee already registered with existed one : 1111504663" $_msg_arr = explode(" ", $_rs['msg']); $_user_action_set_id = array_pop($_msg_arr); } else { $_code = $_rs['code']; Log::write( ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs], LOG::ERROR, true ); return $this->huoError($_code, $_rs['msg']); } } else { $_user_action_set_id = $_rs['data']['user_action_set_id']; } $_data = [ 'user_action_set_id' => $_user_action_set_id, ]; $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_data); } /** * 数据上报 * * @param $mp_conf_info * @param $agent_id * @param $action_data * * @return array */ public function dataReport($mp_conf_info, $agent_id, $action_data) { // 根据渠道游戏,查找关联的广告账号 $_promoted_conf_id = $mp_conf_info['id']; $_promoted_appid = $mp_conf_info['mp_id']; $_promoted_game_id = $mp_conf_info['app_id']; $_mp_conf_agent_model = new MpConfAgentModel(); $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id); if (empty($_mp_conf_agent_info)) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1'); } // 查找关联的广告账号 $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id']; if (empty($_advertiser_conf_id)) { $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } $_mp_conf_model = new MpConfModel(); $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id); $_advertiser_appid = $_advertiser_conf_info['mp_id']; $_advertiser_appsecret = $_advertiser_conf_info['app_secret']; $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType( $_promoted_conf_id, $agent_id, $_advertiser_conf_id ); if (empty($_mp_source_info['source_id'])) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'2'); } $_user_action_set_id = $_mp_source_info['source_id']; $_action_param_value = $action_data['action_param_value']; if ($action_data['action_type'] == 'PURCHASE') { $_action_param_value = (int)$_action_param_value * 100; } $_action_data_url = $action_data['url'] ?? 'http://www.qq.com'; $_action_time = $action_data['action_time'] ?? time(); $_action_param_claim_type = $action_data['claim_type'] ?? 0; $_action_param_source = $action_data['source'] ?? "Web"; $_param = [ 'user_action_set_id' => "{$_user_action_set_id}", 'actions' => [[ 'url' => $_action_data_url, 'action_time' => $_action_time, 'action_type' => $action_data['action_type'], 'user_id' => [ 'wechat_app_id' => $_promoted_appid, 'wechat_openid' => $action_data['openid'], ], 'action_param' => [ 'claim_type' => $_action_param_claim_type, 'source' => $_action_param_source, 'value' => $_action_param_value, ], ]] ]; Log::write(['广告回传start:', date('Y-m-d H:i:s'), "玩家ID:{$action_data['mem_id']}", $_advertiser_appid, $_advertiser_appsecret, $_param], 'info', true); $_rs = (new MpAdApi())->dataReport($_advertiser_appid, $_advertiser_appsecret, $_param); Log::write(['广告回传end:', date('Y-m-d H:i:s'), $_rs], 'info', true); if (CommonStatus::NO_ERROR != $_rs['code']) { Log::write( ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => [$_advertiser_appid, $_advertiser_appsecret, $_param], 'result' => $_rs], LOG::ERROR, true ); $_code = CommonStatus::UNKNOWN_ERROR; return $this->huoError($_code, CommonStatus::getMsg($_code)); } $_add_data = [ 'agent_id' => $action_data['agent_id'] ?? 0, 'mem_id' => $action_data['mem_id'] ?? 0, 'app_id' => $action_data['app_id'] ?? 0, 'mg_mem_id' => $action_data['mg_mem_id'] ?? 0, 'server_id' => $action_data['server_id'] ?? '', 'role_id' => $action_data['role_id'] ?? '', 'advertiser_app_id' => $_advertiser_appid, 'source_id' => $_user_action_set_id, 'url' => $_action_data_url, 'action_type' => $action_data['action_type'], 'action_time' => $_action_time, 'wechat_app_id' => $_promoted_appid, 'wechat_openid' => $action_data['openid'], 'action_param_value' => $_action_param_value, 'action_param_source' => $_action_param_source, 'action_param_claim_type' => $_action_param_claim_type, ]; Log::write(['广告本地start:', date('Y-m-d H:i:s'), $_add_data], 'info', true); (new MpAdReportLogModel())->addData($_add_data); $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } /** * 获取数据源报表 * * @param $mp_conf_info * @param $agent_id * @param $start_date * @param $end_date * * @return array */ public function getDataSourceReport($mp_conf_info, $agent_id, $start_date, $end_date) { $_promoted_conf_id = $mp_conf_info['id']; $_promoted_appid = $mp_conf_info['mp_id']; $_mp_conf_agent_model = new MpConfAgentModel(); $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id); if (empty($_mp_conf_agent_info)) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1'); } // 查找关联的广告账号 $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id']; if (empty($_advertiser_conf_id)) { $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } $_mp_conf_model = new MpConfModel(); $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id); $_advertiser_appid = $_advertiser_conf_info['mp_id']; $_advertiser_appsecret = $_advertiser_conf_info['app_secret']; $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType( $_promoted_conf_id, $agent_id, $_advertiser_conf_id ); if (empty($_mp_source_info['source_id'])) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } $_user_action_set_id = $_mp_source_info['source_id']; $_param = [ 'user_action_set_id' => $_user_action_set_id, 'time_granularity' => 'HOURLY', 'aggregation' => 'ACTION_TYPE', 'date_range' => json_encode( [ 'start_date' => $start_date, 'end_date' => $end_date, ], JSON_UNESCAPED_UNICODE ), ]; $_rs = (new MpAdApi())->getDataSourceReport($_advertiser_appid, $_advertiser_appsecret, $_param); \think\Log::write(['rrrrr', $_advertiser_appid, $_advertiser_appsecret, $_param], 'error', true); if (CommonStatus::NO_ERROR != $_rs['code']) { $_code = CommonStatus::UNKNOWN_ERROR; Log::write( ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs], LOG::ERROR, true ); return $this->huoError($_code, CommonStatus::getMsg($_code)); } $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_rs['data']); } /** * 获取数据源消息 * * @param $mp_conf_info * @param $agent_id * * @return array */ public function getDataSourceInfo($mp_conf_info, $agent_id) { $_promoted_conf_id = $mp_conf_info['id']; $_promoted_appid = $mp_conf_info['mp_id']; $_mp_conf_agent_model = new MpConfAgentModel(); $_mp_conf_agent_info = $_mp_conf_agent_model->getInfoByConfAgent($_promoted_conf_id, $agent_id); if (empty($_mp_conf_agent_info)) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code).'1'); } // 查找关联的广告账号 $_advertiser_conf_id = $_mp_conf_agent_info['advertiser_conf_id']; if (empty($_advertiser_conf_id)) { $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } $_mp_conf_model = new MpConfModel(); $_advertiser_conf_info = $_mp_conf_model->getDataById($_advertiser_conf_id); $_advertiser_appid = $_advertiser_conf_info['mp_id']; $_advertiser_appsecret = $_advertiser_conf_info['app_secret']; $_mp_source_info = (new MpAdSourceModel())->getInfoByConfType( $_promoted_conf_id, $agent_id, $_advertiser_conf_id ); if (empty($_mp_source_info['source_id'])) { $_code = CommonStatus::INNER_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code)); } $_user_action_set_id = $_mp_source_info['source_id']; $_param = [ 'user_action_set_id' => $_user_action_set_id, ]; $_rs = (new MpAdApi())->getDataSourceInfo($_advertiser_appid, $_advertiser_appsecret, $_param); \think\Log::write(['rrrrr', $_advertiser_appid, $_advertiser_appsecret, $_param], 'error', true); if (CommonStatus::NO_ERROR != $_rs['code']) { $_code = CommonStatus::UNKNOWN_ERROR; Log::write( ['func' => __FUNCTION__, 'args' => func_get_args(), 'param' => $_param, 'result' => $_rs], LOG::ERROR, true ); return $this->huoError($_code, CommonStatus::getMsg($_code)); } $_code = CommonStatus::NO_ERROR; return $this->huoSuccess($_code, CommonStatus::getMsg($_code), $_rs['data']); } }