get($key)) !== false) { return $id; } $httpConfig = [ 'base_uri' => $this->bashUrl, 'connect_timeout' => 10, 'timeout' => 30, 'http_errors' => true, //抛出异常 true是 false否 'verify' => false, //不验证ssl证书 ]; if (!is_null($platform_id)) { $proxy = OpenPlatformService::instance()->getProxyconfigById($platform_id); if ($proxy) { $httpConfig = array_merge($httpConfig, ['proxy' => $proxy]); } } else { $proxy = OpenPlatformService::instance()->getProxyconfigByChannel($adminConfig['admin_id']); if ($proxy) { $httpConfig = array_merge($httpConfig, ['proxy' => $proxy]); } } $client = new Http($httpConfig); $weChatConfig = Config::get('wechat'); $weChatConfig['http']['base_uri'] = 'https://api.weixin.qq.com/'; $weChatConfig['app_id'] = $adminConfig['platform_appid']; $weChatConfig['secret'] = $adminConfig['platform_secret']; $weChatConfig['token'] = $adminConfig['platform_token']; $weChatConfig['aes_key'] = $adminConfig['platform_aes_key']; $openPlatform = Factory::openPlatform($weChatConfig); $openPlatform['cache'] = new RedisCache(Redis::instanceCache()); $officialAccount = $openPlatform->officialAccount($adminConfig['appid'], $adminConfig['refresh_token']); $access_token = current($officialAccount->access_token->getToken()); $data = [ 'type' => "WEB", 'name' => "GDT回传CPS下单", 'description' => "GDT回传CPS下单", 'wechat_app_id' => $adminConfig['appid'] ]; $result = $client->request('POST', "user_action_sets/add?version=v1.0&access_token=$access_token", [ 'headers' => [ 'Content-Type' => 'application/json', 'charset' => 'utf-8' ], 'body' => json_encode($data) ] ); if ($result = json_decode($result->getBody(), true)) { if (intval($result['errcode'])) { //失败 if (intval($result['errcode']) == 900351000) { //已存在时,截取ID,并返回成功 $errMsg = explode(':', $result['errmsg']); $wx_ad_source_id = intval(end($errMsg)) ?? false; Log::info("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} CreateAdSourceId Exists source_id:{$wx_ad_source_id} Data:" . json_encode($result)); //写入redis Redis::instance()->set($key, $wx_ad_source_id, 86400 * 7); return $wx_ad_source_id; } else { //失败时处理 Log::notice("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} CreateAdSourceId Fail,Error:" . $result['errmsg']); return false; } } else { //成功 Log::info("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} CreateAdSourceId Success Data:" . json_encode($result)); //写入redis $wx_ad_source_id = $result['data']['user_action_set_id']; Redis::instance()->set($key, $wx_ad_source_id, 86400 * 7); return $wx_ad_source_id ?: false; } } return false; } catch (\Exception $e) { Log::error("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} CreateAdSourceId Fail,Error:" . $e->getMessage()); return false; } } /** * 调用接口进行回传 * @param $adminConfig * @param $data * @return bool * @throws \GuzzleHttp\Exception\GuzzleException * @throws \Psr\SimpleCache\InvalidArgumentException */ public function apiReport($adminConfig, $data) { try { $httpConfig = [ 'base_uri' => $this->bashUrl, 'connect_timeout' => 10, 'timeout' => 30, 'http_errors' => true, //抛出异常 true是 false否 'verify' => false, //不验证ssl证书 ]; $proxy = OpenPlatformService::instance()->getProxyconfigByChannel($adminConfig['admin_id']); if ($proxy) { $httpConfig = array_merge($httpConfig, ['proxy' => $proxy]); } $weChatConfig = Config::get('wechat'); $weChatConfig['http']['base_uri'] = 'https://api.weixin.qq.com/'; $weChatConfig['app_id'] = $adminConfig['platform_appid']; $weChatConfig['secret'] = $adminConfig['platform_secret']; $weChatConfig['token'] = $adminConfig['platform_token']; $weChatConfig['aes_key'] = $adminConfig['platform_aes_key']; $openPlatform = Factory::openPlatform($weChatConfig); $openPlatform['cache'] = new RedisCache(Redis::instanceCache()); $officialAccount = $openPlatform->officialAccount($adminConfig['appid'], $adminConfig['refresh_token']); $access_token = current($officialAccount->access_token->getToken()); $client = new Http($httpConfig); $result = $client->request('POST', "user_actions/add?version=v1.0&access_token=$access_token", [ 'headers' => [ 'Content-Type' => 'application/json', 'charset' => 'utf-8' ], 'body' => json_encode($data) ] ); Log::info("WeChatMpApiHeader:".json_encode($result->getHeaders())); if ($result = json_decode($result->getBody(), true)) { if (intval($result['errcode'])) { Log::notice("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} SendWeChatSource Fail Data:" . json_encode($data) . " Error:" . json_encode($result, JSON_UNESCAPED_UNICODE)); return false; } else { Log::info("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} SendWeChatSource Success Data:" . json_encode($data)); return true; } } } catch (\Exception $e) { Log::error("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} SendWeChatSource Fail,Error:" . $e->getMessage()); return false; } return false; } /** * 关注回传 * @param $adminConfig * @param $params * @return bool * @throws \GuzzleHttp\Exception\GuzzleException * @throws \Psr\SimpleCache\InvalidArgumentException */ public function follow($adminConfig, $params) { try { $wx_source_id = $this->getUserActionSetId($adminConfig); if ($wx_source_id) { $data['actions'][0] = [ 'user_action_set_id' => $wx_source_id, 'action_type' => "FOLLOW", 'action_time' => time(), 'url' => $params['url'], 'user_id' => [ 'wechat_app_id' => $params['appid'], 'wechat_openid' => $params['openid'], ], 'action_param' => [ "wechat_app_id" => $params['appid'], ] ]; $res = $this->apiReport($adminConfig, $data); if ($res) { Log::info("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:FOLLOW SendWeChatSource Success"); } else { Log::notice("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:FOLLOW SendWeChatSource Fail"); } return $res; } return false; } catch (\Exception $e) { Log::error("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:FOLLOW SendWeChatSource Fail,Error:" . $e->getMessage()); return false; } } /** * 订单完成回传 * @param $adminConfig * @param $params * @return bool * @throws \GuzzleHttp\Exception\GuzzleException * @throws \Psr\SimpleCache\InvalidArgumentException */ public function completeOrder($adminConfig, $params) { try { $wx_source_id = $this->getUserActionSetId($adminConfig); if ($wx_source_id) { $data['user_action_set_id'] = $wx_source_id; $data['actions'][0] = [ 'action_type' => $params['action_type'], 'action_time' => time(), 'url' => $params['url'], 'user_id' => [ 'wechat_app_id' => $params['appid'], 'wechat_openid' => $params['openid'], ], 'action_param' => [ "product_name" => $params['product_name'], "product_id" => $params['product_id'], "value" => intval($params['money'] * 100), "source" => "Biz", "wechat_app_id" => $params['appid'], 'claim_type' => 0 ] ]; $res = $this->apiReport($adminConfig, $data); if ($res) { Log::info("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:ORDER SendWeChatSource Success"); } else { Log::notice("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:ORDER SendWeChatSource Fail"); } return $res; } return false; } catch (\Exception $e) { Log::error("GDTWeChatAd: AdminId:{$adminConfig['admin_id']} Action:ORDER SendWeChatSource Fail,Error:" . $e->getMessage()); return false; } } }