Docapture方法paypal api中的无效交易ID

时间:2012-06-28 08:18:25

标签: paypal paypal-sandbox paypal-adaptive-payments nvp

我正在使用DoCapture并使用DoDirectPayment的交易ID。但每当我捕获付款时,它都会显示“无效的交易ID”。当我尝试从直接信用卡付款中捕获一个peyment时,会发生这种情况,此信用卡付款也是通过DoDirectPayment方法进行的。 但是如果通过转到我的PayPal帐户并完成我的交易来表达快递,这也给了我交易ID。如果我使用此交易ID捕获付款,则付款流程成功完成!我不知道发生了什么!请有人帮我解决问题! 我正在使用PayPal API版本59.0 我的示例代码

                Session["stage"] = ASPDotNetSamples.Constants.ENVIRONMENT; //SandBox Environment
                //here my api credentials
                SetProfile.SessionProfile = SetProfile.CreateAPIProfile(ASPDotNetSamples.Constants.API_USERNAME,
                    ASPDotNetSamples.Constants.API_PASSWORD, ASPDotNetSamples.Constants.API_SIGNATURE, "", "",
                    ASPDotNetSamples.Constants.ENVIRONMENT);


                //NVPCallerServices caller = PayPalAPI.PayPalAPIInitialize();
                //NVPCodec encoder = new NVPCodec();
                com.paypal.sdk.services.NVPCallerServices caller = PayPalAPI.PayPalAPIInitialize();
                NVPCodec encoder = new NVPCodec();

                encoder["METHOD"] = "DoCapture";
                encoder["TRXTYPE"] = "D";
                encoder["AUTHORIZATIONID"] = authorization_id.; //the authrization id i got from the dodirectpayment
                encoder["COMPLETETYPE"] = CompleteCodeType; //completecodetype is completed
                double dAmount = Convert.ToDouble(actualAmount);
                encoder["AMT"] = String.Format("{0:0.00}", dAmount);                       

                string pStrrequestforNvp = encoder.Encode();
                string pStresponsenvp = caller.Call(pStrrequestforNvp);

                NVPCodec decoder = new NVPCodec();
                decoder.Decode(pStresponsenvp);
                string parentTransactionID = decoder["PARENTTRANSACTIONID"];
                string strAck = decoder["ACK"];

                if (strAck != null && (strAck == "Success" || strAck == "SuccessWithWarning"))
                {
                    string pStrResQue = "AUTHORIZATIONID=" + decoder["AUTHORIZATIONID"] + "&" +
                        //"PAYMENTSTATUS=" + decoder["PAYMENTSTATUS"] + "&" +
                                        "PAYMENTSTATUS=" + CompleteCodeType + "&" +
                                        "AMT=" + decoder["AMT"] + "&" +
                                        "TRANSACTIONID=" + decoder["TRANSACTIONID"];                        
                       // if  Payment is done successfully

                }
                else
                {
                     // if Payment is pending

                    string pStrError = "ErrorCode=" + decoder["L_ERRORCODE0"] + "&" +
                                       "Desc=" + decoder["L_SHORTMESSAGE0"] + "&" +
                                       "Desc2=" + decoder["L_LONGMESSAGE0"];                        
                    Response.Redirect("APIError.aspx?" + pStrError);
                }

提前致谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

见这个

com.paypal.sdk.services.NVPCallerServices caller = PayPalAPI.PayPalAPIInitialize();
    NVPCodec encoder = new NVPCodec();
    encoder["METHOD"] = "DoDirectPayment";
    encoder["PAYMENTACTION"] = "Authorization";
    //encoder["AMT"] = hfHoldAmount.Value.ToString();
    encoder["AMT"] = hfHoldAmount.Value.ToString();
    encoder["CREDITCARDTYPE"] = ddlCardType.SelectedValue;
    encoder["ACCT"] = txtCardNnumber.Text.Trim();
    encoder["EXPDATE"] = (ddlExpMonth.SelectedValue.Length == 1 ? "0" + ddlExpMonth.SelectedValue : ddlExpMonth.SelectedValue) + ddlExpYear.SelectedValue;
    encoder["CVV2"] = txtCVCode.Text.Trim();
    encoder["FIRSTNAME"] = txtFirstName.Text.Trim();
    encoder["LASTNAME"] = txtLastName.Text.Trim();
    encoder["STREET"] = txtAddress.Text.Trim();
    encoder["CITY"] = txtCity.Text.Trim();
    encoder["STATE"] = ddlStateProvince.Items.FindByValue(ddlStateProvince.SelectedValue).Text;
    encoder["ZIP"] = txtZipCode.Text.Trim();
    encoder["COUNTRYCODE"] = "US";
    encoder["CURRENCYCODE"] = "USD";