0

我正在做一个 DoCapture 并使用 DoDirectPayment 的交易 ID。但是每次我捕获付款时,它都会显示“无效的交易 ID”。当我尝试从信用卡直接付款中获取一笔付款时,就会发生这种情况,而且这种信用卡付款是通过 DoDirectPayment 方法进行的。但是,如果通过转到我的 PayPal 帐户并完成我的交易来进行 expressCheckout,这也会给我交易 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);
                }

提前致谢!

4

2 回答 2

0

在此处查看 DoCapture 文档

在此处查看 DoDirectPayment 文档

于 2012-07-02T08:43:14.223 回答
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";
于 2012-07-02T08:46:38.637 回答