Bir işlemden sonra PayPal bilgi alın

3 Cevap php

Ben kişinin işlem tamamlandıktan sonra, benim sitede bir yere gitmek için kullanıcıyı yönlendirmek paypal istiyorum benim Web Sitesi üzerinde basit bir işlem oluşturmak istiyorsanız ve bunu ayrıştırmak için PHP kullanabilirsiniz yüzden PayPal detayları ile bana sağlamak istiyoruz ve onların satın alma için e-posta linki. Ben notify_url ne emin değilim? Teşekkürler

3 Cevap

PayPal, bu gibi çalışır:

Eğer bir "satın alma" düğmesi ile bir form var. Tıklandığında o zaman, PayPal bilgi (ürün, fiyat, hesap adınızı, vb) gönderir.

Alıcı daha sonra size ödemeyi kabul eder ve işlem tamamlandığında, PayPal bildirmek URL için bir "IPN" (anında ödeme bildirim) göndermek - işlemek için sunucu için bu URL'ye POST veri gönderir. Eğer onlar (yerine bir taklitçi değil) POST veri gönderdi ve onlar o zaman gerçek bir işlem olduğunu yanıt ise, müşteriye ürünü serbest eğer sormak için PayPal cevap. Lütfen alıcı PayPal web sitesinde "at" hala iken bu tüm arka planda olur unutmayın.

PayPal web sitenize alıcı döndüren bir nihai isteğe bağlı aşama vardır. Bu durumda, onlar geri "dönüş" url alıcı göndermek ve onlar (isteğe bağlı) (bu FDT diyoruz), yeniden işlem verilerini geri iletebilirsiniz. Ve yine bu geçerli bir işlem olup olmadığını Paypal ile kontrol ve bu noktada bir indirme vb sağlayabilir.

Kimse açıklıyor en zor biti buyer sizin bildirmek URL'ye yönlendirildi almaz olmasıdır. yani web sitenizin haber URL "ziyaretçi" PayPal, not the buyer, bu nedenle bu alıcının oturumun parçası olarak olmaz. Bu sürecin üç bölümden genelinde bir oturumu devam etmek istiyorsanız, o zaman formda alıcı izleme bir araç yaratmak ve "özel" olarak adlandırılan formun bir alanda PayPal bu geçmesi gerekiyor. Bu veriler IPN ve PDT veri size geri geçirilir ve özgün kullanıcı oturumu ile yeniden kurmak bir bağlantı için kullanabilirsiniz.

Eğer gerçekten IPN'i ve FDT hem de uygulamak gerekir - IPN-posta sonra bir yedek olarak FDT sahip başarısız olursa. Onlar geri PDT sayfasına yönlendirilirsiniz önce kullanıcının kendi web tarayıcısını kapatır ve eğer, o zaman bir yedek olarak bir IPN e-posta gönderdik.

IPN ve PDT arama ve bilgi oldukça bir sürü bulabilirsiniz. Paypal da tam dokümantasyon ve örnek komut dosyaları var.

Here's a PHP script Bunun için sorular tam olarak ne hemen hemen yok. O FDT işlemek değil unutmayın, bu yüzden risk IPN-posta alıcı ulaşmak için başarısız olabilir ve onlar ödemiş olacak ama hiçbir şey almış olmasıdır. Ama bu iyi bir başlangıç.

Notify URL gibi PayPal, döndürülen verileri kaydeder komut gitmelidir:

   /** Fetch order from PayPal (IPN reply)
    * @return int received ID of inserted row if received correctly, 0 otherwise
    */
   function FetchOrder()
   {
   $transactionID=$_POST["txn_id"];
   $item=$_POST["item_name"];
   $amount=$_POST["mc_gross"];
   $currency=$_POST["mc_currency"];
   $datefields=explode(" ",$_POST["payment_date"]);
   $time=$datefields[0];
   $date=str_replace(",","",$datefields[2])." ".$datefields[1]." ".$datefields[3];
   $timestamp=strtotime($date." ".$time);
   $status=$_POST["payment_status"];
   $firstname=$_POST["first_name"];
   $lastname=$_POST["last_name"];
   $email=$_POST["payer_email"];
   $custom=$_POST["option_selection1"];
   if ($transactionID AND $amount)
      {
      // query to save data
      return $this->insertID;
      }
   else
      {
      return 0;
      }
   }

Ayrıca, daha sonra bir emir doğrulamak için seçebilirsiniz:

/** Verify PayPal order (IPN)
    * PayPal returns VERIFIED or INVALID on request
    * @return bool verified 1 if verified, 0 if invalid
    */
   function VerifyOrder()
   {
   $_POST["cmd"]="_notify-validate";
   $ch=curl_init();
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
   curl_setopt($ch,CURLOPT_USERAGENT,"your agent - replace");
   curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com/cgi-bin/webscr");
   curl_setopt($ch,CURLOPT_POST, 1);
   foreach ($_POST as $key=>$value)
      {
      $string.="&".$key."=".urlencode(stripslashes($value));
      }
   curl_setopt($ch, CURLOPT_POSTFIELDS, $string);
   $result=curl_exec($ch);
   if ($result=="VERIFIED") return 1;
   else return 0;
   }

PDT yanıt ayrıştırma zaman ben kullanıyorum parse_str. Ediyorum Yanıt vücut url sadece değiştirme meselesi kodlanmış olduğundan çizgi ve işaretleri gibi bu kopartır

$result = curl_exec($ch);    
//replace the breaks with '&'
$r_string = str_replace("\n", "&", $result);
//parse the response into a key->value array
                    parse_str($r_string, $this->details);
                    if(!isset($this->details['SUCCESS'])){
                 //the "SUCCESS" or "FAIL" response is the first key   
    return FALSE;
                    }
                    else{
//the values of the response are now in an array
                        return TRUE;

                    }

Hatta ikinci parametre ($this->details) ve değerlerini bırakabilirsiniz uygulamaya bağlı olarak global değişkenler olarak belirlenmiştir.