webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

ASP.NET MVC създава paypal webhook

Използвам REST API SDK за Dotnet V2 github връзка за интегриране с PayPal поръчки създаване и заснемете, че работи добре.

Сега се опитвам да внедря уебкукичката, вече прекарах много часове в опити да намеря как да създам контролер, който да получава уебкукички на PayPal, за да актуализира статуса на поръчките ми, но не успях да намеря решение.

Има ли .net документация или примерен код за това как да създадете webhook в .NET?

Това е моят vb.net код за създаване и улавяне на поръчки

Private Shared Function BuildRequestBody() As OrderRequest
    Dim orderRequest As OrderRequest = New OrderRequest() With {
    .CheckoutPaymentIntent = "CAPTURE",
    .ApplicationContext = New ApplicationContext With {
        .BrandName = "EXAMPLE INC",
        .LandingPage = "BILLING",
        .CancelUrl = "https://XXX/Home/CancelUrl",
        .ReturnUrl = "https://XXX/Home/CaptureOrder",
        .UserAction = "CONTINUE",
        .ShippingPreference = "SET_PROVIDED_ADDRESS"
    },
    .PurchaseUnits = New List(Of PurchaseUnitRequest) From {
        New PurchaseUnitRequest With {
            .ReferenceId = "PUHF",
            .Description = "Sporting Goods",
            .CustomId = "CUST-HighFashions",
            .SoftDescriptor = "HighFashions",
            .AmountWithBreakdown = New AmountWithBreakdown With {
                .CurrencyCode = "USD",
                .Value = "220.00",
                .AmountBreakdown = New AmountBreakdown With {
                    .ItemTotal = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "180.00"
                    },
                    .Shipping = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "20.00"
                    },
                    .Handling = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "10.00"
                    },
                    .TaxTotal = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "20.00"
                    },
                    .ShippingDiscount = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "10.00"
                    }
                }
            },
            .Items = New List(Of Item) From {
                New Item With {
                    .Name = "T-shirt",
                    .Description = "Green XL",
                    .Sku = "sku01",
                    .UnitAmount = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "90.00"
                    },
                    .Tax = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "10.00"
                    },
                    .Quantity = "1",
                    .Category = "PHYSICAL_GOODS"
                },
                New Item With {
                    .Name = "Shoes",
                    .Description = "Running, Size 10.5",
                    .Sku = "sku02",
                    .UnitAmount = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "45.00"
                    },
                    .Tax = New Money With {
                        .CurrencyCode = "USD",
                        .Value = "5.00"
                    },
                    .Quantity = "2",
                    .Category = "PHYSICAL_GOODS"
                }
            },
            .ShippingDetail = New ShippingDetail With {
                .Name = New Name With {
                    .FullName = "John Doe"
                },
                .AddressPortable = New AddressPortable With {
                    .AddressLine1 = "123 Townsend St",
                    .AddressLine2 = "Floor 6",
                    .AdminArea2 = "San Francisco",
                    .AdminArea1 = "CA",
                    .PostalCode = "94107",
                    .CountryCode = "US"
                }
            }
        }
    }
}
    Return orderRequest
End Function

Public Shared Function CreateOrder(ByVal Optional d As Boolean = False) As HttpResponse
    Debug.WriteLine("Create Order with minimum payload..")
    Dim request = New OrdersCreateRequest()
    request.Headers.Add("prefer", "return=representation")
    request.RequestBody(BuildRequestBody())

    Dim response = Task.Run(Async Function() Await PayPalClient.client().Execute(request)).Result

    If d Then
        Dim result = response.Result(Of Order)()
        Debug.WriteLine($"Status: {result.Status}")
        Debug.WriteLine($"Order Id: {result.Id}")
        Debug.WriteLine($"Intent: {result.CheckoutPaymentIntent}")
        Debug.WriteLine("Links:")

        For Each link As LinkDescription In result.Links
            Debug.WriteLine(vbTab & $"{link.Rel}: {link.Href}" & vbTab & $"Call Type: {link.Method}")
        Next

        Dim amount As AmountWithBreakdown = result.PurchaseUnits(0).AmountWithBreakdown
        Debug.WriteLine($"Total Amount: {amount.CurrencyCode} {amount.Value}")
    End If

    Return response
End Function

