PHP вызов API работает на локальном, почтальонном, но не на живом сайте - PullRequest
0 голосов
/ 03 апреля 2020

Я довольно новичок в php и у меня есть API, из которого я хочу считывать данные. На моем локальном хосте все работает нормально и все результаты соответствуют ожиданиям. То же самое касается приложения Почтальон. Это даже работает, когда я обращаюсь к веб-API от моего локального хоста вместо моего локального API. НО, как только я пытаюсь получить результат на своем живом сайте, он возвращает NULL.

Примечание: это сайт WordPress. Localhost делается через Xampp. Онлайн хостинг через SiteGround. У меня это работало в прошлом, но я не знаю, что произошло (может быть, я немного изменил код или что-то еще), что вдруг перестало работать. API - это плагин менеджера лицензий WordPress с предварительно настроенным API. Доменное имя / IP / и секреты клиентов здесь не являются оригинальными.

$url = "https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxxx&consumer_secret=cs_yyy";

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "", 
  CURLOPT_FOLLOWLOCATION => True,
  CURLOPT_HTTPHEADER =>array (
     'Accept: application/json'),
  CURLOPT_SSL_VERIFYHOST => false,
  CURLOPT_SSL_VERIFYPEER => false,
));

$response = curl_exec($curl);
print_r($response) ?> <br><br> <?php ;
$json_response =json_encode($response);
print_r($json_response) ?> <br><br> <?php ;
$info_display = curl_getinfo($curl);
print_r ($info_display); ?> <br><br> <?php 
$array_response = json_decode($response);
print_r($array_response); ?> <br> <br><?php 
$err = curl_error($curl);
var_dump($err); ?> <br> <br><?php 
curl_close($curl);

На моем локальном хосте этот код выдает ответ, именно то, что мне нужно:

