Problems with Paypal SetExpressCheckout when using NVP API in ASP.net
Hi, I am implementing the intergration between my Facebook game and Paypal's express checkout payment service.
My website is developed in ASP.net and I am using NVP API for the integration.
MY problem is that I am keep getting the 10400 error - Order Total is missing.
My code is:
// 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);
}
The code of the ShortcutExpressCheckout method is:
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;
}
}
The request that generated by the code is:
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
And the response that I am getting is:
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_L开发者_如何转开发ONGMESSAGE0=Order%20total%20is%20missing%2e&
L_SEVERITYCODE0=Error
I reviewed the documentation that paypal provides and many posts about this issue but I couldn't find what I am doing wrong.
Any help will be appreciated,
Koby
Your Order Total parameter is missing, because you're using an old version. The API request you show, and your response, do not match.
You're actually submitting version 2.3, not version 72.0.. see your API response: "VERSION=2%2e3& "
The below request and response worked for me
API Request
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 Response
TOKEN=EC-3UE641439J019845E
TIMESTAMP=2011-09-01T17:13:17Z
CORRELATIONID=4f7e60c2d70aa
ACK=Success
VERSION=72.0
BUILD=2085867
精彩评论