* @version : HUOSDK 8.0 */ namespace huomp\controller\cpa_reversal; use huo\controller\common\Base; use huolib\constant\MemConst; use huolib\tool\StrUtils; use huomp\model\agent\AgentAdsCfgModel; use huomp\model\log\LogAdsQuhulianModel; use think\Log; class Quhulian extends Base { private $url = ''; //异步地址 private $key = ''; //密钥 /*** * 趣互联异步通知 * * @param $data * * @return bool */ public function QuhulianNotify($data) { if (MemConst::MEMBER_OLD == $data['status']) { return $this->insertLog($data); } if (empty($data['openid_m']) || empty($data['device_id'])) { return true; } if (empty($data['agent_id'])) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($data).'&msg=缺少渠道参数', Log::ERROR ); return false; } $_rs = $this->getAgentCfg($data['agent_id']); if (false == $_rs) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($data).'&rs=' .json_encode($_rs).'&msg=缺少渠道参数', Log::ERROR ); return false; } $_param = $this->setParam($data); $_i = 0; $_return = false; while (1) { $_i++; $_rs = $this->curlBack($this->url, $_param); if ($_rs > 0) { $_return = true; $this->insertLog($data); break; } else { sleep(1); } if ($_i == 3) { break; } } return $_return; } /** * 插入记录 * * @param $data * * @return bool */ public function insertLog($data) { $_data = [ 'mp_id' => get_val($data, 'mp_id'), 'openid' => get_val($data, 'openid'), 'openid_m' => get_val($data, 'openid_m'), 'device_id' => get_val($data, 'device_id'), 'mem_id' => get_val($data, 'mem_id', 0), 'status' => get_val($data, 'status', 1), ]; $_rs = (new LogAdsQuhulianModel())->addData($_data); if (false == $_rs) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode([$data, $_data]).'&rs=' .json_encode($_rs), Log::ERROR ); } return $_rs; } /** * 获取配置信息 * * @param $agent_id * * @return bool */ public function getAgentCfg($agent_id) { $_cfg = (new AgentAdsCfgModel())->getInfoByAgentId($agent_id); if (empty($_cfg)) { return false; } if (empty($_cfg['back_url']) || empty($_cfg['key'])) { return false; } $this->url = $_cfg['back_url']; $this->key = $_cfg['key']; return true; } /** * 设置回调参数 * * @param array $data * * @return bool|string */ public function setParam($data = []) { $_rq_data['openid_m'] = get_val($data, 'openid_m'); $_rq_data['openid_x'] = get_val($data, 'openid'); $_rq_data['appid'] = get_val($data, 'mp_id'); $_rq_data['device_id'] = get_val($data, 'device_id'); $_param = StrUtils::argSort($_rq_data); $_sign_str = StrUtils::createLinkString($_param); $_sign = strtoupper(md5($_sign_str."&key=".$this->key)); $_rq_data['sign'] = $_sign; return $_sign_str."&sign=".$_sign; } /** * 回调请求函数 * * @param $url string 请求地址与端口 * @param $params string post数据 * * @return int 请求结果 */ public static function curlBack($url, $params) { $curl = curl_init(); //初始化curl curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); // 过滤HTTP头 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 curl_setopt($curl, CURLOPT_POST, 1); // post传输数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $params);// post传输数据 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);//设置等待时间 //https 请求 if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } $header = array("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //https 请求 if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } $_rs = curl_exec($curl); curl_close($curl); if (isset($_rs['errno']) && 0 == $_rs['errno']) { $result = 1; } else { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs=' .json_encode($_rs), Log::ERROR ); $result = 0; } return $result; } }