Я искал аналогичное решение, забросил реферер, но только для подсчета уникальных посещений со ссылкой на веб-сайт. Проблема была в том, что если кто-то посетил мой сайт с определенной ссылки, счетчик посещений увеличился бы, но если этот человек обновил страницу, счетчик посетителей все равно поднялся.
Я использовал Google чтобы посетить несколько ресурсов по этой теме, и да, было очень сложно найти ответ, пока кто-то не указал мне посмотреть на php.net для решения.
Я нашел решение при использовании
header ('Refresh: 0; url = index.php');
Но только приведенный выше код не является решением. Решение заключается в его размещении. Вот полный код:
$ ref = @ $ _ SERVER [HTTP_REFERER]; $ domain = parse_url ($ ref, PHP_URL_HOST); Если ($ domain === "google.com") {header ('Refresh: 0; url = index.php'); // Сбрасывает информацию заголовка на сайт узла, чтобы при обновлении страницы счетчик не увеличивал ///, но увеличивался только тогда, когда кто-то снова посещал URL-адрес google
После «обновления», информация заголовка изменяется на информацию об узле хоста, поэтому на странице обновить оператор «if» не будет проверяться, а счетчик не увеличится.
Вы можете поместить свой счетчик попадания в блок IF. Вы также можете запрограммировать различные параметры, чтобы записывать пустые хиты на свой сайт и различные параметры для регистрации всех pageloads / просмотров страниц.
Надеюсь, что это поможет .....
Вы неправильно загрузили json - но даже если бы это было правильно, вы не смогли бы протестировать, используя print_r($_POST)
( read why here ). Вместо этого на вашей второй странице вы можете набрать входящий запрос, используя file_get_contents("php://input")
, который будет содержать POSTed json. Чтобы просмотреть полученные данные в более читаемом формате, попробуйте следующее:
echo '<pre>'.print_r(json_decode(file_get_contents("php://input")),1).'</pre>';
В вашем коде вы указываете Content-Type:application/json
, но вы не кодируете json все данные POST - только значение поля «POST» клиента. Вместо этого сделайте что-то вроде этого:
$ch = curl_init( $url );
# Setup request to send json via POST.
$payload = json_encode( array( "customer"=> $data ) );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
# Return response instead of printing.
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
# Send request.
$result = curl_exec($ch);
curl_close($ch);
# Print response.
echo "<pre>$result</pre>";
Sidenote: вы можете использовать стороннюю библиотеку вместо непосредственного взаимодействия с Shopify API.
Попробуйте этот код: -
$url = 'url_to_post';
$data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) );
$data_string = json_encode(array("customer" =>$data));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo "$result";
Попробуйте вот так:
$url = 'url_to_post';
// this is only part of the data you need to sen
$customer_data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) );
// As per your API, the customer data should be structured this way
$data = array("customer" => $customer_data);
// And then encoded as a json string
$data_string = json_encode($data);
$ch=curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data_string,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => array('Content-Type:application/json', 'Content-Length: ' . strlen($data_string)))
));
$result = curl_exec($ch);
curl_close($ch);
Ключевая вещь, которую вы забыли, это json_encode ваши данные. Но вам также может быть удобно использовать curl_setopt_array для установки всех параметров завивки сразу, передав массив.
array(..)
в `CURLOPT_POSTFIELDS
– UltraInstinct
18 June 2012 в 09:40
array(..)
в CURLOPT_POSTFIELDS` также приведет к использованию JSON.
– UltraInstinct
18 June 2012 в 09:46
Попробуйте этот пример.
<?php
$url = 'http://localhost/test/page2.php';
$data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) );
$ch=curl_init($url);
$data_string = urlencode(json_encode($data));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Ваш код страницы2.php
<?php
$datastring = $_POST['customer'];
$data = json_decode( urldecode( $datastring));
?>
Замените
curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string));
на:
$data_string = json_encode(array("customer"=>$data));
//Send blindly the json-encoded string.
//The server, IMO, expects the body of the HTTP request to be in JSON
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
Я не понимаю, что вы имели в виду под «другой страницей», я надеюсь, что это страница: url_to_post. Если эта страница написана на PHP, JSON, который вы только что разместили выше, будет читаться следующим образом:
$jsonStr = file_get_contents("php://input"); //read the HTTP body.
$json = json_decode($jsonStr);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
(в противном случае вы можете отправить JSON, но получите XML как ответ). – pixelbrackets 9 March 2018 в 13:27