Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
PayPal und Soap/wsdl
Curious
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

PayPal und Soap/wsdl

beantworten | zitieren | melden

Hallo *all

ich würde gerne Paypal via soap/wsdl Endpunkt ansteuern. Es gibt aber immer die Meldung "Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.." zurück.

Weiß jemand Rat? Das wäre super.

Ich bin mit Win10 und VS2019 unterwegs.
Die Service Referenz ist : https://www.paypal.com/wsdl/PayPalSvc.wsdl

Der Code sieht so aus:



        var paypalService = new ServicePaypal.PayPalAPIInterfaceClient();
        var securityHeader = new ServicePaypal.CustomSecurityHeaderType();
        var credentials = new ServicePaypal.UserIdPasswordType();
        credentials.Username = PayPalConfiguration. User;
        credentials.Password = PayPalConfiguration.Pass;
        credentials.Signature = PayPalConfiguration.Signature;
        securityHeader.Credentials = credentials;

        //Create transaction request
        var payloadReq = new ServicePaypal.TransactionSearchReq()
        {
          TransactionSearchRequest = new ServicePaypal.TransactionSearchRequestType()
        };
         
        payloadReq.TransactionSearchRequest.StartDate = DateTime.Now.AddDays(-15);
        payloadReq.TransactionSearchRequest.Version = "216.0";
        var transactionList = paypalService.TransactionSearch(ref securityHeader, payloadReq);


Die app-config habe ich zunächst unverändert gelassen:

 <bindings>
      <basicHttpBinding>
        <binding name="PayPalAPISoapBinding">
          <security mode="Transport" />
        </binding>
        <binding name="PayPalAPIAASoapBinding">
          <security mode="Transport" />
        </binding>
        <binding name="PayPalAPISoapBinding1" />
        <binding name="PayPalAPIAASoapBinding1" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://api.sandbox.paypal.com/2.0/" binding="basicHttpBinding"
        bindingConfiguration="PayPalAPISoapBinding" contract="ServicePaypal.PayPalAPIInterface"
        name="PayPalAPI" />
      <endpoint address="https://api-aa.sandbox.paypal.com/2.0/" binding="basicHttpBinding"
        bindingConfiguration="PayPalAPIAASoapBinding" contract="ServicePaypal.PayPalAPIAAInterface"
        name="PayPalAPIAA" />
    </client>
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16103

beantworten | zitieren | melden

SOAP API ist eigentlich veraltet, die neue basiert auf REST.
Siehe https://developer.paypal.com/docs/api/rest-sdks/

Da gibts auch ein neues Managed SDK.
Sicher, dass Du SOAP verwenden willst?

Ansonsten schaue in die Inner Exception, da sollte mehr drin stehen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Curious
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

Ich wäre an einem funktionierendem Beispiel äußerst interessiert. Ich muss den Kontostand bzw. den Kontoauszug in System holen, damit die App die Bank buchen kann. Eine Meute Buchhalte ist hinter mir her.
Ich habe mich totgesucht. In jedem Fall wäre die Verwendung der letzten Technik besser. Soweit ich das gesehen habe stand auf der Paypal Seite zunächst nicht von "veraltet" (im Gegensatz zu den meisten nuget-Packages zu diesem Thema).

Ansonsten:
Die inner-Exeptions sagt: StackTrace = " at System.Net.HttpWebRequest.GetResponse()\r\n at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)"

ich habe die app.config mal angepasst. Geht aber auch nicht.

    <bindings>
      <basicHttpBinding>
        <binding name="PayPalAPISoapBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="02:00:00" sendTimeout="02:00:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="Transport" />
        </binding>
        <binding name="PayPalAPIAASoapBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="02:00:00" sendTimeout="02:00:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://api.sandbox.paypal.com/2.0/" binding="basicHttpBinding"
                bindingConfiguration="PayPalAPISoapBinding" contract="ServicePaypal.PayPalAPIInterface"
                name="PayPalAPI" />
      <endpoint address="https://api-aa.sandbox.paypal.com/2.0/" binding="basicHttpBinding"
                bindingConfiguration="PayPalAPIAASoapBinding" contract="ServicePaypal.PayPalAPIAAInterface"
                name="PayPalAPIAA" />
    </client>
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16103

