web-dev-qa-db-fra.com

PayPal dans ASP.NET Core

Comment puis-je intégrer le Paypal API dans une application ASP.NET Core? J'ai essayé diverses bibliothèques mais aucune n'est compatible avec ASP.NET Core... comment puis-je le faire?

14
Serj Sagan

Si quelqu'un trouve cette question, je posterai une mise à jour.

Pour l'instant, il n'y a pas de version officielle d'un sdk .net core pour Paypal, mais en regardant sur github, beaucoup de progrès ont été accomplis depuis que cette question a été posée.

Le développeur a actuellement publié une version bêta officielle du sdk disponible au format fork ou à télécharger ici: https://github.com/Paypal/Paypal-NET-SDK/tree/2.0-beta

Ils ont même un guide de migration si vous utilisiez auparavant la première version de leur sdk.

5
Louis-Roch Tessier

J'ai eu le même problème avec vous. Nous avons cherché pendant des semaines et nous avons constaté qu’il n’y avait aucun moyen de faire fonctionner l’API du SDK avec .Net Core.

Vous avez quelques options, tout d’abord, recréez votre projet en 4.6 ou quelque chose de plus .. .. Deuxièmement, en utilisant l’appel basé sur l’API URL de votre application si vous souhaitez effectuer des ventes à un seul article. (C'est ce que je voulais faire)

Comment j'ai réussi à associer un javascript à un clic de bouton qui a eu les conséquences suivantes:

function PayPalPaymentEvent(eventid) {

    var URL = 'https://www.Paypal.com/cgi-bin/webscr?';
    var cmd = '_xclick';
    var business = Your Business Email;
    var currency_code = 'AUD';
    var amount = 100;
    var item_name = Name Of Your Item;
    var item_number = Some Identifier;
    var returnurl = 'http://somepage?info=success';
    var cancel_return = 'http://somepage?info=failed';
    var notify_url = 'http://WebFacingSite/API/PayPalReg';
    var tax = (amount * 0.10);

    var fullURL = URL + 'cmd=' + cmd + '&business=' + business + '&currency_code=' + currency_code + '&amount=' + amount + '&tax=' + tax + '&item_name=' + item_name + '&item_number=' + item_number + '&return=' + returnurl + '&cancel_return=' + cancel_return + '&notify_url=' + notify_url;

    ///// this ajax bit I use to record the transaction has started
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        url: '/API/PaymentStarted?eventid=' + eventid + '&UserID=' + UserID + '&paymentID' + paymentID,
        error: function () {
            SetMessage('error', 'Something has gone horribly, horribly wrong')
        },
        success: function (data) {

            window.location.href = fullURL;

        },
        type: 'POST'
    });


  }

Une fois cette opération effectuée, vous devez configurer une URL IPN dans votre compte Paypal Votre compte doit être un compte professionnel, accédez à votre profil, cliquez sur Outils du vendeur et vous verrez les paramètres IPN . Ajoutez-y votre URL web sans port (Localhost ne fonctionnera que si vous utilisez quelque chose comme ngrok)

Structurer votre droit Item_code devient important ici. L'IPN enverra une liste de variables à votre API exposée et vous pourrez ensuite faire des correspondances, par exemple ..__ Cela ne vous conviendra pas, mais voici comment intercepter ce message et le traiter. Mon scénario est que j'ai un utilisateur qui s'inscrit pour un événement:

[HttpPost]
    [Route("API/PayPalReg")]
    public JsonResult ReceiveInput(string txn_id, string payment_date,
                                string payer_email, string payment_status, 
                                string first_name, string last_name, 
                                string item_number, string item_name, 
                                string payer_id, string verify_sign)
    {

        var paypaltypes = item_name.Split('-');


        var result = item_number.Split('-');
        var userid = int.Parse(result[1]);
        var TransPaymentString = result[1].ToString() + result[0].ToString();
        var TransPayment = int.Parse(TransPaymentString);
        var user = _context.Person.Include(p => p.Payments).Where(p => p.UserID == userid).Single();
        var payment = user.Payments.Where(p => p.TransPaymentID == TransPayment).Single();

        if (paypaltypes[0] == "Event")
        {
            var eventid = int.Parse(result[0]);

            payment.PaymentReceipt = txn_id;
            payment.PaymentReceived = true;
            payment.PaymentReceivedDate = DateTime.Now;
            payment.PaymentNotes = payer_email + " " + first_name + " " + last_name + " " + item_number + " " + payer_id + " " + verify_sign + " " + item_name;

            _context.Payments.Update(payment);
            _context.SaveChanges();

            var userevent = _context.Person.Include(p => p.EventRegistry).Where(p => p.UserID == userid).Single();
            var eventreg = userevent.EventRegistry.Where(er => er.EventID == eventid).Single();
            eventreg.EventPaid = true;

            _context.EventRegistry.Update(eventreg);
            _context.SaveChanges();
            Response.StatusCode = (int)HttpStatusCode.OK;
            return Json("Json Result");

        }

J'espère que ça aide un peu

Caz

6
Caz1224

Je suis confronté au même problème. Je peux opter pour la mise en œuvre de l'API REST sans SDK: https://developer.Paypal.com/docs/api/

Ou je viens de trouver ce dépôt, ça pourrait être intéressant :)

https://github.com/geoperez/PayPalCore

C'est un port du SDK .Net actuel vers .NETCore. Je n'ai pas encore vérifié le code, mais si cela fonctionne, cela vous fera gagner beaucoup de temps!

Vous pouvez également opter pour une ancienne option d'API:

http://www.codeproject.com/Articles/42894/Introduction-to-Paypal-for-C-ASP-NET-developers

Mais comme il est ancien, je ne le recommanderais pas, car Paypal peut l’interrompre un jour . Cependant, vous pouvez y trouver des informations supplémentaires:

https://developer.Paypal.com/webapps/developer/docs/classic/Paypal-payments-standard/integration-guide/formbasics/

3
Jean

Alors peut-être qu'il est trop tard quand je publie ceci et que vous avez résolu ce problème, mais c'est pour la facilité de toute personne qui pourrait en avoir besoin à l'avenir.

Donc, comme nous savions que Paypal n’avait auparavant fourni aucun paquet nuget pour supporter les paiements Paypal dans .Net Core . Mais pour mettre fin à cette douleur, il a finalement trouvé une solution - en achetant BrainTreepayments.com pour fournir un meilleur support de développement.

Voici un link pour référence.

2
Invoker

Après avoir publié la nouvelle version de SDK (2.0) qui est actuellement dans l'état de version candidate, Paypal SDK prend en charge ASP.NET Core. 

1
Alexej Sommer

Un paquet Nuget est disponible pour Paypal le ASP.NET Core à ce lien:

https://www.nuget.org/packages/Paypal.SDK.NETCore/

Le paquet expose la même API que pour le classique .NET.

Veuillez noter cependant que ceci n'est pas un paquet officiel Nuget de Paypal.

0
sboisse