2017-09-12 5 views
1

J'essaie d'intégrer les paiements Paypal dans une application .NET 4.0 C# WinForm faire un paiement direct (sans ouvrir le navigateur avec le site paypal) a trisuré un webservices asmx appelant cette méthode à partir d'un WebMethodErreur dans l'intégration de C# WinForm Paypal avec le service Web asmx

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); 
} 

Quand il essaie de faire l'appel à l'API, dans la dernière ligne du code que je reçois cette erreur: « Exception dans HttpConnection Exécuter: réponse HTTP non valide la requête a été annulée: Impossible de créer SSL/TLS secure channel. "} System.Exception {PayPal.Exception.PayPalException}.

J'ai eu une application web 4.5 .NET WebForm avec Paypal intégré dans lequel je devais définir cette

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

dans son fichier Global.asax et il résout le problème pour cette application spécifique et je l'ai trouvé que je doivent utiliser ce

ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; 

pour .NET 4.0, mais ma question est:

Si ce serait la solution au problème de mai, où dois-je mettre cette ligne dans mon code? Parce qu'il n'y a pas Global.asax dans mon webservice asmx.

+0

Je suppose, mais il semble que votre "NotifyURL" n'a pas activé HTTPS. L'exception semble être générée du côté de PayPal, mais ce n'est pas certain étant donné l'appel. Alternativement, l'URL avec laquelle vous commencez la connexion n'a pas SSL/TLS allumé – DiskJunky

+1

@DiskJunky, merci, vous avez apporté de la lumière à mon problème, j'ai écrit la ligne juste avant "response = service.DoDirectPayment (wrapper)" et défini https dans le NotifyURL et je ne reçois plus l'erreur. Maintenant, je suis sur le point de formuler une autre question parce que je reçois une réponse d'échec et que je passe tous les paramètres requis à l'API – Eagle

Répondre

1

Décrivant la source du problème signalé ci-dessus selon les commentaires dans le PO. L'exception a été levée car le NotifyURL n'était pas dans https.