it-swarm.com.ru

PayPal в ASP.NET Core

Как интегрировать с Paypal API в приложение ASP.NET Core? Я пробовал разные библиотеки, но ни одна из них не совместима с ASP.NET Core... как мне это сделать?

14
Serj Sagan

Если кто-нибудь найдет этот вопрос, я выложу обновление.

На данный момент нет официального выпуска .net core sdk для Paypal, но, глядя на github, был достигнут большой прогресс с тех пор, как был задан этот вопрос.

В настоящее время разработчик выпустил официальную бета-версию SDK, доступную для разветвления или загрузки здесь: https://github.com/Paypal/PayPal-NET-SDK/tree/2.0-beta

У них даже есть руководство по миграции, если вы ранее использовали первую версию их SDK.

5
Louis-Roch Tessier

У меня была такая же проблема с тобой. Посмотрел несколько недель и обнаружил, что просто невозможно заставить работать API SDK с .Net Core.

У вас есть несколько вариантов, во-первых, воссоздайте свой проект, используя 4.6 или что-то в этом роде Во-вторых, используйте вызов приложения на основе URL API из вашего приложения, если вы хотите совершить продажу одного товара. (Что я и хотел сделать)

Как я это делал, прикреплял JavaScript к нажатию кнопки, что делало следующее:

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


  }

После того, как вы это сделаете, вам нужно будет настроить IPN URL в своей учетной записи Paypal Ваша учетная запись должна быть бизнес-учетной записью, перейти в свой профиль, щелкнуть инструменты продавца, и вы увидите Настройки IPN . Там добавьте URL-адрес вашего веб-сайта без порта (Localhost не будет работать, если вы не используете что-то вроде ngrok)

Структурирование вашего права на Item_code становится здесь важным. IPN отправит список переменных обратно в ваш открытый API, а затем вы сможете выполнить какое-то сопоставление и т.д. Это вам не подойдет, но именно так я улавливаю это сообщение и разбираюсь с ним. Мой сценарий состоит в том, что у меня есть пользователь, который подписывается на событие:

[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");

        }

Надеюсь это немного поможет

Caz

6
Caz1224

Я сталкиваюсь с той же проблемой. Я могу пойти на реализацию REST API без SDK: https://developer.Paypal.com/docs/api/

Или я только что нашел этот репозиторий, это может быть интересно :)

https://github.com/geoperez/PayPalCore

Это порт текущего .Net SDK для .NETCore. Я еще не проверял код, но если он сработает, это сэкономит много времени!

Вы также можете перейти к старой опции API:

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

Но так как он старый, я бы не рекомендовал его, так как Paypal может прекратить его когда-нибудь . Однако вы можете найти там дополнительную информацию:

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

3
Jean

Поэтому, может быть, уже слишком поздно, когда я публикую это, и вы перешли к решению этой проблемы, но это для удобства любого человека, который может нуждаться в этом в будущем.

Так как мы знали, что ранее Paypal не предоставил никакого пакета nuget для поддержки платежей Paypal в .Net Core . Но чтобы положить конец этой боли, он наконец-то нашел решение - путем покупки BrainTreepayments.com обеспечить лучшую поддержку разработчиков.

Вот ссылка для справки.

2
Invoker

После выпуска новой версии SDK (2.0), которая на данный момент находится в состоянии кандидата на выпуск, Paypal SDK будет поддерживать ASP.NET Core. 

1
Alexej Sommer

Пакет Nuget для Paypal доступен по ASP.NET Core по этой ссылке:

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

Пакет предоставляет тот же API, что и для классического .NET.

Обратите внимание, однако, что это не официальный пакет Nuget от Paypal.

0
sboisse