PayPal iade URL'sini ayarlamak ve otomatik iade yapmak mı?


127

Bu bir takip sorusudur: PHP: PayPal ödemesini başlatmanın kolay yolu?

Yani benim sorunum dönüş url'sini belirliyor olmam. Ancak, PayPal ile ödeme yaptıktan sonra şunu yazan bir ekrana geliyorum:

Az önce ödemenizi tamamladınız. XXXX, ödemenizi tamamladınız. Bu ödeme için işlem kimliğiniz: XXXXXXXXXXXXX.

XX@XXXX.com adresine bir onay e-postası göndereceğiz. Bu işlem ekstrenizde PAYPAL olarak görünecektir.

Go to PayPal account overview

Bu ekranı göstermemesi ve doğrudan dönüş URL'sine gitmem gerekiyor. Sahibim:

  • "Dönüş" değişkenini ayarlayın
  • "Rm" değişkenini şu şekilde ayarlayın: 2 (kılavuza göre = " alıcının tarayıcısı POST yöntemi kullanılarak dönüş URL'sine yeniden yönlendirilir ve tüm ödeme değişkenleri dahil edilir ")

Aslında, işte formum:

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="onlinestore@thegreekmerchant.com" name="business">
  <!-- <input type="hidden" name="undefined_quantity" value="1" /> -->
  <input type="hidden" value="Order at The Greek Merchant:&lt;Br /&gt;Goldfish Flock BLG&lt;br /&gt;" name="item_name">
  <input type="hidden" value="NA" name="item_number">
  <input type="hidden" value="22.16" name="amount">
  <input type="hidden" value="5.17" name="shipping">
  <input type="hidden" value="0" name="discount_amount">        
  <input type="hidden" value="0" name="no_shipping">
  <input type="hidden" value="No comments" name="cn">
  <input type="hidden" value="USD" name="currency_code">
  <input type="hidden" value="http://XXX/XXX/XXX/paypal/return" name="return">
  <input type="hidden" value="2" name="rm">      
  <input type="hidden" value="11255XXX" name="invoice">
  <input type="hidden" value="US" name="lc">
  <input type="hidden" value="PP-BuyNowBF" name="bn">
  <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton">
</form>

Otomatik olarak geri dönmesini nasıl sağlayabileceğim hakkında bir fikriniz var mı? Alternatif olarak, veritabanını güncelleyebilmek için ödemenin sonucunu web siteme nasıl geri alabilirim? IPN nedir?


Lütfen, özel iade parametrenizdeki enteres ana bilgisayarının, paypal hesabınızda yapılandırılanla aynı olması gerektiğini unutmayın.
Andreas

Yanıtlar:


199

PayPal hesabınızda otomatik iadeyi etkinleştirmelisiniz, aksi takdirde bu returnalanı yok sayacaktır .

Belgelerden (Ocak 2019 yeni düzeni yansıtacak şekilde güncellendi):

Otomatik Geri Dönüş varsayılan olarak kapalıdır. Otomatik Geri Dönüşü açmak için:

  1. Https://www.paypal.com veya https://www.sandbox.paypal.com adresinden PayPal hesabınıza giriş yapın . Hesabım Genel Bakış sayfası görünür.
  2. Sağ üstteki dişli çark simgesini tıklayın. Profil Özeti sayfası açılır.
  3. Sol sütundaki Satış Tercihlerim bağlantısını tıklayın.
  4. Çevrimiçi Satış bölümünün altında, Web Sitesi Tercihleri ​​satırındaki Güncelle bağlantısını tıklayın. Web Sitesi Ödeme Tercihleri ​​sayfası görünür
  5. Web Sitesi Ödemeleri için Otomatik İade altında, Otomatik İadeyi etkinleştirmek için Açık radyo düğmesini tıklayın.
  6. Dönüş URL'si alanına, ödeyenlerin ödemelerini tamamladıktan sonra yönlendirilmesini istediğiniz URL'yi girin. NOT: PayPal, girdiğiniz İade URL'sini kontrol eder. URL uygun şekilde biçimlendirilmezse veya doğrulanamazsa, PayPal Otomatik İadeyi etkinleştirmez.
  7. Sayfanın altına gidin ve Kaydet düğmesini tıklayın.

