C# WinForm Paypal 与 asmx Web 服务集成时出错

Posted

技术标签:

【中文标题】C# WinForm Paypal 与 asmx Web 服务集成时出错【英文标题】:Error in C# WinForm Paypal integration with asmx web service 【发布时间】:2018-02-21 04:41:14 【问题描述】:

我正在尝试将 Paypal 支付集成到 .NET 4.0 C# WinForm 应用程序中执行 DirectPayment(无需打开带有 paypal 站点的浏览器),导致 asmx webservices 从 WebMethod 调用此方法

public DoDirectPaymentResponseType DoDirectPaymentAPIOperation(string 
    amountinUSDollar, string creditCardType, string creditCardNumber, int 
    exp_month, int exp_year, string firstName, string middleName, string 
    lastName, string address1, string address2, string city, string state, 
    string zip, string phoneNumber, string CVV2)

    DoDirectPaymentResponseType response = new 
    DoDirectPaymentResponseType();
    DoDirectPaymentReq wrapper = new DoDirectPaymentReq();
    DoDirectPaymentRequestType request = new DoDirectPaymentRequestType();
    DoDirectPaymentRequestDetailsType requestDetails = new 
        DoDirectPaymentRequestDetailsType();
    requestDetails.PaymentAction = (PaymentActionCodeType)               
        Enum.Parse(typeof(PaymentActionCodeType), "SALE");
    CreditCardDetailsType creditCard = new CreditCardDetailsType();
    PayerInfoType cardOwner = new PayerInfoType();
    PersonNameType payer = new PersonNameType();
    payer.FirstName = firstName;
    payer.MiddleName = middleName;
    payer.LastName = lastName;
    cardOwner.PayerName = payer;
    creditCard.CardOwner = cardOwner;
    creditCard.CreditCardNumber = creditCardNumber; 
    if (creditCardType == "VISA")
    
        creditCard.CreditCardType = CreditCardTypeType.VISA;
    
    else if (creditCardType == "MasterCard")
    
        creditCard.CreditCardType = CreditCardTypeType.MASTERCARD;
    
    creditCard.CVV2 = CVV2;
    creditCard.ExpMonth = exp_month;
    creditCard.ExpYear = exp_year;
    requestDetails.PaymentDetails = new PaymentDetailsType();
    requestDetails.PaymentDetails.NotifyURL = "http://IPNhost";
    BasicAmountType paymentAmount = new 
        BasicAmountType(CurrencyCodeType.USD, amountinUSDollar);
    requestDetails.PaymentDetails.OrderTotal = paymentAmount;
    wrapper.DoDirectPaymentRequest = request;
    Dictionary<string, string> config = getConfigDict();
    PayPalAPIInterfaceServiceService service = new 
        PayPalAPIInterfaceServiceService(config);
    response = service.DoDirectPayment(wrapper);

当它尝试调用 API 时,在代码的最后一行我收到此错误: “HttpConnection Execute 中的异常:无效的 HTTP 响应请求被中止:无法创建 SSL/TLS 安全通道。” System.Exception PayPal.Exception.PayPalException。

我有一个集成了 Paypal 的 .NET 4.5 WebForm Web 应用程序,我必须在其中定义它

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

在其 Global.asax 文件中,它解决了该特定应用程序的问题,我发现我必须使用它

ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; 

对于 .NET 4.0 但我的问题是:

如果这可以解决可能出现的问题,我应该将这一行放在我的代码中的什么位置?因为我的 asmx 网络服务中没有 Global.asax。

【问题讨论】:

我猜,但您的“NotifyURL”似乎没有启用 HTTPS。异常似乎是从 PayPal 端生成的,但在调用时不确定。或者,您发起连接的 URL 没有开启 SSL/TLS @DiskJunky,谢谢,你给我的问题带来了一些启示,我在“response = service.DoDirectPayment(wrapper)”之前写了一行,并在 NotifyURL 中定义了 https,我没有收到错误不再。现在我要提出另一个问题,因为我收到了一个失败响应,并且我正在将所有必需的参数传递给 API 【参考方案1】:

根据 OP 中的 cmets 概述上述问题的来源。抛出异常是因为NotifyURL 不在https 中。

【讨论】:

以上是关于C# WinForm Paypal 与 asmx Web 服务集成时出错的主要内容,如果未能解决你的问题,请参考以下文章

我用C#做了一个带参数的webserver 现在要用winform程序去访问这个webserver http访问的url应该怎么写啊?

Paypal 沙箱与 asp.net c# 的集成

jQuery/ASMX:在 C# 中反序列化 JSON 时出错

C#调用WebService获取天气信息

PayPal 与 ASP.NET / C# 的集成

C# winform form窗体与class类的问题