hepsi. Bunu ben oturum değişkenleri okumak için benim çözüm alınamıyor görünüyor PayPal IPN entegrasyonu ile ilgili sorunlar yaşıyorum.
Bir siparişleri masaya PayPal tarafından sağlanan Temel olarak, benim dükkan modülü komut, ben müşterinin bilgilerini saklayabilirsiniz. Ancak, ben de sipariş kimliği ile bağlantılı ayrı bir tabloya bir işlemde sipariş ürünlerini kaydetmek istiyoruz.
Ancak, o zaman oturumda ürünleri ile döngü ve orders_products masaya bunları kaydetmek, nerede çalışma değil senaryonun ikinci parçası.
Oturum verileri okunan değil bir nedeni var mı?
Aşağıdaki gibi shop.php içindeki kodu:
if ($paypal->validate_ipn()) {
$name = $paypal->ipn_data['address_name'];
$street_1 = $paypal->ipn_data['address_street'];
$street_2 = "";
$city = $paypal->ipn_data['address_city'];
$state = $paypal->ipn_data['address_state'];
$zip = $paypal->ipn_data['address_zip'];
$country = $paypal->ipn_data['address_country'];
$txn_id = $paypal->ipn_data['txn_id'];
$sql = "INSERT INTO orders (name, street_1, street_2, city, state, zip, country, txn_id)
VALUES (:name, :street_1, :street_2, :city, :state, :zip, :country, :txn_id)";
$smt = $this->pdo->prepare($sql);
$smt->bindParam(':name', $name, PDO::PARAM_STR);
$smt->bindParam(':street_1', $street_1, PDO::PARAM_STR);
$smt->bindParam(':street_2', $street_2, PDO::PARAM_STR);
$smt->bindParam(':city', $city, PDO::PARAM_STR);
$smt->bindParam(':state', $state, PDO::PARAM_STR);
$smt->bindParam(':zip', $zip, PDO::PARAM_STR);
$smt->bindParam(':country', $country, PDO::PARAM_STR);
$smt->bindParam(':txn_id', $txn_id, PDO::PARAM_INT);
$smt->execute();
// save products to orders relationship
$order_id = $this->pdo->lastInsertId();
// $cart = $this->session->get('cart');
$cart = $this->session->get('cart');
foreach ($cart as $product_id => $item) {
$quantity = $item['quantity'];
$sql = "INSERT INTO orders_products (order_id, product_id, quantity) VALUES ('$order_id', '$product_id', '$quantity')";
$res = $this->pdo->query($sql);
}
$this->session->del('cart');
mail('martin@mcbwebdesign.co.uk', 'IPN result', 'IPN was successful on wrestling-wear.com');
} else {
mail('martin@mcbwebdesign.co.uk', 'IPN result', 'IPN failed on wrestling-wear.com');
}
Ve ben burada buldum gibi PHP için PayPal IPN sınıfını kullanarak ediyorum: http://www.micahcarrick.com/04-19-2005/php-paypal-ipn-integration-class.html, ancak aşağıdaki gibi validate_ipn()
yönteminin içeriği olan:
public function validate_ipn()
{
$url_parsed = parse_url($this->paypal_url);
$post_string = '';
foreach ($_POST as $field => $value) {
$this->ipn_data[$field] = $value;
$post_string.= $field.'='.urlencode(stripslashes($value)).'&';
}
$post_string.= "cmd=_notify-validate"; // append IPN command
// open the connection to PayPal
$fp = fsockopen($url_parsed[host], "80", $err_num, $err_str, 30);
if (!$fp) {
// could not open the connection. If logging is on, the error message will be in the log
$this->last_error = "fsockopen error no. $errnum: $errstr";
$this->log_ipn_results(false);
return false;
} else {
// post the data back to PayPal
fputs($fp, "POST $url_parsed[path] HTTP/1.1\r\n");
fputs($fp, "Host: $url_parsed[host]\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($post_string)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $post_string . "\r\n\r\n");
// loop through the response from the server and append to variable
while (!feof($fp)) {
$this->ipn_response.= fgets($fp, 1024);
}
fclose($fp); // close connection
}
if (eregi("VERIFIED", $this->ipn_response)) {
// valid IPN transaction
$this->log_ipn_results(true);
return true;
} else {
// invalid IPN transaction; check the log for details
$this->last_error = 'IPN Validation Failed.';
$this->log_ipn_results(false);
return false;
}
}