IPN, anında ödeme bildirimi içindir. Size otomatik dönüşten elde edeceğinizden daha güvenilir / faydalı bilgiler verecektir.

IPN için belgeler burada: https://www.x.com/sites/default/files/ipnguide.pdf

IPN için Çevrimiçi Belgeler: https://developer.paypal.com/docs/classic/ipn/gs_IPN/

Genel prosedür, notify_urlistekle birlikte bir parametreyi iletmeniz ve IPN bildirimlerini işleyen ve doğrulayan bir sayfa oluşturmanızdır ve PayPal, ödemeler / geri ödemeler / vb. Olduğunda sizi bilgilendirmek için bu sayfaya talepler gönderecektir. geçmek. Bu IPN işleyici sayfası, siparişleri ödendi olarak işaretlemek için veritabanını güncellemek için doğru yer olacaktır.



5
Paypal'ın yeni web sitesi düzeni ile bu artık tam olarak doğru değil. Adım 3) tıkla My Selling Tools Adım 4) Click Website PreferencesaltındaSelling Online
WEBNET

2
Siparişin PayPal tarafından doğru bir şekilde işlendiğini doğrulamak için IPN kullanılmalıdır, ancak yine de kullanıcıya başarının farkında olduğunuzu göstermek için dönüş url'sine ihtiyacınız vardır. Çoğu zaman kullanıcılar gönderdiğiniz e-postayı almazlar, bu nedenle ürüne hemen erişebilmeleri (indirme vb.) İyi olur.
pcunite

1
@Kevin Stricker 2 farklı site için dönüş url'sini nasıl kurabiliriz? 2 web sitesi için bir paypal hesabı kullanırsam, ancak adımlarınızı kullanarak dönüş url'si olarak yalnızca bir URL ekleyebilirim. bunu 2 site için nasıl kullanabilirim?
Gaurav

4
Bu oldukça doğru değil "aksi takdirde göz ardı eder, PayPal hesabınızda otomatik dönüşünü sağlamak zorunda returnalanını." Ödemeye returnilettiğiniz herhangi bir URL parametresi kabul edilir ve satıcının PayPal hesap profilinde yapılandırılmış herhangi bir Otomatik İade URL'sini (veya eksikliğini) geçersiz kılar, ancak burada Otomatik İade etkin değilse, alıcının manuel olarak geçmesi gerekir. Otomatik olarak yeniden yönlendirilmek yerine söz konusu URL'ye yeniden yönlendirilmek için ödeme sonu.
SubGothius

42

Doğrudan ödemeler için PHP kullanan örnek form.

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="you@youremail.com">

    <input type="hidden" name="item_name_' . $x . '" value="' . $product_name . '">
    <input type="hidden" name="amount_' . $x . '" value="' . $price . '">
    <input type="hidden" name="quantity_' . $x . '" value="' . $each_item['quantity'] . '"> 
    <input type="hidden" name="custom" value="' . $product_id_array . '">
    <input type="hidden" name="notify_url" value="https://www.yoursite.com/my_ipn.php">
    <input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cbt" value="Return to The Store">
    <input type="hidden" name="cancel_return" value="https://www.yoursite.com/paypal_cancel.php">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="currency_code" value="USD">
    <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - its fast, free and secure!">
</form>

lütfen notify_url, return, cancel_return alanlarını gözden geçirin

Paypal tarafından ödeme yapıldıktan sonra talep edilen ipn (my_ipn.php) için örnek kod.

IPN oluşturma hakkında daha fazla bilgi için lütfen bu bağlantıya bakın .

<?php
// Check to see there are posted variables coming into the script
if ($_SERVER['REQUEST_METHOD'] != "POST")
    die("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from PayPal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)
//$url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
$url = "https://www.paypal.com/cgi-bin/webscr";
$curl_result = $curl_err = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);

