2011-09-01 16 views
9

Merhaba, Facebook oyunum ve Paypal'ın ekspres ödeme ödeme hizmeti arasındaki geçişi uyguluyorum.Paypal SetExpressCheckout ile ilgili sorunlar ASP.net'de NVP API'sini kullanırken,

Web sitem ASP.net'de geliştirilmiştir ve entegrasyon için NVP API kullanıyorum.

Sorun şu ki, 10400 hatası almaya devam ediyorum - Sipariş Toplamı eksik.

My kodudur:

// Set the key/value pairs to send in the request 
var kvpl = new List<KeyValuePair<string, string>>(); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_PAYMENTACTION", "Sale")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_AMT", "23.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_ITEMAMT", "15.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_TAXAMT", "5.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_SHIPPINGAMT", "1.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_HANDLINGAMT", "1.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_INSURANCEAMT", "1.00")); 
kvpl.Add(new KeyValuePair<string, string>("PAYMENTREQUEST_0_CURRENCYCODE", "ILS")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_NAME0", "The name of product 1")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_NUMBER0", "5543312")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_DESC0", "The description of product 1")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_AMT0", "10.00")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_QTY0", "1")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_NAME1", "The name of product 2")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_NUMBER1", "4431234")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_DESC1", "The description of product 2")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_AMT1", "5.00")); 
kvpl.Add(new KeyValuePair<string, string>("L_PAYMENTREQUEST_0_QTY1", "1"));  
kvpl.Add(new KeyValuePair<string, string>("ALLOWNOTE", "1")); 
kvpl.Add(new KeyValuePair<string, string>("NOSHIPPING", "1")); 

// SetExpressCheckout 
bool ret = test.ShortcutExpressCheckout(amt, ref token, ref retMsg, kvpl); 

// Check return value 
if (ret) 
{ 
    // Success, store the token in the session and redirect to Paypal 
    session["token"] = token; 
    Response.Redirect(retMsg); 
} 
else 
{ 
    // Something went wrong 
    Response.Redirect("APIError.aspx?" + retMsg); 
} 

ShortcutExpressCheckout yönteminin kodudur:

public bool ShortcutExpressCheckout(string amt, ref string token, ref string retMsg, List<KeyValuePair<string, string>> customParams) 
{ 
    string host = "www.paypal.com"; 
    if (bSandbox) 
    { 
     pendpointurl = "https://api-3t.sandbox.paypal.com/nvp"; 
     host = "www.sandbox.paypal.com"; 
    } 

    string returnURL = "http://localhost:50020/" + "ConfirmPayment.aspx"; 
    string cancelURL = "http://localhost:50020/" + "CancelPayment.aspx"; 

    var encoder = new NVPCodec(); 
    encoder["VERSION"] = "72.0"; 
    encoder["METHOD"] = "SetExpressCheckout";   
    encoder["RETURNURL"] = returnURL; 
    encoder["CANCELURL"] = cancelURL; 

    if (customParams != null) 
    { 
     customParams.ForEach(kvp => encoder[kvp.Key] = kvp.Value); 
    } 

    string pStrrequestforNvp = encoder.Encode(); 
    string pStresponsenvp = HttpCall(pStrrequestforNvp); 

    var decoder = new NVPCodec(); 
    decoder.Decode(pStresponsenvp); 

    string strAck = decoder["ACK"].ToLower(); 
    if (strAck != null && (strAck == "success" || strAck == "successwithwarning")) 
    { 
     token = decoder["TOKEN"]; 

     string ECURL = "https://" + host + "/cgi-bin/webscr?cmd=_express-checkout" + "&token=" + token; 

     retMsg = ECURL; 
     return true; 
    } 
    else 
    { 
     retMsg = "ErrorCode=" + decoder["L_ERRORCODE0"] + "&" + 
       "Desc=" + decoder["L_SHORTMESSAGE0"] + "&" + 
       "Desc2=" + decoder["L_LONGMESSAGE0"]; 

     return false; 
    } 
} 

kod tarafından oluşturulan istek:

