PayPal entegrasyonu sıkıntılardan: PDT sitesinde dönüş asılı

1 Cevap php

PayPal IPN & uygulanması ediyorum PDT. Bazı baş ağrısı ve Sonrası sanal at zaman, IPN iyi çalışıyor ve PDT doğru $ _GET veri döndürür. Aşağıdaki gibi uygulamasıdır:

  • PayPal'a formda kullanıcı kimliği geçmesi
  • Kullanıcı ürün satın alır ve belirli bir kullanıcı kimliği için veritabanını günceller IPN'i tetikler
  • Kullanıcı siteye döndüğünde PDT işlem kimliğini döndürür
  • Dönüş sayfa "lütfen bekleyin" ve tekrar-Ajax-çek işlem durumu diyor
  • Kullanıcı başarı / başarısızlık sayfasına yönlendirilir

Her şey o HARİÇ, iyi çalışan bir dönüş POST, sayfa kilitleniyor yapmak PDT için PayPal hazır PHP kodu kullanarak. Kullanıcı geri siteme geçmez. Ben sadece bir şey BAŞARISIZ durumu almıyorum. Komik bir şey bilinmeyen bir hata oluştuğunda bir kez, benim test alanı kısa bir süre için tepkisiz hale geliyor.

Kodu (PHP): https://www.paypal.com/us/cgi-bin/webscr?cmd=p/xcl/rec/pdt-code-outside

Ben geri POST açıklama ise, tüm çalışıyor. Ben kodu süre {} döngü girer bir kez sorunu tespit etmek mümkün. Ne yazık ki, PayPal kodu için sıfırdan bir yedek yazmak için yeterince deneyimli değilim, bu yüzden gerçekten yanlış olabilir ne herhangi bir fikir takdir ediyorum.

POST geri :/ / www.sandbox.paypal.com ssl gider, ve ben düğme kodunu ve tüm sandbox deneme hesabı üzerinden yaratılmış bir yetkilendirme belirteç kullanıyorum.

Şimdiden teşekkürler.

UPDATE:

Ben bu çizgiye sorunu daralmış ettik: $line = fgets($fp, 1024);

Bu sadece kilitleniyor ve ben neden emin değilim.

1 Cevap

RESOLVED:

CURL geçiş tüm sorunları çözer. İşte birisi bu ile geliyor ve ben olduğu gibi umutsuz durumda kod:

// Prepare data
$req = 'cmd=_notify-synch';
$tx_token = $_GET['tx'];
$auth_token = '<-- your token (sandbox or live) -->';
$req .= '&tx='.$tx_token.'&at='.$auth_token;
// Post back to PayPal to validate
$c = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); // SANDBOX
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $req);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($c);
$response_code = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
if(!$contents || $response_code != 200) {
   // HTTP error or bad response, do something
} else {
   // Check PayPal verification (FAIL or SUCCESS)
   $status = substr($contents, 0, 4);
   if($status == 'FAIL') {
      // Do fail stuff
   } elseif($status == 'SUCC') {
      // Do success stuff
   }
}

Teknik, substr () "BAŞARI" değil "SUCC" kontrol edilmez. Ancak, yalnızca "BAŞARI" ya da olası değerleri olan "FAIL", farketmez olduğunu verilmiştir.

Bu aynı kod belirgin küçük değişiklikler ile, hem de IPN için çalışır.