$req = str_replace("&", "\n", $req);  // Make it a nice list in case we want to email it to ourselves for reporting
// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
    $req .= "\n\nData NOT verified from Paypal!";
    mail("you@youremail.com", "IPN interaction not verified", "$req", "From: you@youremail.com");
    exit();
}

/* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
  1. Make sure that business email returned is your business email
  2. Make sure that the transaction�s payment status is �completed�
  3. Make sure there are no duplicate txn_id
  4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */

// Check Number 1 ------------------------------------------------------------------------------------------------------------
$receiver_email = $_POST['receiver_email'];
if ($receiver_email != "you@youremail.com") {
//handle the wrong business url
    exit(); // exit script
}
// Check number 2 ------------------------------------------------------------------------------------------------------------
if ($_POST['payment_status'] != "Completed") {
    // Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete
}

// Check number 3 ------------------------------------------------------------------------------------------------------------
$this_txn = $_POST['txn_id'];
//check for duplicate txn_ids in the database
// Check number 4 ------------------------------------------------------------------------------------------------------------
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Homework - Examples of assigning local variables from the POST variables
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
// Place the transaction into the database
// Mail yourself the details
mail("you@youremail.com", "NORMAL IPN RESULT YAY MONEY!", $req, "From: you@youremail.com");
?>

Aşağıdaki resim, paypal sürecini anlamanıza yardımcı olacaktır. Paypal işlem akışı

Daha fazla okuma için aşağıdaki bağlantılara bakın;

umarım bu size yardımcı olur .. :)


1
Bugünün paypal API'leri için hala geçerli olup olmadığını bilen var mı? Sorunun 2 yaşında olduğunu görüyorum.
Matt Welander

1
'Dönüş' ve 'cancel_return' URL'leri alıcıya anında işlem geri bildirimi sağlamak için kullanılır ve bunun için PDT değişkenlerini kullanabilir. Bununla birlikte, PP onlarla yalnızca bir kez dener, bu nedenle kritik sipariş karşılama konusunda bunlara güvenilemez (örneğin, alıcı ödemeden sonra tarayıcıyı kapatır, ancak yine de PP'de). Bunun için, 'notify_url' aracılığıyla en azından 'Tamamlandı' durumunu işleyerek güvenilir IPN işlemiyle yedeklemek isteyebilirsiniz (başka herhangi bir şeyin başarısız olduğunu varsayın, belki de manuel görüşme gerektirir). PDT ve IPN sunucunuzun işlemesi, siparişin yalnızca bir kez doldurulmasını sağlamalıdır.
Patanjali

İşlerin değiştiğine ve Paypal success.php'nin artık yalnızca GET değişkenleriyle çalıştığına inanıyorum. Buraya bakın: stackoverflow.com/questions/45671366/…
Sol

23

bulduğum bir yol:

bu alanı oluşturulan form kodunuza eklemeyi deneyin:

<input type='hidden' name='rm' value='2'>

rm , dönüş yöntemi anlamına gelir ;

2 araç (gönderi)

Kullanıcı satın alıp sitenizin url'sine döndükten sonra, bu url de POST parametrelerini alır

ps php kullanıyorsanız, var_dump($_POST);dönüş url'nize (komut dosyası) eklemeyi deneyin , sonra bir test satın alın ve sitenize geri döndüğünüzde url'nizde hangi değişkenlerin olduğunu göreceksiniz.


Bunu gerçekten kullandın mı?
Simon Gibbs

Bu harikaydı. Paypal'da ödeme veri aktarımı kapalı olduğu sürece, tüm gönderi ayarlarının dönüş url'sine gönderilmesini sağlarsınız.
Jüly J

4

Yakın zamanda bu konuya benzer sorunlarla karşılaştığım için bunu paylaşıyorum