Public Shared Function CaptureOrder(ByVal OrderId As String, ByVal Optional d As Boolean = False) As HttpResponse
    Dim request = New OrdersCaptureRequest(OrderId)
    request.Prefer("return=representation")
    request.RequestBody(New OrderActionRequest())
    Dim response = Task.Run(Async Function() Await PayPalClient.client().Execute(request)).Result

    If d Then
        Dim result = response.Result(Of Order)()
        Debug.WriteLine($"Status: {result.Status}")
        Debug.WriteLine($"Order Id: {result.Id}")
        Debug.WriteLine($"Intent: {result.CheckoutPaymentIntent}")
        Debug.WriteLine("Links:")

        For Each link As LinkDescription In result.Links
            Debug.WriteLine(vbTab & $"{link.Rel}: {link.Href}" & vbTab & $"Call Type: {link.Method}")
        Next

        Debug.WriteLine("Capture Ids: ")

        For Each purchaseUnit As PurchaseUnit In result.PurchaseUnits

            For Each capture As Capture In purchaseUnit.Payments.Captures
                Debug.WriteLine(vbTab & $" {capture.Id}")
            Next
        Next

        Dim amount As AmountWithBreakdown = result.PurchaseUnits(0).AmountWithBreakdown
        Debug.WriteLine("Buyer:")
        Debug.WriteLine(vbTab & $"Email Address: {result.Payer.Email}" & vbLf & vbTab & $"Name: {result.Payer.Name.GivenName} {result.Payer.Name.Surname}" & vbLf)
        Debug.WriteLine($"Response JSON:" & vbLf & $"{PayPalClient.ObjectToJSONString(result)}")
    End If

    Return response
End Function

  • Това е интересен въпрос, но как се формулира сега, той е изложен на риск от закриване, защото искате да намерите някакъв външен ресурс за вас. Вместо това предоставете вашите опити за решаване на проблема с webhook, дори и да не работи. Някой може да забележи проблема и да ви помогне 19.07.2020
  • за да бъда честен, що се отнася до плащанията, търся най-добрата практика за получаване на съобщения от paypal, мога да създам свой собствен клас уебкука, но търся най-добрата практика за създаването му, така че моят код сега е само за създаване на ред и улавяне на обратния отговор 19.07.2020
  • добавих моите кодове за създаване и улавяне на поръчките 19.07.2020
  • Това, което искате, е контролер с два порта. Един порт, който се свързва с клиентите, и втори порт, който препраща клиентските данни към SDK и изпраща отговори от SDK към клиентите. Той няма да се различава от обикновения контролер, освен че заявката от клиенти ще бъде препратена към SDK и отговорите от SDK ще бъдат изпратени на клиентите. 20.07.2020

Отговори:


1

Ръководството за PayPal Webhooks е тук: https://developer.paypal.com/docs/api-basics/notifications/webhooks/rest/#verify-event-notifications

Справката за API на Webhooks е тук: https://developer.paypal.com/docs/api/webhooks/v1/

PayPal REST SDK, които са споменати за уеб кукички, вече не се поддържат, така че НЕ трябва да използвате никакъв SDK. Вместо това внедрете директни HTTPS API извиквания от вашата среда.

19.07.2020
  • благодаря за отговора ви, успях да намеря тези документи, всъщност това, което търся, е примерен код за това как да изградя webhook с .net 19.07.2020

  • 2

    Просто създайте контролер с подходящите методи и маршрутизиране, напр.

    [Route("api/[controller]")]
    [ApiController]
    public class MyController: ControllerBase 
    {
    
    
       // point the webhook at .CancelUrl = "https://XXX/api/CancelUrl" (to match the routing)
    
      [HttpPost, Route("CancelUrl")]
      public async Task<IActionResult> CancelUrlAsync() 
      {
      // do cancel stuff here
    
      }
    
    }
    
    23.07.2020
    Нови материали

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..

    За да научите нов език за програмиране, започнете отначало
    Първоначално публикувано на http://www.mberlove.com/blog/a-new-programming-language-starting-over/ Програмистите се гордеят със способността си да усвояват лесно нови умения , разчитайки..

    5 Youtubers на Data Science, които трябва да следвате
    Защото всички можем да се справим с малко продуктивно отлагане Всички сме падали в заешката дупка на Youtube, така че защо да не я направим продуктивна?! Като непрекъснато нарастващ източник..

    Бих казал, че точно това е проблемът с Twitter — това е инструмент на суперпотребител.
    Бих казал, че точно това е проблемът с Twitter — това е инструмент на суперпотребител. По същия начин, по който суперкодерът сочи vim като единствения начин за кодиране, но останалите от нас..

    Основи на Gradio
    Gradio е най-ефективният метод за демонстриране на вашия модел на машинно обучение и разполага с удобен за потребителя онлайн интерфейс, който го прави достъпен от всяко място. Какво прави..

    Илюстрация (GIF) за обяснение на дълбоки конволюционни мрежи (DCNN)
    В света на компютърното зрение най-основният и често срещан алгоритъм за разпознаване на изображения е конволюционната мрежа. С популярността на рамки като tensorflow и pytorch, стана по-лесно да..

    Python Bootcamp — Data Science Day 165
    Python Bootcamp от Giles McMullen-Klein беше абсолютно невероятно. Джайлс има този уникален начин да улови аудиторията си, като същевременно прави съдържанието на курса много интересно...