CURL не отправляет числовые значения в полях сообщения xml, символы работают нормально, но не числа - PullRequest
0 голосов
/ 13 июня 2019

Это на WordPress.

Если имя пользователя, пароль и ссылка начинаются с буквы, тогда запрос и ответ работают нормально.

Но если имя пользователя, пароль или ссылка - это число, значит, оно не отправляется.

На почтальоне все работает нормально.

Я пытался поставить его как переменную

$data = "body xml"
 CURLOPT_POSTFIELDS => $data,

Это не сработало, но я также не был уверен, как я получуВ любом случае $ user и $ передаются туда.

$username = $current_user->first_name;
$password = $current_user->last_name;


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_PORT => "xxxxxxxxxxxx",
  CURLOPT_URL => "xxxxxxxxxxxxxxxxx",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "<root>\r\n  <user>" .$username. "</user>\r\n  <pass>" .$password. "</pass>\r\n  <reference>12345</reference>\r\n</root>\r\n",

  CURLOPT_HTTPHEADER => array(
    "Accept: application/xml",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Content-Type: application/xml",
    "Host: xxxxxxxxxxxx",
    "Postman-Token: xxxxxxxxxxxxxxxx",
    "User-Agent: PostmanRuntime/7.13.0",
    "accept-encoding: gzip, deflate",
    "cache-control: no-cache",
    "content-length: 107"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "There are no orders to show on this account ";
} else {

результаты приводятся здесь в таблице и т. д.

Так что, если имя пользователя было Bob, Password было mypass, а ссылка была ABC123, тогда он будет работать нормально.

Но

Если имя пользователя было Sid, Пароль 1234 и ссылка ABC444, тогда это не сработает

Если имя пользователя было Алиса Пароль mypass22 и ссылка 22, тогда это не будет работать

Кажется, что я убрал числа из этого

<root>\r\n  <user>" .$username. "</user>\r\n  <pass>" .$password. "</pass>\r\n  <reference>12345</reference>\r\n</root>\r\n

У меня есть echo'd $ username и $ password, и в эхо на странице они работают нормально, так что я предполагаю, что это POSTFIELDSв керле это раздевание чисел?или просто не отправлять их?


редактировать

Попробовал изменить

CURLOPT_POSTFIELDS => "<root>\r\n  <user>" .$username. "</user>\r\n  <pass>" .$password. "</pass>\r\n  <reference>12345</reference>\r\n</root>\r\n",

на

 $input_xml = '<root>
      <user>sid</user>
      <pass>Mypass</pass>
      <reference>12345</reference>
    </root>';

 CURLOPT_POSTFIELDS => $input_xml,

Но также не сработало

1 Ответ

0 голосов
/ 13 июня 2019

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

Использование: (строка) $ username вместо $ username

Но, как правило, вам нужно использовать правильный массив php в качестве значения CURLOPT_POSTFIELDS

Как это:

CURLOPT_POSTFIELDS => array(
'user'=>$username, 
'pass'=>$password,
'reference'=>$reference
),

Таким образом, получатель получит прямые данные, подобные $ _POST ["user"], а не любой XML, который должен быть проанализирован.

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