PHP Doğrulama - ileri bir 3. parti ödeme için http POST değerleri geçen

5 Cevap php

Ben bu mümkün olup olmadığını bilmiyorum, ben bu yüzden bu mümkün olmayabilir başka yardım kılavuzları bulmak için görünmüyor olabilir ...

Ben bir çıkış sayfa var ileri bir 3. parti ödeme işlemci (WorldPay) hangi mesajların değişkenlerin bir yük.

Bu doğrulama amaçlı iki sayfa inbetween çeşit bir PHP komut dosyası koymak mümkün olup olmadığını bilmek istiyorum.

Onlar formunu doldurarak iken sepet içinde bir öğe tükendi eğer para alınır önce EG, o müşteriyi yakalamak olabilir. Ya da yararlı da form verileri ile kurcalamak eğer.

Ben kendi sitesinde bu yaparsanız ben ileri POST veri geçmek oturumları kullanabilirsiniz ancak harici bir web sitesi var, ben gizli bir forma ve başka bir HTML sayfası yapmadan veri göndermek için nasıl bilmiyorum Örneğin yenileyin.

Aslında aralarında büyük bir HTML sayfası gösteren değil - bu 'görünmez' yapmak mümkün mü?

5 Cevap

Evet formun onsubmit kanca çengel ve (jQuery kullanarak) böyle bir Ajax çağrısı göndererek bunu yapabilirsiniz:


$('#myform')[0].onsubmit = function() {
  if (form_check_elements(this.elements)) { /* ««« eg JS validator here */
    data = $('#myform').serialize();
    $.post('/ajax_validator.php', data, function(data, textStatus) {
      $('#myform')[0].submit();  /* ««« check the textStatus before here and
                                        eventually do not submit (wrap it in
                                        an if-clause) */
    });
    return false; /* make the form not post directly */
  } else {
    return false; /* do not post if JS validation fails */
  }
};

Biz bir 3. parti göndermeden önce bir oturumda form verilerini saklamak için bu parçacığını kullanın, böylece biz mevcut yaparken sahip sayfa, 3. parti döner.

Edit: Bu sadece etkin JS ile çalışacak unutmayın, ama geri dönüş için güvenli: form hala JS desteği olmadan gönderir.

EDIT:

Ashley said:

Okay, i've taken a look at the cURL manual and written this very simple script to forward the POST values to the 3rd party checkout. This just displays the contents of the checkout page though. The URL address shows the script currently running rather than forwarding to the 3rd party site. Also all their relatively linked graphics will not work. Can 'true' forwarding be achieved using cURL?

Kısa cevap - no.

O zaman cURL yapmanız sağlayacak tüm süreci işlemek gerekir (veri, vb doğrulamak, html / mesajları özelleştirmek) şeyler yapmak dışına sürecinin ortasında adım istiyorsanız size ödeme sürecini tarif yolu ile .

CURL ile, "ileri" isteği - dont sıralamak "vekil" isteği. Yani tarayıcı URL değiştirir ve göreli grafik çalışması dont asla gerçeği bekleniyor. CURL veya benzeri kullanımı ile kullanıcı son kullanıcı bile harici bir sayfa dokunaklı olduğunu biliyorum asla izin vermez. Eğer sunucu üzerinde, dış sunucuya tüm isteklerini işleme ve daha sonra sadece kullanıcı için dış sunucudan yanıt görüntüleyen VEYA özelleştirilmiş bir şekilde ondan verileri kullanabilir, böylece bu yanıtı ayrıştırma olacaktır.

secure.wp3.rbsworldpay.com/wcc/purchase sizin sunucuda bu formu taklit ve bunun yerine göstermek zorunda kullanıcının detayli etkileşimi gerektiren bir form dönen Esasen bu demektir. Kullanıcı formu gönderdiğinde Sonra dış sunucuya bir istek yapmak için tekrar cURL kullanın - bu kez kullanıcı tarafından gönderilen verilerin sonraki turda göndermek için. Yani, örneğin diyelim:

  • secure.wp3.rbsworldpay.com/wcc/purchase sepeti gösterir
  • secure.wp3.rbsworldpay.com/wcc/confirm ödeme nihai onay yapılacak gösterir
  • secure.wp3.rbsworldpay.com/wcc/success ve secure.wp3.rbsworldpay.com/wcc/error işlem başarılı veya başarısız olup olmadığını sırasıyla gösterir.

Sonra GÜNCEL şöyle özetlenebilir olabilir size işlem sürecinin bir parçası olarak dışarıdan 2 isteklerini yapmak için ihtiyacımız olacak:

  1. Kullanıcı sitenize dükkan ve cart öğeleri ekler
  2. Kullanıcı ödeme tıkladığında ve sepeti / kullanıcı verilerini doğrulamak
  3. # 2 veri geçerli olsaydı verileri paketlemek ve nakletmek secure.wp3.rbsworldpay.com/wcc/purchase cURL yoluyla
  4. # 3 cURL yanıtı cURL yanıtı verileri kullanarak kendi onaylamak sayfasını oluşturmak ve kullanıcıya göstermek başarılı olsaydı.
  5. Kullanıcı sunucu satın alma onay gönderir.
  6. Sen # 5 sunucuya gönderilen verileri paketlemek ve cURL yoluyla secure.wp3.rbsworldpay.com/wcc/confirm post it.
  7. # 6 cURL yanıt başarılı olursa o zaman dış sunucudan dönen beklenen "hata" veya "başarı" mesajı için bunu ayrıştırmak ve onları ya kendi özel hata iletileri görüntüler.
  8. Durulayın ve hata durumunda tekrar ;-)

Genel olarak konuşursak, çoğu ödeme işlemciler genellikle XML, JSON, veya HTML yerine düz metin gibi verileri ayrıştırmak kolay dönen bu temel sürecini destekler işleme bir seçenek var. Bu için bakmak isteyebilirsiniz. Bir çok kez genellikle entegrasyon sürecini hafifletmek için çeşitli programlama dilleri için inşa kütüphaneleri olacaktır.


Evet elbette öyle ... ben normalde bu gibi şeyler, ya da kullanan bir http istemci sınıfını yapmak için curl uzantısını kullanmak curl. Örneğin Zend_Http_Client - Kendiniz için biraz daha kolay yapmak ve bu sınıf kitaplıkları birini kullanmak isteyebilirsiniz. Bu sadece destekler curl, aynı zamanda yuva ve vekiller.

Ben böyle gitmek için öneririm:

Forma bir kullanıcıyı yönlendiren önce, sepet öğe tükendi olup olmadığını (sql quries yoluyla) kontrol edin. O satıldı, bu öğe aksi takdirde onu yeni satın almak için forma gidelim dışarı satıldı söyleyerek başka bir sayfaya yönlendirir.

Evet, yapabilirsiniz. Ne arıyorsun CURL fonksiyonudur:

http://php.net/manual/en/book.curl.php

Ayrıca bakınız:

http://php.dzone.com/news/execute-http-post-using-php-cu

Yerine temelde bazı basit nesneleri cURL ve / veya yuvalarını sarar ARMUT gelen HTTP_Request2 paketi gibi. Ilanı harika çalışıyor. Daha sonra ödeme işlemci üzerinde, doğrulama-denetimi için POST isteği sıçrama için kullanabilirsiniz.