* @version : HuoMp 1.0 */ namespace huomp\controller\cpa_reversal; use huo\controller\agent\AgentCache; use huo\controller\common\Base; use huo\controller\member\Oauth; use huo\controller\queue\CpaReversalQueue; use huo\controller\request\Game; use huo\model\member\MemoauthModel; use huolib\constant\FromConst; use huolib\constant\MemConst; use huolib\constant\OauthConst; use huolib\status\CommonStatus; use huomp\controller\agent\AgentState; use huomp\model\agent\AgentAdsCfgModel; class CpaReversalController extends Base { /** * 倒量处理 * * @param $code * @param $_ext * @param Game $game_rq * * @return array */ public function reversal($code, $_ext, Game $game_rq) { $_wx_code = $code; $_url_param = parse_url(urldecode($_ext)); parse_str($_url_param['query'], $_query_arr); if (empty($_query_arr['huo_state'])) { $_code = CommonStatus::INVALID_PARAMS; return $this->huoError(CommonStatus::getMsg($_code), [], $_code); } $_ag_id = (new AgentState())->getIdByCode($_query_arr['huo_state']); $_agent_id = AgentCache::ins()->getAgentIdByAgId($_ag_id); //参数校验,成功返回配置 $_cfg = $this->checkParam($_agent_id, $_query_arr); if (false == $_cfg) { $_code = CommonStatus::INVALID_PARAMS; return $this->huoError(CommonStatus::getMsg($_code), [], $_code); } $_type = OauthConst::OAUTH_MP; $_from = FromConst::FROM_WEIXIN; $_oauth_data = (new Oauth())->getOauthDataByCode($_type, $_wx_code, $_from, $game_rq->getHAppId()); $_queue_data = $_query_arr; //队列数据 $_queue_data['event'] = $_cfg['agent_code']; $_queue_data['mp_id'] = $game_rq->getMpId(); $_queue_data['agent_id'] = $_agent_id; if (is_numeric($_oauth_data)) { /* 有注册玩家 */ $_mem_id = $_oauth_data; $_queue_data['mem_id'] = $_mem_id; $_mo_data = (new MemoauthModel())->getInfoByMpMemId($game_rq->getMpId(), $_mem_id); $_queue_data['openid'] = empty($_mo_data['openid']) ? '' : $_mo_data['openid']; $_queue_data['status'] = MemConst::MEMBER_OLD; } else { $_queue_data['openid'] = $_oauth_data['openid']; $_queue_data['status'] = MemConst::MEMBER_NEW; } $_rs = (new CpaReversalQueue($_queue_data))->pushQueue(); return $_rs; } /** * 参数校验 * * @param $agent_id * @param array $param * * @return bool|array */ public function checkParam($agent_id, $param = []) { $_cfg = $this->getAgentCfg($agent_id); if (empty($_cfg['url_param'])) { return false; } foreach ($_cfg['url_param'] as $_key) { if (empty($param[$_key])) { return false; } } return $_cfg; } /** * 获取渠道参数 * * @param $agent_id * * @return array|bool */ public function getAgentCfg($agent_id) { if (empty($agent_id)) { return false; } $_cfg = (new AgentAdsCfgModel())->getInfoByAgentId($agent_id); if (empty($_cfg)) { return false; } if (!empty($_cfg['url_param'])) { $_cfg['url_param'] = explode(',', $_cfg['url_param']); } return $_cfg; } }