始终"此交易无效......"现场PayPal for ASP.NET

时间:2014-08-05 10:43:50

标签: asp.net-mvc paypal

我正在开发ASP.NET上的Web应用程序。在应用程序中,用户可以购买物品。 对于PayPal的工作我使用PayPal Merchant SDK for .NET包。应用程序适用于沙箱,但有实时显示错误:"This transaction is invalid"。请返回收件人的网站,使用他们的常规结账流程完成您的交易。“ 当用户点击购买按钮时,我执行代码:

// only for live
var paypalConfig = new Dictionary<string, string> { 
                {"account1.applicationId", "<APP-LIVEID>"},

                {"account1.apiUsername", "<username>"},
                {"account1.apiPassword", "<pass>"},
                {"account1.apiSignature", "<signature>"},
                {"mode", "live"}};

try
        {
            var currency = CurrencyCodeType.USD;
            var paymentItem = new PaymentDetailsItemType
            {
                Name = "item",
                Amount = new BasicAmountType(currency, amount.ToString()),
                ItemCategory = ItemCategoryType.DIGITAL,
            };

            var paymentItems = new List<PaymentDetailsItemType>();
            paymentItems.Add(paymentItem);

            var paymentDetail = new PaymentDetailsType();
            paymentDetail.PaymentDetailsItem = paymentItems;
            paymentDetail.PaymentAction = PaymentActionCodeType.SALE;
            paymentDetail.OrderTotal = new BasicAmountType(currency, amount.ToString());
            paymentDetail.SellerDetails = new SellerDetailsType {
                PayPalAccountID= sellerEmail
            };
            var paymentDetails = new List<PaymentDetailsType>();
            paymentDetails.Add(paymentDetail);

            var ecDetails = new SetExpressCheckoutRequestDetailsType { 
                ReturnURL = returnUrl,
                CancelURL = cancelUrl,
                PaymentDetails = paymentDetails,

            };


            var request = new SetExpressCheckoutRequestType
            {
                Version = "104.0",
                SetExpressCheckoutRequestDetails = ecDetails,
            };

            var wrapper = new SetExpressCheckoutReq
            {
                SetExpressCheckoutRequest = request
            };

            var service = new PayPalAPIInterfaceServiceService(paypalConfig);
            var setECResponse = service.SetExpressCheckout(wrapper);

            if (sandbox)
                return "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token={0}".FormatWith(setECResponse.Token);

            return "https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&TOKEN={0}".FormatWith(setECResponse.Token);

        }
        // # Exception log    
        catch (System.Exception ex)
        {
            // Log the exception message       

            Console.WriteLine("Error Message : " + ex.Message);
        }

毕竟我将用户重定向到收到了TOKEN的网址。

对于我在PayPal上注册的应用程序,我只在“自适应付款&gt;基本付款&gt;结帐,汇款或并行付款”中设置选项

为什么直播PayPal付款不起作用?是什么原因?

2 个答案:

答案 0 :(得分:0)

已移除

ItemCategory = ItemCategoryType.DIGITAL,

和所有工作

答案 1 :(得分:0)

根据之前的经验,这个问题通常来自于拥有“空”令牌,因为“setExpressCheckout”请求中存在一些错误(在快速结账流程中,您向paypal请求交易令牌)。

基本上,你向paypal请求一个令牌,这样你就可以构建重定向URL,但是你犯了一些错误,而paypal会给你一个错误,但没有令牌,所以你建立的URL没有令牌(或错误的)。 / p>

如果您尝试将用户重定向到带有空令牌的结帐网址(https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token= {...}&amp; useraction = {...}),您将收到此错误。

其实我想知道还有其他原因......