Uzun bir süre boyunca betiğim iyi çalıştı (temel ödeme formu) ve POST değişkenlerini success.php sayfama ve IPN verilerini de POST değişkenleri olarak döndürdü. Ancak, son zamanlarda, dönüş sayfasının (success.php) artık herhangi bir POST değişkenini almadığını fark ettim. Sandbox'ta test ettim ve canlı yayında kaldım ve PayPal'ın bir şeyleri değiştirdiğinden oldukça eminim!

Notify_url hala DB'yi güncellememe izin veren doğru IPN verilerini alıyor, ancak dönüş URL (success.php) sayfamda bir başarı mesajı görüntüleyemedim.

PayPal web sitesi ödeme tercihlerinde ve IPN'de seçenekleri açmak ve kapatmak için birçok kombinasyon denememe rağmen, hala bir mesajı işleyebilmem için komut dosyamda bazı değişiklikler yapmak zorunda kaldım. Bu mükemmel kılavuzu izledikten sonra PDT'yi ve Otomatik Geri Dönüşü açarak bunu başardım .

Şimdi her şey yolunda gidiyor, ancak tek sorun, dönüş URL'sinin çirkin olan tüm PDT değişkenlerini içermesidir!

Bunu ayrıca yararlı bulabilirsiniz


3

Otomatik Dönüş değerlerini yukarıda Kevin tarafından açıklandığı gibi ayarlama fikrinin biraz tuhaf olduğunu düşünüyorum!

Örneğin, ödemelerinizi işlemek için aynı PayPal hesabını kullanan birkaç web siteniz olduğunu veya bir web sitesinde farklı satın alma görevlerini gerçekleştiren ve ödeme yapıldığında farklı iade adresleri gerektiren birkaç bölümünüz olduğunu söyleyin. tamamlandı. Sayfama yukarıda 'Doğrudan ödemeler için PHP kullanan örnek form' bölümünde açıklandığı gibi bir düğme koyarsam, orada bir satır olduğunu görebilirsiniz:

input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php"

Bireysel dönüş değerini belirlediğiniz yer. Neden profil bölümünde de ayarlanması gerekiyor?!?!

Ayrıca, Profil Bölümünde yalnızca bir değer ayarlayabileceğiniz için, bu, (AFAIK) bir sitede birden çok eylemle Otomatik Geri Dönüşü kullanamayacağınız anlamına gelir.

Yorumlar lütfen ??


3
dönüş parametresi, paypal yapılandırmasındaki otomatik dönüş url kurulumunu geçersiz kılan her form için geçirilebilir
DropHit

1
evet DropHit'in söylediği gibi, bu sadece bir parametre olarak aktarmayı unutmanız durumunda varsayılan otomatik dönüş değeridir. bunu bir parametre olarak iletirseniz, web sitelerinizin her biri için dönüş url'nizi kullanır.
hamish

Bu yardımcı olur mu? codeseekah.com/2012/02/11/…
hamish

@DropHit PDT hala düğme başına geçersiz kılma returndeğerleriyle çalışıyor mu? Öyleyse, yine de PDT verilerini alacak farklı dönüş sayfalarım olabilir mi?
Dai

Geç cevap verdiğim için üzgünüm - çalışacağından emin değilim ANCAK mevcut entegrasyonlarım hala beklendiği gibi çalışıyor, ancak bu sizin kullanım durumunuzun benimki gibi çalışacağını garanti etmiyor
DropHit

1

ödeme sayfasında, 'cancel_return' gizli form öğesini arayın:

cancel_return form öğesinin değerini, dönmek istediğiniz URL'ye ayarlayın:


Aslında, 'iadeyi iptal et' yalnızca işlem başarısız olduğunda kullanılır. Ayrıca, başarıyla tamamlanan işlemleri işlemek için bir 'dönüş' URL'si sağlamalısınız, aksi takdirde bunlar için varsayılan URL kullanılacaktır.
Patanjali

İşlem başarısız olduğunda değil, alıcı siparişini tamamlamayı terk etmek için ödeme sırasında "İptal et ve [satıcı adı] 'na dön" bağlantısını tıkladığında.
SubGothius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.