Я интегрирую Google Adwords API в свое веб-приложение и получаю сообщение об ошибке при выполнении моего php-файла, т.е.
Ошибка:
Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /var/www/vhosts/healthcampaign.in/httpdocs/smscampaign/pages/FacebookAds.php on line 187
SoapFault Object ( [message:protected] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://adwords-sandbox.google.com/api/adwords/cm/v201406/CampaignService?wsdl' :
failed to load external entity "https://adwords-sandbox.google.com/api/adwords/cm/v201406/CampaignService?wsdl"[string:Exception:private] => [code:protected] => 0 [file:protected] => /var/www/vhosts/healthcampaign.in/httpdocs/smscampaign/pages/FacebookAds.php [line:protected] => 219
[trace:Exception:private] => Array ( [0] => Array (
[file] => /var/www/vhosts/healthcampaign.in/httpdocs/smscampaign/pages/FacebookAds.php [line] => 219
[function] => SoapClient
[class] => SoapClient
[type] => -> [args] => Array (
[0] => https://adwords-sandbox.google.com/api/adwords/cm/v201406/CampaignService?wsdl
[1] => Array ( [trace] => 1 )
)
)
)
[previous:Exception:private] => [faultstring] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://adwords-sandbox.google.com/api/adwords/cm/v201406/CampaignService?wsdl' :
failed to load external entity "https://adwords-sandbox.google.com/api/adwords/cm/v201406/CampaignService?wsdl" [faultcode] => WSDL )
Проблема с SSL. Если вы тестируете API локально и получаете эту ошибку, попробуйте выполнить быструю проверку — найдите в AdWords PHP SDK файл с именем AdsSoapClientFactory.php
и обновите строку 142, чтобы добавить && false
:
// SSL settings.
if ($soapSettings->getSslVerify() === true && false) { // explicitly disable SSL Verify
Ниже этой строки кода также есть несколько полезных комментариев. Конечно, отключение проверки SSL не рекомендуется для производственных систем, но, по крайней мере, это может быть быстрым решением, чтобы не забывать о том, почему этот проклятый API не хочет работать.
Если это действительно решает проблему, рассмотрите возможность реализации с помощью SoapSettings. Отменить изменения в AdsSoapClientFactory.php
и в свой основной файл добавьте:
use Google\AdsApi\Common\SoapSettingsBuilder;
[...]
$soapSettings= (new SoapSettingsBuilder())
->disableSslVerify()
->build();
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oAuth2Credential)
->withSoapSettings($soapSettings)
->build();
Других решений пока нет …