2011-09-01 12 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の応答を参照してください。

以下の要求と応答

APIリクエスト

を私のために働いた "&は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レスポンス

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

関連する問題