在 ASP.net 中使用 NVP API 时 Paypal SetExpressCheckout 的问题 [英] Problems with Paypal SetExpressCheckout when using NVP API in ASP.net

查看:27
本文介绍了在 ASP.net 中使用 NVP API 时 Paypal SetExpressCheckout 的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在实现我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