2015-02-21 19 views
-1

На работе я пытаюсь отладить клиентский сайт, у которого возникают проблемы с их переносом шлюза api. Поставщик шлюза использует CloudFlare (он не находится на конце клиентского сайта), который блокирует представления платежной формы, потому что A: ему не нравится заголовок cURL (я уже исправил эту часть, передав вместо этого заголовок firefox) и B: Cookies не включены. Эта вторая часть является проблематичной. Сервер не хранит файлы cookie, такие как браузер, и я не знаю, как поймать ответ cookie и передать его с запросом cURL, чтобы обойти непримиримые меры безопасности CloudFlare (не спрашивайте меня, почему у платежного шлюза будет он сконфигурирован таким образом, это не имеет смысла, и скрипт, который они предоставили для подключения, не работает). При условии, является раздел сценария, который делает запрос:Cloudflare блокирует запросы cURL на платежный шлюз api

$ch = curl_init(); 

    // set URL and other appropriate options 
    curl_setopt($ch, CURLOPT_URL, $gatewayURL); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); //I added this bit to address the user agent issue, everything else is directly from their script. 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $data = curl_exec($ch); 
    curl_close($ch); 
+0

Просто хотел прокомментировать, что на самом деле произошло здесь. Платежный шлюз блокировал доступ к его API, потому что разработчик в шлюзовой компании случайно заблокировал свой отдых api за кэшированием Cloudflare. Это было решено с помощью расстраивающей цепочки телефонных звонков с компанией платежных шлюзов. После того, как мы и несколько других клиентов пожаловались, они, наконец, перестали пытаться передать доллар и заставили их разработчиков исправить свою ошибку. Оказывается, на нашей стороне ничего на самом деле не было. – mopsyd

ответ

-2

Он не любит локоны заголовка (я уже исправил эту часть, передавая Firefox, заголовок вместо)

Fine ,

Cookies не включены. Эта вторая часть является проблематичной.

Bullshit.

Итак?

Вам необходимо включить эту опцию Керл, как показано ниже:

curl_setopt ($ch, CURLOPT_HEADER, true); 

Заголовок HTTP придет в ответном сообщении. Это ожидаемый момент, чтобы поймать значение cookie. Посмотрите ниже:

// Firstly 
$data = curl_exec ($ch); 
curl_close ($ch); 

// Secondly 
preg_match ('/Cookie: (.*);/', $data, $header); 
$cookie = $header[1]; 

PS .: Иногда строка заголовка Cookie может быть показан как Set-Cookie вместо. Поскольку он может поймать файл cookie, создается в ответное время.

С этого момента, вы можете использовать этот $ печенья значение в следующих запросов:

curl_setopt ($ch, CURLOPT_COOKIE, $cookie); 

Я надеюсь, вы понимаете, все это. Это может быть очень полезно для вас. You also can look for the official PHP documentation.

+1

Ваше отношение к этому было ужасно, и ваши предложения не решали абсолютно ничего. Проблема оказалась на удаленном конце. – mopsyd

+0

* "и скрипт, который они предоставили для подключения, не работает). Предоставляется раздел скрипта, который делает запрос:" * – mopsyd

Смежные вопросы