在 ASP.net 中使用 NVP API 时 Paypal SetExpressCheckout 的问题 [英] Problems with Paypal SetExpressCheckout when using NVP API in ASP.net
问题描述
我正在实现我的 Facebook 游戏和 Paypal 的快速结账支付服务之间的集成.
Hi, I am implementing the intergration between my Facebook game and Paypal's express checkout payment service.
我的网站是在 ASP.net 中开发的,我使用 NVP API 进行集成.
My website is developed in ASP.net and I am using NVP API for the integration.
我的问题是我不断收到 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
我查看了 paypal 提供的文档和许多关于此问题的帖子,但我找不到我做错了什么.
I reviewed the documentation that paypal provides and many posts about this issue but I couldn't find what I am doing wrong.
任何帮助将不胜感激,
科比
推荐答案
您的 Order Total 参数丢失,因为您使用的是旧版本.您显示的 API 请求与您的响应不匹配.
Your Order Total parameter is missing, because you're using an old version. The API request you show, and your response, do not match.
您实际上提交的是 2.3 版,而不是 72.0 版.请参阅您的 API 响应:VERSION=2%2e3&"
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 请求
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
这篇关于在 ASP.net 中使用 NVP API 时 Paypal SetExpressCheckout 的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!