Служба CURL POST to REST - PullRequest
       257

Служба CURL POST to REST

0 голосов
/ 27 сентября 2010

Я пытаюсь опубликовать сообщение в REST-сервисе с использованием PHP cURL, но у меня возникли некоторые трудности (так как раньше я никогда не использовал cURL !!).

Я собрал этот код:

  <?php
error_reporting(E_ALL);
if ($result == "00")
{

$url = 'http://127.0.0.1/xxxxxx/AccountCreator.ashx'; /*I've tried it a combination of ways just to see which might work */

$curl_post_data = array(
    'companyName' =>urlencode($companyName),
    'mainContact' =>urlencode($mainContact),
    'telephone1' =>urlencode($telephone1),
    'email' => urlencode($email),
    'contact2' => urlencode($contact2),
    'telephone2' => urlencode($telephone2)
    'email2' => urlencode($email2);
    'package' => urlencode($package)
    );

foreach($curl_post_data as $key=>$value) {$fields_string .=$key. '=' .$value.'&';
}
rtrim($fields_string, '&');
die("Test: ".$fields_string);

$ch = curl_init();

curl_setopt ($ch, CURLOPT, $url);
curl_setopt ($ch, CURLOPT_POST, count($curl_post_data));
curl_setopt ($ch, CURLOPT_POSTFIELDS, $fields_string);

$result = curl_exec($ch);

curl_close($ch);

После этого мой код отправляет электронное письмо и выполняет оператор IF.Я знаю, что это работает хорошо, у меня начались проблемы, когда я попытался вставить этот запрос cURL.

Я пробовал это, однако он не запускается.Поскольку я интегрируюсь с платежными партнерами, он просто говорит:

Your transaction has been successful but there was a problem connecting back to the merchant's web site. Please contact the merchant and advise them that you received this error message. Thank you.

Точная ошибка, которая была получена, была ошибкой HTTP 500.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 27 сентября 2010
foreach($curl_post_data as $key=>value) {$fields_string .=$key. '=' .value.'&';

значение здесь отсутствует доллар, я думаю,

foreach($curl_post_data as $key => $value) {$fields_string .=$key. '=' .$value.'&';

Вы пытались die($fields_string);, чтобы увидеть, что вы на самом деле отправляет продавцу?

1 голос
/ 01 ноября 2012

Было бы лучше, если бы вы могли предоставить свою версию PHP.

Начиная с PHP 5, некоторые удобные функции связаны в ядре вместо отдельных библиотек PECL.

// If you are working with normal HTTP requests, simply do this.
$curl_post_data = http_build_query($curl_post_data);

curl_setopt($ch, CURLOPT, $url);

// This is a boolean option, although passing non-zero integer 
// will be type-casted to TRUE, count() is not the proper way.
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curl_post_data);

// If you really want the next statement be meaningful, do this. 
// Otherwise your HTTP response will be passed directly into 
// the output buffer.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$result = curl_exec($ch);

Сохранитьпомните, что CURLOPT_POSTFIELDS в PHP поддерживает загрузку файлов, добавляя символ «@» и полный путь к файлу в качестве значения.

Вы не хотите вызывать http_build_query () в таких ситуациях.

Пример кода для загрузки файла

$curl_post_data = array('file1' => '@/home/user/files_to_be_uploaded');

Хотя вы можете по желанию указать тип MIME, см. Документацию для получения дополнительной информации.

Как уже говорилось, проверьте свой PHPверсия первая.Эта функция работает только в PHP 5, AFAIK, есть компании, которые все еще поддерживают PHP 4.x на своих серверах.

1 голос
/ 27 сентября 2010

Прежде всего: вы тестируете локально?Поскольку используемый вами IP-адрес не является допустимым адресом сервера.

Константа для установки URL-адреса называется CURLOPT_URL:

curl_setopt ($ch, CURLOPT_URL, $url);

Также CURLOPT_POST должно быть истинным или ложным (http://php.net/curl_setopt), а не число (кроме 1, может быть):

curl_setopt ($ch, CURLOPT_POST, true);

Вот пример кода POST: PHP + curl, пример кода HTTP POST?

0 голосов
/ 27 сентября 2010

Посмотрите на http_build_query

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...