METHOD=SetExpressCheckout& 
VERSION=72.0& 
RETURNURL=[removed]& 
CANCELURL=[removed]& 
PAYMENTREQUEST_0_PAYMENTACTION=Sale& 
PAYMENTREQUEST_0_AMT=23.00& 
PAYMENTREQUEST_0_ITEMAMT=15.00& 
PAYMENTREQUEST_0_TAXAMT=5.00& 
PAYMENTREQUEST_0_SHIPPINGAMT=1.00& 
PAYMENTREQUEST_0_HANDLINGAMT=1.00& 
PAYMENTREQUEST_0_INSURANCEAMT=1.00& 
PAYMENTREQUEST_0_CURRENCYCODE=ILS& 
L_PAYMENTREQUEST_0_NAME0=The+name+of+product+1& 
L_PAYMENTREQUEST_0_NUMBER0=5543312& 
L_PAYMENTREQUEST_0_DESC0=The+description+of+product+1& 
L_PAYMENTREQUEST_0_AMT0=10&L_PAYMENTREQUEST_0_QTY0=1& 
L_PAYMENTREQUEST_0_NAME1=The+name+of+product+2& 
L_PAYMENTREQUEST_0_NUMBER1=4431234& 
L_PAYMENTREQUEST_0_DESC1=The+description+of+product+2& 
L_PAYMENTREQUEST_0_AMT1=5.00& 
L_PAYMENTREQUEST_0_QTY1=1.00& 
ALLOWNOTE=1& 
NOSHIPPING=1 

Ve Ben alıyorum o yanıttır:

TIMESTAMP=2011%2d09%2d01T12%3a23%3a19Z& 
CORRELATIONID=cf89eeaa101ae& 
ACK=Failure& 
VERSION=2%2e3& 
BUILD=2085867& 
L_ERRORCODE0=10400& 
    L_SHORTMESSAGE0=Transaction%20refused%20because%20of%20an%20invalid%20argument%2e%20See%20additional%20error%20messages%20for%20details%2e& 
L_LONGMESSAGE0=Order%20total%20is%20missing%2e& 
L_SEVERITYCODE0=Error 

Ben paypal sağlar dokümantasyon ve bu konuda birçok mesajları gözden ama ben yanlış yapıyorum bulamadık. Eski bir sürümünü kullandığınız için

Herhangi bir yardım takdir edilecektir,

Koby

cevap

19

Sipariş Toplam parametre, eksik. Gösterdiğiniz API isteği ve yanıtınız eşleşmiyor.

Aslında sürüm 2.3 yayınlıyorsan değil, sürüm 72.0 .. API tepkisini bakın:

aşağıda istek ve yanıt

API Talebi

benim için çalıştı "& VERSION =% 2 2e3"
USER=******************** 
PWD=******************** 
SIGNATURE=******************** 
METHOD=SetExpressCheckout 
VERSION=72.0 
RETURNURL=******************** 
CANCELURL=******************** 
PAYMENTREQUEST_0_PAYMENTACTION=Sale 
PAYMENTREQUEST_0_AMT=23.00 
PAYMENTREQUEST_0_ITEMAMT=15.00 
PAYMENTREQUEST_0_TAXAMT=5.00 
PAYMENTREQUEST_0_SHIPPINGAMT=1.00 
PAYMENTREQUEST_0_HANDLINGAMT=1.00 
PAYMENTREQUEST_0_INSURANCEAMT=1.00 
PAYMENTREQUEST_0_CURRENCYCODE=ILS 
L_PAYMENTREQUEST_0_NAME0=The+name+of+product+1 
L_PAYMENTREQUEST_0_NUMBER0=5543312 
L_PAYMENTREQUEST_0_DESC0=The+description+of+product+1 
L_PAYMENTREQUEST_0_AMT0=10&L_PAYMENTREQUEST_0_QTY0=1 
L_PAYMENTREQUEST_0_NAME1=The+name+of+product+2 
L_PAYMENTREQUEST_0_NUMBER1=4431234 
L_PAYMENTREQUEST_0_DESC1=The+description+of+product+2 
L_PAYMENTREQUEST_0_AMT1=5.00 
L_PAYMENTREQUEST_0_QTY1=1.00 
ALLOWNOTE=1 
NOSHIPPING=1 

API Tepki

TOKEN=EC-3UE641439J019845E 
TIMESTAMP=2011-09-01T17:13:17Z 
CORRELATIONID=4f7e60c2d70aa 
ACK=Success 
VERSION=72.0 
BUILD=2085867 
+1

Eğer th gelip nasıl bir fikrin var mı e sürümü doğru şekilde aktarılmıyor mu? Kod, sürümü açıkça 72.0 ... –

+3

olarak ayarladı. Bu cevap için teşekkürler. Kodda kazdım ve sürümü tanımlayan ve tanımladığım değeri geçersiz kılan 2.3'e ayarlayan başka bir yer buldum. ek parametre, paypal sihirbazı –

+0

tarafından oluşturulan kod tarafından eklendi. Hoşgeldin =) Memnun kaldın! – SgtPooki