beantworten | zitieren | melden

Zitat
Soweit ich das gesehen habe stand auf der Paypal Seite zunächst nicht von "veraltet" (im Gegensatz zu den meisten nuget-Packages zu diesem Thema).
Zeichen, die Du dann übersehen hast:
- SOAP ist ein völlig veraltetes Protokoll, wird von vielen Frameworks seit Jahren nicht mal mehr implementiert.
- Auch in .NET ist SOAP in Form von WCF schon eeewig, viele viele Jahre abgekündigt; gibt es auch nur noch in .NET Framework in Form von Legacy WCF / ASP.NET ASMX Projekten. Weder WCF noch SOAP/ASMX werden portiert in .NET Core und weitere
- Der offizielle Technologienachfolger ist seit > 10 Jahren REST
- In der PayPal Doku wird die SOAP Schnittstelle dick und fett als LEGACY deklariert. Die REST APIs werden hingehen als CURRENT deklariert.

Machst Du jetzt mit .NET und WCF weiter, dann darfst es eh bald neu machen.
Da hast echt ne Menge bei Deiner Recherche übersehen.....

Samples kannst direkt aus der REST Dokumentation entnehmen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Curious
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

so ... war leider etwas aufgehalten worden. Kann sein das ich einiges übersehen habe, sowas passiert im Alter.

Passend dazu, ich bekomme das auch mit den rest-apis nicht auf die Reihe. Auch wenn ich partiell blind bin, die Doku ist übel, dabei bleibts.
Hat jemand Rat bzw. ein funktionierendes Beispiel?

Im Moment sieht das so (falsch) aus.

Wenn ich zum Beispiel sowas absetze:


    public static async Task<HttpResponse> GetOrder(string orderId, bool debug = false)
    {
      OrdersGetRequest request = new OrdersGetRequest(orderId);

      var response = await PayPalClient.client().Execute(request);
      var result = response.Result<PayPalCheckoutSdk.Orders.Order>();

 


und der Client (laut Doku) so aussieht:

    public static HttpClient client()
    {
      return new PayPalHttpClient(environment()); // environment enthält client id und secret ...
    }
    public static HttpClient client(string refreshToken)
    {
      return new PayPalHttpClient(environment(), refreshToken);
    }


Kann ich machen was ich will, ich bekomme eine Exeption:

"{\"name\":\"RESOURCE_NOT_FOUND\",\"details\":[{\"issue\":\"INVALID_RESOURCE_ID\",\"description\":\"Specified resource ID does not exist. Please check the resource ID and try again.\"}],\"message\":\"The specified resource does not exist.\",\"debug_id\":\"4ee60654c605d\",\"links\":[{\"href\":\"https://developer.paypal.com/docs/api/orders/v2/#error-INVALID_RESOURCE_ID\",\"rel\":\"information_link\",\"method\":\"GET\"}]}"

Wobei die ID in meinem Fall die echte (interne) Order ID des Shopssystems ist. OK das könnte falsch sein. Aber auch die Variante der nativen Paypal ID wirft eine exception


Wobei das uralte SDK- funktioniert und Werte zurück gibt.


      foreach (var o in listOfOrdersBasic)
      {
        var payment = Payment.Get(PayPalConfiguration.GetAPIContext(), o.payment_id);


        decimal convertDecimal = 0;
        foreach (var transaction in payment.transactions)
        {
          if (transaction.invoice_number != null)
          {
          }

          if (transaction.item_list != null)
            foreach (var item in transaction.item_list.items)
            {
// enthält valide Werte
            }


          foreach (var relatedResource in transaction.related_resources)
          {
            if (relatedResource.sale != null)
            {
              var feeData = relatedResource.sale.transaction_fee;
              convertDecimal += Decimal.Parse(feeData.value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
            }
          }
        }
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Curious am .
private Nachricht | Beiträge des Benutzers