Cart için Paypal IPN Handler

2 Cevap php

Ben ürünleri satmak için benim web düğmeleri 'Şimdi satın al' PayPal kullanıyorum. Ben bir MySQL veritabanında her ürün için stok birimlerinin sayısını izlemek ve otomatik olmak üzere sistemdeki stok takibi istiyorum, çünkü bir satın alma olmuştur zaman, bana bildirin PayPal'ın Anında Ödeme Bildirimi işlevini kullanıyorum tamamladı. Paypal geçerli bir alım yapılmış benim işleyici bildirdiğinde, komut satın alınan ürünün envanterden '1 'çıkartarak benim MySQL veritabanını günceller.

Ben Paypal şimdi düğmeleri (bir seferde bir satın alma) satın ile bu aşağıda benim IPN PHP kodu başarıyla çalışır ekledim.

Benim Soru: Ben müşterilerin bir defada birden fazla ürün satın böylece PayPal'ın 'Sepete ekle' düğmeleri ile 'Şimdi satın al' düğmeleri yerine istiyorum. Ben satın alınan tüm öğeler arasında o döngü izin ve buna göre benim veritabanını güncellemek için aşağıdaki kodumu değiştirmek zorunda nasıl emin değilim. Herhangi bir yardım büyük mutluluk duyacağız!

Kod:

    // Paypal POSTs HTML FORM variables to this page
// we must post all the variables back to paypal exactly unchanged and add an extra parameter cmd with value _notify-validate

// initialise a variable with the requried cmd parameter
$req = 'cmd=_notify-validate';

// go through each of the POSTed vars and add them to the variable
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

// In a live application send it back to www.paypal.com
// but during development you will want to uswe the paypal sandbox

// comment out one of the following lines

$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
//$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

// or use port 443 for an SSL connection
//$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);


if (!$fp) {
// HTTP ERROR
}
else
{
  fputs ($fp, $header . $req);
  while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {


      $item_name = stripslashes($_POST['item_name']);
      $item_number = $_POST['item_number'];
      $item_id = $_POST['custom'];  
      $payment_status = $_POST['payment_status'];
      $payment_amount = $_POST['mc_gross'];         //full amount of payment. payment_gross in US
      $payment_currency = $_POST['mc_currency'];
      $txn_id = $_POST['txn_id'];                   //unique transaction id
      $receiver_email = $_POST['receiver_email'];
      $payer_email = $_POST['payer_email'];
      $size = $_POST['option_selection1'];
      $item_id  = $_POST['item_id'];
      $business = $_POST['business'];



      if ($payment_status == 'Completed')  {  
// UPDATE THE DATABASE      


      }

2 Cevap

Eğer bir sipariş kimliği içine tüm madde-ID en toplamak için muhtemelen daha kolay olurdu, daha sonra PayPal için POST ile bu sipariş kimliğimi gönderebilirsiniz. IPN senin detayları ile geri geliyor sonra, kontrol ve düzen-ID tüm öğelerin toplamı, IPN ödendi dedi toplamını eşleştiğini hesaplamak.

Sipariş kimliği için veritabanını sorgulamak ve tüm madde-ID adlı kendisine bağlı olsun, o madde-kimlikleri her biri için stok sayısını azaltmak.

Umarım yardımcı olur. Bunu yapmanın sadece bir yolu var!

Bu ne soruyorsun açık değildir. Web Sitesi Ödeme Pro için bir PayPal IPN dinleyici yazdı. I PayPal Documentation: IPN Sample Code buraya bakarak başladı ve sonra gerektiği gibi kodu değişiyor. Sorunuza biraz daha ayrıntılarını ekleyin.