2011-11-21 12 views
21

Paypal_helper ile codeignit içine tümleşik paypal ekledim (nereden bulduğumu hatırlamadım, fakat bu, ekspres ödeme için Paypals orijinal kodunun biraz yeniden yazılmış versiyonu. Bu işlevi çağırmayı deniyorum. ,PayPal Express Checkout'taki eksik tutar ve sipariş özeti

CallShortcutExpressCheckout ($ paymentAmount, $ currencyCodeType, $ paymentType, $ returnURL, $ cancelURL) "Satış" olarak int olarak $ paymentAmount, "NOK" olarak $ currencyCodeType ve $ paymentType gönderme

Hem Sandbox'ta hem de canlı olarak, paypal sitesinde hiçbir tutar görünmez ...

Neyin yanlış olabilir? İşlemimi daha fazla açıklamak için Düzenle'yi tıklatın. Bunu çoğunlukla, https://www.paypal-labs.com/integrationwizard/ecpaypal/cart.php'da belirtildiği gibi kullanırım. Bu form olmadan yapılabilir olmalı? paymentAmount standart değişken olarak gönderilebilir, fonksiyon CallShortcutExpressCheckout ?:

$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL); 
$ack = strtoupper($resArray["ACK"]); 
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING") 
{ 
    RedirectToPayPal ($resArray["TOKEN"]); 
} 
else 
{ 
    //Display a user friendly Error on the page using any of the following error information returned by PayPal 
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]); 
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]); 
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]); 
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]); 

    echo "SetExpressCheckout API call failed. "; 
    echo "Detailed Error Message: " . $ErrorLongMsg; 
    echo "Short Error Message: " . $ErrorShortMsg; 
    echo "Error Code: " . $ErrorCode; 
    echo "Error Severity Code: " . $ErrorSeverityCode; 
} 

belirteci bir veritabanına kaydedilir çağrılırken. Kullanıcı, hiçbir miktarın listelendiği Paypal'a yönlendirilir.

+0

Miktar alanı için doğru alan adı kullanıyor musunuz ..? –

+0

Form kullanmıyorum ... Bu işlevi aradığımda, ödeme Paypal'da ayarlanmalıdır ... Daha sonra kodumda, Kullanıcıya Paypal: RedirectToPayPal ($ paypal ["JETON"]); –

+0

https://github.com/hrendoh/PayPal-Express-Checkout-example –

cevap

50

sen sözde 'satır öğesi ayrıntıları' (ürün verileri) geçen, Paypal toplam miktarı göstermez değiliz gibi .

yalnızca şunlardır sizin SetExpressCheckout API ardından, PayPal'a satır öğesi ayrıntıları göndermeye başlamak istiyorsanız https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxx&useraction=commit (yerine https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxx)

için alıcılar yönlendirmek, cari satın alma için miktarını göstermek istiyorsanız istek:

// Total amount of the purchase, incl shipping, tax, etc 
PAYMENTREQUEST_0_AMT=300.0 
// Total amount of items purchased, excl shipping, tax, etc  
PAYMENTREQUEST_0_ITEMAMT=300.0 
// Authorize the funds first (Authorization), or capture immediately (Sale)?  
PAYMENTREQUEST_0_PAYMENTACTION=Sale 
// First item 
L_PAYMENTREQUEST_0_NAME0=Item1 
L_PAYMENTREQUEST_0_QTY0=1 
L_PAYMENTREQUEST_0_AMT0=100.00 
// Second item 
L_PAYMENTREQUEST_0_NAME1=Item2 
L_PAYMENTREQUEST_0_QTY1=1 
L_PAYMENTREQUEST_0_AMT1=200.00 

siz de kendi tarihinin bu görmek istiyorum, ayrıca DoExpressCheckoutPayment bu eklemeniz gerekir.

Bu

da ben paypal ödeme sayfasında ve tüccar işlem geçmişi sayfasında gösterilen öğesi ayrıntıları olmasını istedik bu kısa ExpressCheckout rehberi yılı 2013 üzerinde çalışıyor dağınık Paypal dokümanlar sitesinde geniş okumadan sonra php paypal express checkout problem

+14

& useraction = commit çalıştı. Teşekkür ederiz :) –

+1

Not: Bu veriler herhangi bir PayPal raporuna dahil edilmeyecek, dolayısıyla hedefiniz varsa satır öğeleri eklemeniz gerekecek. – Robert

+0

Tek istediğim aktarılacak doğru miktar ... –

14

gönderilmiş .

Paypal dokümantasyon

Sen, doğrudan web tarayıcısında aşağıdaki url yöntemleri çağırmak buna göre belirteç ve payerid parametrelerini güncelleyebilirsiniz bağlar.

Bu bir dijital eşyadır, bu nedenle nakliye ve taşıma ücretleri verilmez. Tek ürün sırası. Tutar ve vergi ücretleri verilir. Onaylanmış bir teslimat adresi, gönderim adresi alanları, freetext nota izin verilmez, ödemenin paypal hesabına ve kayıt gerektirmesine gerek yoktur (solutiontype = taban). Paypal sitesinde kredi kartı bölümünü etkinleştirin (landingpage = faturalandırma). Paypal sitesinde özelleştirilmiş marka başlığı kullanın. İzleme amacı için kendi değerini vermek için özel alan kullanın. Satıcı sitesi işlem geçmişinin öğe ayrıntılarını göstermesi gerekir (SetExpressCheckout ve DoExpressCheckoutPayment yöntemlerinde öğe ayrıntıları verin).

