2011-09-01 65 views
9

嗨, 我正在实施我的Facebook游戏和Paypal的快速​​结账支付服务之间的整合。在ASP.net中使用NVP API时的PayPal SetExpressCheckout问题

我的网站是在ASP.net中开发的,我使用NVP API进行集成。

我的问题是,我不断收到10400错误 - 订单总计丢失。

我的代码是:

// 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方法的代码是:

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; 
    } 
} 

由代码生成的请求为:

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 

和,我得到的回应是:

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 

我回顾了贝宝提供的文件和有关此问题的很多帖子,但我找不到什么,我做错了。

任何帮助将不胜感激,

Koby

回答

19

您的订单总额参数丢失,因为你使用的是旧版本。您显示的API请求和您的回复不匹配。

你实际上提交2.3版本,而不是版本72.0 ..看到你的API响应: “VERSION = 2%2E3 &”

下面的请求和响应工作对我来说

API请求

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响应

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

你有任何想法是怎么来次e版本没有正确传递?该代码显式设置为72.0 ... –

+3

感谢您的答案。我挖掘了代码并找到了另一个定义版本的地方,并将其设置为2.3,这覆盖了我定义的值。附加参数是由paypal向导生成的代码添加的 –

+0

不客气=)很高兴你把它修好了! – SgtPooki

相关问题