> {"success":true,"data":{"id":"1","orderId":null,"productId":"2037","licenseKey":"1232edwfsd2","expiresAt":null,"validFor":"14","source":"2","status":"3","timesActivated":"0","timesActivatedMax":"1","createdAt":"2020-02-06
> 20:35:56","createdBy":"1","updatedAt":"2020-02-08
> 12:34:20","updatedBy":"1"}}
> 
> "{\"success\":true,\"data\":{\"id\":\"1\",\"orderId\":null,\"productId\":\"2037\",\"licenseKey\":\"1232edwfsd2\",\"expiresAt\":null,\"validFor\":\"14\",\"source\":\"2\",\"status\":\"3\",\"timesActivated\":\"0\",\"timesActivatedMax\":\"1\",\"createdAt\":\"2020-02-06
> 20:35:56\",\"createdBy\":\"1\",\"updatedAt\":\"2020-02-08
> 12:34:20\",\"updatedBy\":\"1\"}}"
> 
> Array ( [url] =>
> https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxx&consumer_secret=cs_yyy
> [content_type] => application/json; charset=UTF-8 [http_code] => 200
> [header_size] => 657 [request_size] => 250 [filetime] => -1
> [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] =>
> 2.164129 [namelookup_time] => 0.000694 [connect_time] => 0.256472 [pretransfer_time] => 0.40321 [size_upload] => 0 [size_download] =>
> 205 [speed_download] => 94 [speed_upload] => 0
> [download_content_length] => -1 [upload_content_length] => -1
> [starttransfer_time] => 2.164067 [redirect_time] => 0 [redirect_url]
> => [primary_ip] => *censored by author* [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => *censored by author* [local_port] => *censored by author* [http_version] => 3 [protocol] => 2 [ssl_verifyresult] => 0 [scheme]
> => HTTPS [appconnect_time_us] => 403002 [connect_time_us] => 256472 [namelookup_time_us] => 694 [pretransfer_time_us] => 403210
> [redirect_time_us] => 0 [starttransfer_time_us] => 2164067
> [total_time_us] => 2164129 )
> 
> stdClass Object ( [success] => 1 [data] => stdClass Object ( [id] => 1
> [orderId] => [productId] => 2037 [licenseKey] => 1232edwfsd2
> [expiresAt] => [validFor] => 14 [source] => 2 [status] => 3
> [timesActivated] => 0 [timesActivatedMax] => 1 [createdAt] =>
> 2020-02-06 20:35:56 [createdBy] => 1 [updatedAt] => 2020-02-08
> 12:34:20 [updatedBy] => 1 ) )
> 
> string(0) ""
> 
> status: 3 times activated: 0 times activated max: 1 last update:
> 2020-02-08 12:34:20

Тот же код на моем живом веб-сайте вылетает. Поэтому мне нужно закомментировать //print_r($response) ?> <br><br> <?php ;

, тогда я смогу получить такой результат:

> "<\/meta><\/head><\/html>"
> 
> Array ( [url] =>
> https://example.com/wp-json/lmfwc/v2/licenses?consumer_key=ck_xxx&consumer_secret=cs_yyy
> [content_type] => text/html [http_code] => 200 [header_size] => 277
> [request_size] => 254 [filetime] => -1 [ssl_verify_result] => 0
> [redirect_count] => 0 [total_time] => 0.01762 [namelookup_time] =>
> 0.000747 [connect_time] => 0.000873 [pretransfer_time] => 0.016955 [size_upload] => 0 [size_download] => 96 [speed_download] => 5647
> [speed_upload] => 0 [download_content_length] => -1
> [upload_content_length] => -1 [starttransfer_time] => 0.017479
> [redirect_time] => 0 [redirect_url] => [primary_ip] => *censored by author*
> [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => *censored by author*
> [local_port] => *censored by author* [http_version] => 3 [protocol] => 2
> [ssl_verifyresult] => 0 [scheme] => HTTPS [appconnect_time_us] =>
> 16862 [connect_time_us] => 873 [namelookup_time_us] => 747
> [pretransfer_time_us] => 16955 [redirect_time_us] => 0
> [starttransfer_time_us] => 17479 [total_time_us] => 17620 )
> 
> 
> 
> string(0) ""
> 
> status: times activated: times activated max: last update:

На моей вкладке Сеть консоли разработчика в Google Chrome я вижу это. Все запросы возвращают статус 200:

Request URL: https://example.com/check-in/
Request Method: GET
Status Code: 200 
Remote Address: *censored by author*
Referrer Policy: no-referrer-when-downgrade
cache-control: no-transform, no-cache, no-store, must-revalidate
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Fri, 03 Apr 2020 20:01:50 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
host-header: 192fc2e7e50945beb8231a492d6a8024
link: <https://example.com/wp-json/>; rel="https://api.w.org/", <https://example.com/?p=2463>; rel=shortlink
server: nginx
status: 200
vary: Accept-Encoding
x-httpd: 1
x-proxy-cache: BYPASS
x-proxy-cache-info: D NC:200000 UP:1
:authority: example.com
:method: GET
:path: /check-in/
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7,nl-NL;q=0.6,nl;q=0.5,fr;q=0.4
cache-control: max-age=0
cookie: *censored by author*
referer: https://example.com/
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36

Редактировать: Добавление следующего кода в начало моего php -снипета, который я добавил в wordpress через плагин php -snipped:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Я получаю это возвращаемое на веб-интерфейсе:

Notice: Trying to get property 'data' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 32

Notice: Trying to get property 'status' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 32
status:

Notice: Trying to get property 'data' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 33

Notice: Trying to get property 'timesActivated' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 33
times activated:

Notice: Trying to get property 'data' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 34

Notice: Trying to get property 'timesActivatedMax' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 34
times activated max:

Notice: Trying to get property 'data' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 35

Notice: Trying to get property 'updatedAt' of non-object in /home/customer/www/example.com/public_html/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 35
last update:

Ответы [ 3 ]

0 голосов
/ 03 апреля 2020

Похоже, что вы получаете что-то записанное в выходной буфер, прежде чем WordPress API сможет вывести.

Я бы проверил вашу среду на localhost соответствует производству. Например, плагины, файлы тем и ядро ​​WordPress. Ваш файл темы может отражать что-то в заголовке.

Другие предложения:

Если почтальон работает над Production, проблема с настройками cUrl

Это проблема SSL - вы отключили проверку SSL на своем cUrl - при условии, что у вас нет SSL на вашем локальном хосте, однако Siteground my block cUrl запрашивает сайты SSL, которые сами не используют SSL. Также вам нужна кодировка в виде пустой строки?

0 голосов
/ 05 апреля 2020

Это решено, но я должен признать, что я не знаю, что наконец решило это. Но это не было связано с проблемами Siteground. В итоге перепробовал тысячу вещей, и я удалил всю подстраницу, где должен был выполняться код php. Я создал новую страницу и перепробовал все, и все получилось. Очень странно, но спасибо за советы и рекомендации.

0 голосов
/ 03 апреля 2020

Вы должны поместить следующие строки в первую строку скрипта. Будут показаны все ошибки, после этого эти строки должны быть удалены в производственной среде

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...