SetExpressCheckout yöntemi yeni bir işlem açar

https://api-3t.sandbox.paypal.com/nvp? 
    USER=<userid> 
    &PWD=<pwd> 
    &SIGNATURE=<mysig> 
    &METHOD=SetExpressCheckout 
    &VERSION=98 
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE 
    &REQCONFIRMSHIPPING=0 
    &NOSHIPPING=1 
    &ALLOWNOTE=0 
    &SOLUTIONTYPE=Sole 
    &LANDINGPAGE=Billing 
    &BRANDNAME=MY+WEBSHOP+TITLE 
    &PAYMENTREQUEST_0_AMT=22.22 
    &PAYMENTREQUEST_0_TAXAMT=4.30 
    &PAYMENTREQUEST_0_ITEMAMT=17.92 
    &PAYMENTREQUEST_0_DESC=mypurdesc 
    &PAYMENTREQUEST_0_CUSTOM=custom1 
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR 
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1 
    &L_PAYMENTREQUEST_0_NAME0=MyItem1 
    &L_PAYMENTREQUEST_0_DESC0=Item1+description 
    &L_PAYMENTREQUEST_0_QTY0=1 
    &L_PAYMENTREQUEST_0_AMT0=17.92 
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30 
    &RETURNURL=https://myserver.com/webapp/paypal.jsp%3Fcmd=successexp 
    &CANCELURL=https://myserver.com/webapp/paypal.jsp%3Fcmd=cancelexp 

Cevap ACK = Başarı veya ACK = SuccessWithWarning olması gerekir, TOKEN değerini Paypal sitesine

Yönlendirme kullanıcı tarayıcıyı okumak belirteç değer vermek

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=<token> 

Kullanıcı paypal hesabı kullanır veya kredi kartı. Paypal, kullanıcıyı URL'leri döndürmeye veya iptal etmeye yönlendirir. Yönlendirme hedefi URL'si, belirteci ve PayerID parametre değerlerini alır. İşlem tamamlanmadı, ancak doExpressCheckoutPayment yöntemini çağırmalıyız. (OK ile, düğme İPTAL) ekranda

göster onayla iletişim veya basit vaka bir hareketi tamamlamak ve "Teşekkür ederim, satın alma tamamlandı" mesaj göstermektedir. Kullanıcı zaten paypal sitede bir ödeme kabul etti ve işlemin sonuçlandırılmasını bekliyor.

Aynı istek-yanıtı işleyicisi içinde veya zaman uyumsuz arka plan görevini kullanarak işlem yapabilirsiniz. Paypal site geçici olarak kullanılamayabilir, bu yüzden hemen çalışmasını beklemeyin.

yönlendirme başarılı olduysa işlem yapar, bileti kullanabilir ve

https://api-3t.sandbox.paypal.com/nvp? 
    USER=<userid> 
    &PWD=<pwd> 
    &SIGNATURE=<mysig> 
    &METHOD=DoExpressCheckoutPayment 
    &VERSION=98 
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE 
    &PAYMENTREQUEST_0_AMT=22.22 
    &PAYMENTREQUEST_0_TAXAMT=4.30 
    &PAYMENTREQUEST_0_ITEMAMT=17.92 
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR 
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1 
    &L_PAYMENTREQUEST_0_NAME0=MyItem1 
    &L_PAYMENTREQUEST_0_QTY0=1 
    &L_PAYMENTREQUEST_0_AMT0=17.92 
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30 
    &token=<token> 
    &payerid=<payerid> 

Oku ACK = Başarı payerid ve

Paypal alanları

ACK=Success 
PAYMENTINFO_0_PAYMENTSTATUS=Completed 
PAYMENTINFO_0_ACK=Success 
PAYMENTINFO_0_AMT=22.22  total amount must match 
PAYMENTINFO_0_FEEAMT=0.99 (just for fun, read paypal comission fee) 
PAYMENTINFO_0_CURRENCYCODE=EUR currency must match 

(İsteğe bağlı) oku işlem ayrıntıları doğrulamak

İşlem iş akışı veya herhangi bir işlem sırasında bunu kullanabilirsiniz. Daha sonra kullanmak için bir belirteci saklarsa ime. Yanıt (

) ( )
https://api-3t.sandbox.paypal.com/nvp 
    ?USER=<userid> 
    &PWD=<pwd> 
    &SIGNATURE=<mysig> 
    &METHOD=GetExpressCheckoutDetails 
    &VERSION=98 
    &token=<token> 

Yanıt parametrelerini okuyun.

ACK=Success 
CHECKOUTSTATUS=PaymentActionCompleted 
PAYMENTREQUEST_0_AMT=22.22 
PAYMENTREQUEST_0_TAXAMT=4.30 
PAYMENTREQUEST_0_CURRENCYCODE=EUR 

(İsteğe bağlı) Okuma ve işlem kimliği, korelasyon kimliği ve belirteç kimliği kaydetmek ve logtable için yazıyorum.

PAYMENTREQUEST_0_TRANSACTIONID=11E585715B622391E 
CORRELATIONID=4534b683c335f 

Herhangi bir mantık hatası varsa yorumları almaya hazırım.

+1

İdeal GetExpressCheckoutDetails DoExpressCheckoutPayment önce gerçekleşmelidir. Genellikle, işlemi sonlandırmak için DoExpressCheckoutPayment'i aramadan önce 'siparişinizi gözden geçirin' türü sayfasını sağlamak için kullanılır. – Robert