Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   PayPal SOAP Konto Bewegungen abfragen (https://www.delphipraxis.net/185377-paypal-soap-konto-bewegungen-abfragen.html)

franktron 4. Jun 2015 11:35


PayPal SOAP Konto Bewegungen abfragen
 
Wie kann ich die Kontobewegungen von einem PayPal Konto abfragen.

Ich nutze XE2 und die WDSL habe ich importiert, ich habe aber noch nie mit WDSL gearbeitet.

vagtler 4. Jun 2015 11:42

AW: PayPal SOAP Konot Bewegungen abfragen
 
http://bfy.tw/AQl

Oder hast Du eine konkrete Frage?

franktron 4. Jun 2015 11:48

AW: PayPal SOAP Konot Bewegungen abfragen
 
Das Problem ist welche Funktionen das sind die importierte Pas ist über 30000 Zeilen lang und ich finde da nicht wirklich was.

franktron 4. Jun 2015 12:12

AW: PayPal SOAP Konto Bewegungen abfragen
 
Ich habe ein .Net Code gefunden, kann den jemand auf Delphi übersetzen

Code:
var client = new PayPalAPIInterfaceClient();

        var credentials = new CustomSecurityHeaderType
        {
            Credentials = new UserIdPasswordType
            {
                Username = PaypalUsername,
                Password = PaypalPassword,
                Signature = PaypalSignature
            }
        };
        var request = new TransactionSearchReq
        {
            TransactionSearchRequest = new TransactionSearchRequestType
            {
                StartDate = DateTime.Now.AddYears(-1),
                Status = PaymentTransactionStatusCodeType.Success,
                Version = "95.0"
            }
        };

        var response = client.TransactionSearch(ref credentials, request);

vagtler 4. Jun 2015 12:25

AW: PayPal SOAP Konot Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304141)
Das Problem ist welche Funktionen das sind die importierte Pas ist über 30000 Zeilen lang und ich finde da nicht wirklich was.

Wer sucht denn in der .PAS?

Das ist doch alles dokumentiert?!?

https://developer.paypal.com/docs/cl...peration_SOAP/

Und mit dem PayPal API Explorer kannst Du auch alles ausprobieren.

https://devtools-paypal.com/apiexplorer/PayPalAPIs

Ansonsten verweise ich gerne wieder auf die schon genannten SOAP Tutorials.

btw: Muss es SOAP sein? PayPal bietet eine wesentlich modernere REST API.

vagtler 4. Jun 2015 12:38

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304142)
Ich habe ein .Net Code gefunden, kann den jemand auf Delphi übersetzen [...]

Aus dem Kopf, ohne den Proxy-Code zu kennen und einfach nur 1:1 übersetzt:
Code:
client := TPayPalAPIInterfaceClient.Creeate();

credentials := TCustomSecurityHeaderType.Create();
credentials.Credentials := TUserIdPasswordType.Create();
credentials.Credentials.Username := PaypalUsername;
credentials.Credentials.Password := PaypalPassword;
credentials.Credentials.Signature := PaypalSignature;

request := TTransactionSearchReq.Create();
request.TransactionSearchRequest := TTransactionSearchRequestType.Create();
request.TransactionSearchRequest.StartDate = DateTime.Now.AddYears(-1),
request.TransactionSearchRequest.Status = PaymentTransactionStatusCodeType.Success,
request.TransactionSearchRequest.Version = "95.0"

response := client.TransactionSearch(credentials, request);
Ich wage aber zu bezweifeln, dass das einerseits funktioniert und das andererseits die richtige Vorgehensweise ist.

franktron 5. Jun 2015 08:34

AW: PayPal SOAP Konto Bewegungen abfragen
 
Also ich habs jetzt aber ein Problem hab ich noch.

Delphi-Quellcode:
CurrencyCodeType = (
      AFA,
      ALL,
      DZD,
      ADP,
      AOA,
      ARS,
      AMD,
      AWG,
      AZM,
      BSD,
      BHD,
      BDT,
      ....
)
Response.PaymentTransactions[i].NetAmount.currencyID;
Wie kann ich den Response.PaymentTransactions[i].NetAmount.currencyID; in ein String umwandeln

