2015-06-01 24 views
5

Bu soruyu araştırdım ve tüm önerileri denedim ancak hiçbir şey işe yaramıyor.PayPal sanal alanı IPN doğrulaması her zaman geri döner INVALID

Bu kodu denedim: https://developer.paypal.com/docs/classic/ipn/ht_ipn/ ama çalışmıyor. Sadece kopya yapıştırılmış ve eski magick_quotes routunes silindi.

Bu kodu denedim: http://samples.geekality.net/view-source.php?file=ipn/ipn_handler.class.php ve ayrıca çalışmıyor. Aşağıdaki yapmaya çalıştım Her durumda

:

$req = 'cmd=_notify-validate&' . file_get_contents('php://input'); 

Ben bana gönderilen neyi IPN tam gönderilen sağlamak. Ayrıca, hata ayıklama proxy'sini (Fiddler) kullandım ve IPN'nin bana gönderdiği ve IPN'ye gönderdiğim şeyi kaydettim. İsteklerim, isteğimin cmd=_notify-validate& dizesi tarafından öncelenmesi dışında, bayt-byte özdeştir.

Evet, uygun sanal alan URL'si kullandığımı kontrol ettim. İşte tüm istekler organları şunlardır: IPN bana gönderilen Ne

: (Ben sadece takımı konulmaz XXX kişisel verileri) Ben IPN gönderilen Ne

POST http://localhost.loc/en/payment/success/1 HTTP/1.1 
Host: localhost.loc 
Connection: keep-alive 
Content-Length: 921 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Origin: null 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 

mc_gross=1.00&protection_eligibility=Ineligible&payer_id=5XNKM66NSDKC4&tax=0.00&payment_date=05%3A34%3A11+Jun+01%2C+2015+PDT&payment_status=Completed&charset=utf-8&first_name=XXX&mc_fee=0.33&notify_version=3.8&custom=topup%3A262262%3A1%3A1433162020&payer_status=verified&business=XXX&quantity=1&payer_email=XXX&verify_sign=AG58dBsn5g2z8O8NEjotbuJGP14PAIpZ4k26VL8IyhaDPkcDRj002Keq&memo=hmgvjgjhgfjhfggjhfjtfgjh&txn_id=4CN141026K278934Y&payment_type=instant&last_name=XXX&receiver_email=XXX&payment_fee=0.33&receiver_id=DCMXPXGX4QX6J&txn_type=web_accept&item_name=Account+top+up&mc_currency=USD&item_number=Account+262262+top+up&residence_country=US&test_ipn=1&handling_amount=0.00&transaction_subject=topup%3A262262%3A1%3A1433162020&payment_gross=1.00&shipping=0.00&auth=ANSTBwT3znll-gJQZO2cLoV5QJFW9v8W.FqyWxffdtI0L-9mfsoe2xRL44M86Sn2XtYGtcqG4Fjjel1kdYZyxpQ 

:

POST https://www.sandbox.paypal.com/cgi-bin/webscr HTTP/1.1 
Host: www.sandbox.paypal.com 
Accept: */* 
Content-Length: 942 
Content-Type: application/x-www-form-urlencoded 

cmd=_notify-validate&mc_gross=1.00&protection_eligibility=Ineligible&payer_id=5XNKM66NSDKC4&tax=0.00&payment_date=05%3A34%3A11+Jun+01%2C+2015+PDT&payment_status=Completed&charset=utf-8&first_name=XXX&mc_fee=0.33&notify_version=3.8&custom=topup%3A262262%3A1%3A1433162020&payer_status=verified&business=XXX&quantity=1&payer_email=XXX&verify_sign=AG58dBsn5g2z8O8NEjotbuJGP14PAIpZ4k26VL8IyhaDPkcDRj002Keq&memo=hmgvjgjhgfjhfggjhfjtfgjh&txn_id=4CN141026K278934Y&payment_type=instant&last_name=XXX&receiver_email=XXX&payment_fee=0.33&receiver_id=DCMXPXGX4QX6J&txn_type=web_accept&item_name=Account+top+up&mc_currency=USD&item_number=Account+262262+top+up&residence_country=US&test_ipn=1&handling_amount=0.00&transaction_subject=topup%3A262262%3A1%3A1433162020&payment_gross=1.00&shipping=0.00&auth=ANSTBwT3znll-gJQZO2cLoV5QJFW9v8W.FqyWxffdtI0L-9mfsoe2xRL44M86Sn2XtYGtcqG4Fjjel1kdYZyxpQ 

Herkes bana yardımcı olabilir neyi Yanlış mıyım? Teşekkürler.

+0

Düzenlemenizi kendi sorunuzu yanıtlamaya geçirmelisiniz :-) – Marty

cevap

3

AARRRRGH !!!!!!!! PayPal için sadece kirli kelimelerim var !!!!!!! Sorun, charset alanında ... (davulcu ... tadam!) Oldu! Hayır, değeri IPN'nin size gönderdiği ile aynı olmalıdır, ama ... ... ÜSTÜNDE! IPN bunu küçük harfle gönderir! Bu nedenle, el ile veriyi "olduğu gibi" geri döndürmemizi istediğimizden emin olmak için IPN verilerini değiştirmelisiniz. PayPal hatası mı?

Yani benim son çalışma kodudur: (HTTP_Request2 kullanarak)

protected function verifyPostData() { 
    $this->request->setBody('cmd=_notify-validate&' . str_replace('=utf-8', '=UTF-8', file_get_contents('php://input'))); 
    $response = $this->request->send(); 
    if ($response->getStatus() != 200) { 
     throw new \RuntimeException("Transaction data verification request failed with code {$response->getStatus()}"); 
    } 
    $content = trim($response->getBody()); 
    return ($content == 'VERIFIED'); 
} 

ben yaptım nasıl: Bu işlem ve elde edilen işlem verileri için PDT istekte bulundu. Ardından PDT ve IPN verilerinin alan karşılaştırmasına saha yaptım. PDT, auth, verify_sign ve test_ipn gibi bazı IPN alanlarına sahip değildir. Fakat diğer tüm alanlar aynı olmalı. Ve tek fark, charset alanının karakter durumundaydı. Sonra değiştirilmiş verileri doğrulamaya çalıştım ve beklenmedik bir şekilde başarılı oldu!

0

Bu, son bir PayPal hatasıdır, müşteri bir ödemeyi tamamladığında ve birkaç saniye beklemek yerine "Buraya dönmek için tıklayın ..." tuşunu tıklattığınızda, sitenizdeki PDT komut dosyasına geçirilen parametreler küçük harfle gönderilir. Bu, aynı zamanda büyük/küçük harfe duyarlı veya kodlanmış cm/custom parametresi gibi şeyleri de karıştırır.

Görünüşe göre PayPal bunun farkında.

İlgili konular