vagtler 5. Jun 2015 08:41

AW: PayPal SOAP Konto Bewegungen abfragen
 
http://bfy.tw/BTO

Übrigens wäre es für Leute mit ähnlichen Problemen sicherlich sehr nett und hilfreich, wenn Du Deine Lösung auch hier zur Verfügung stellen würdest.

TiGü 5. Jun 2015 08:53

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304214)
Wie kann ich den Response.PaymentTransactions[i].NetAmount.currencyID; in ein String umwandeln

Wie der Zufall es will, gab es dazu erst neulich einen Blog-Post mit drei verschiedenen Möglichkeiten:
http://www.delphifeeds.com/go/f/1266...hiFeeds.com%29

franktron 5. Jun 2015 12:12

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von TiGü (Beitrag 1304217)
Zitat:

Zitat von franktron (Beitrag 1304214)
Wie kann ich den Response.PaymentTransactions[i].NetAmount.currencyID; in ein String umwandeln

Wie der Zufall es will, gab es dazu erst neulich einen Blog-Post mit drei verschiedenen Möglichkeiten:
http://www.delphifeeds.com/go/f/1266...hiFeeds.com%29

Danke für die Infos aber alle Methoden gehen unter XE2 nicht.

Delphi-Quellcode:
function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;
Definition von GetEnumName will integer warum auch immer.

Delphi-Quellcode:
TRttiEnumerationType.GetName
Getname ist Privat

vagtler 5. Jun 2015 12:14

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304239)
[...] Danke für die Infos aber alle Methoden gehen unter XE2 nicht. [...]

Das glaube ich nicht, Tim.

Bitte poste Deinen Code.

franktron 5. Jun 2015 13:24

AW: PayPal SOAP Konto Bewegungen abfragen
 
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType'

Hier nochmal der Code vom RTTI...
Delphi-Quellcode:
TRttiEnumerationType = class(TRttiOrdinalType)
  private
    function GetMaxValue: Longint; override;
    function GetMinValue: Longint; override;
    function GetUnderlyingType: TRttiType;
    constructor Create(APackage: TRttiPackage; AParent: TRttiObject; var P: PByte); override;
    {$HINTS OFF}
    function GetNames: TArray<string>;
    class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
    class function GetValue<T{: enum}>(const AName: string): T; static;
    {$HINTS ON}
  public
    property UnderlyingType: TRttiType read GetUnderlyingType;
  end;

vagtler 5. Jun 2015 13:48

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304255)
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType' [...]

Du hast den allerersten Treffer meines in http://www.delphipraxis.net/1304215-post8.html geposteten Links ignoriert.

Das Beispiel für
Delphi-Quellcode:
GetEnumName
in dem von @TiGü genannten Blogpost ist tatsächlich fehlerhaft.

(Aber mal ernsthaft: Da hätte man auf Grund der Fehlermeldung des Compilers aber auch durchaus drauf kommen können...)

franktron 5. Jun 2015 13:57

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von vagtler (Beitrag 1304259)
Zitat:

Zitat von franktron (Beitrag 1304255)
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType' [...]

Du hast den allerersten Treffer meines in http://www.delphipraxis.net/1304215-post8.html geposteten Links ignoriert.

Das Beispiel für
Delphi-Quellcode:
GetEnumName
in dem von @TiGü genannten Blogpost ist tatsächlich fehlerhaft.

(Aber mal ernsthaft: Da hätte man auf Grund der Fehlermeldung des Compilers aber auch durchaus drauf kommen können...)

Ich habe gedacht das wurde in einer neueren Delphi Version geändert.

franktron 5. Jun 2015 14:01

AW: PayPal SOAP Konto Bewegungen abfragen
 
So jetzt habe ich die Gesamte Lösung
Delphi-Quellcode:
Var
  client     : PayPalAPIInterface;
  credentials : RequesterCredentials;
  trans      : TransactionSearchReq;
  UserID     : UserIdPasswordType;
  trans1      : TransactionSearchRequest;

  Response   : TransactionSearchResponse;

  i          : Longint;
begin
  HTTPRIO1.URL:='https://api-3t.paypal.com/2.0/';
  client:=(HTTPRIO1 as PayPalAPIInterface);
  credentials:=RequesterCredentials.Create;

  UserID:=UserIdPasswordType.Create;

  UserID.Username:='';
  UserID.Password:='';
  UserID.Signature:='';

  credentials.Credentials:=UserID;

  HTTPRIO1.SOAPHeaders.Send(credentials);

  trans1:=TransactionSearchRequest.Create;
  trans:=TransactionSearchReq.Create;
  trans1.StartDate:=TXSDateTime.Create;
  trans1.Version:='94.0';
  trans1.StartDate.AsDateTime:=Now-10;
  trans.TransactionSearchRequest:=trans1;
  Response:=client.TransactionSearch(trans);

  D_VT1.Open;
  D_VT1.Clear;
  For i:=Low(Response.PaymentTransactions) To High(Response.PaymentTransactions) do
  Begin
    D_VT1.Append;
    D_VT1.FieldByName('timestamp').AsDateTime:=Response.PaymentTransactions[i].Timestamp.AsDateTime;
    D_VT1.FieldByName('type').Text:=Response.PaymentTransactions[i].Type_;
    D_VT1.FieldByName('payer').Text:=Response.PaymentTransactions[i].Payer;
    D_VT1.FieldByName('payerdisplayname').Text:=Response.PaymentTransactions[i].PayerDisplayName;
    D_VT1.FieldByName('TransactionID').Text:=Response.PaymentTransactions[i].TransactionID;
    D_VT1.FieldByName('Status').Text:=Response.PaymentTransactions[i].Status;
    D_VT1.FieldByName('GrossAmount').Text:=StringReplace(Response.PaymentTransactions[i].GrossAmount.Text,'.',',',[]);
    D_VT1.FieldByName('FeeAmount').Text:=StringReplace(Response.PaymentTransactions[i].FeeAmount.Text,'.',',',[]);
    D_VT1.FieldByName('NetAmount').Text:=StringReplace(Response.PaymentTransactions[i].NetAmount.Text,'.',',',[]);
    D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].GrossAmount.currencyID));
    D_VT1.FieldByName('FeeAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].FeeAmount.currencyID));
    D_VT1.FieldByName('NetAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].NetAmount.currencyID));
    D_VT1.Post;
  End;
  D_VT1.SaveToXML('t1.xml');
  D_VT1.Close;

himitsu 5. Jun 2015 14:25

AW: PayPal SOAP Konto Bewegungen abfragen
 
GetName ... Wozu auch, gibt ja das Property Name? :roll:

Und natürlich will es einen Integer, da man sonst millionen Überladungen für jeden Enumtypen bräuchte.
Delphi-Referenz durchsuchenOrd

TiGü 5. Jun 2015 15:10

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304239)
Zitat:

Zitat von TiGü (Beitrag 1304217)
Zitat:

Zitat von franktron (Beitrag 1304214)
Wie kann ich den Response.PaymentTransactions[i].NetAmount.currencyID; in ein String umwandeln

Wie der Zufall es will, gab es dazu erst neulich einen Blog-Post mit drei verschiedenen Möglichkeiten:
http://www.delphifeeds.com/go/f/1266...hiFeeds.com%29

Danke für die Infos aber alle Methoden gehen unter XE2 nicht.

Delphi-Quellcode:
TRttiEnumerationType.GetName
Getname ist Privat

Du musst den Typ mitgeben!
Sonst nimmt er die private function GetName aus der Basisklasse TRttiType.
Es ist eine wiedereingeführte generische Klassenfunktion.

Delphi-Quellcode:
uses
  System.Rtti;
...
var
  str : string;
begin
  str := TRttiEnumerationType.GetName<CurrencyCodeType>(Response.PaymentTransactions[i].NetAmount.currencyID);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz