{"id":55000191,"date":"2019-08-01T00:00:00","date_gmt":"2020-03-27T19:39:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=191"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"PayPalKontostand_und_Umsaetze","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/PayPalKontostand_und_Umsaetze\/","title":{"rendered":"PayPal-Kontostand und Ums&auml;tze"},"content":{"rendered":"<p><b>PayPal ist ein beliebtes Zahlungsmittel. Gut, wenn man auf einfache Weise den &Uuml;berblick &uuml;ber den Stand seines PayPal-Kontos und &uuml;ber die erfolgten Ums&auml;tze erh&auml;lt &#8211; zum Beispiel &uuml;ber die Webseite oder eine App f&uuml;r das Smartphone. Uns interessiert nat&uuml;rlich, wie wir von der Benutzeroberfl&auml;che einer WPF-Anwendung auf diese Informationen zugreifen k&ouml;nnen. Deshalb schauen wir uns in diesem Artikel an, wie Sie die notwendigen Sicherheitsinformationen f&uuml;r den Zugriff erhalten und wie Sie eine Anwendung um Funktionen zum Abrufen von Kontostand und Ums&auml;tzen erweitern. <\/b><\/p>\n<p>Um die f&uuml;r den Zugriff n&ouml;tigen Daten zu erhalten, &ouml;ffnen Sie im Webbrowser die folgende URL: <b>https:\/\/www.paypal.com\/businessmanage\/credentials\/apiAccess<\/b>. Hier ist zun&auml;chst eine Anmeldung n&ouml;tig, danach erscheint die angeforderte Seite. Hier gibt es weiten unten einen Link mit der Beschriftung <b>API-Berechtigung verwalten<\/b>.<\/p>\n<p>Damit gelangen Sie dann, wenn Sie die API-Daten bereits einmal angefordert haben, zu der Seite aus Bild 1, wo Sie die drei Informationen <b>API-Benutzername<\/b>, <b>API-Passwort <\/b>und <b>Signatur <\/b>finden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_191_001.png\" alt=\"Abrufen der Zugangsdaten\" width=\"700\" height=\"434,6775\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Abrufen der Zugangsdaten<\/span><\/b><\/p>\n<p>Wenn Sie die Daten noch nicht angefordert haben, k&ouml;nnen Sie diese nun anfordern. Dann sieht der Bereich wie in Bild 2 aus. Hier w&auml;hle Sie die erste Option zum Anfordern einer API-Signatur aus. Die neu angeforderten Daten werden dann wie zuvor beschrieben angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_191_002.png\" alt=\"Anfordern der API-Berechtigung\" width=\"700\" height=\"305,2399\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anfordern der API-Berechtigung<\/span><\/b><\/p>\n<h2>Projekt anlegen<\/h2>\n<p>Wir verwenden f&uuml;r den Zugriff auf das PayPal-Konto ein Projekt auf Basis der Vorlage <b>Visual Basic|Windows Desktop|WPF-App<\/b>.<\/p>\n<h2>Klassenmodell f&uuml;r den Zugriff auf die API<\/h2>\n<p>Nun wollen wir ein Klassenmodell entwickeln, mit dem wir auf den Webservice von PayPal zugreifen k&ouml;nnen. Dazu &ouml;ffnen Sie mit dem Befehl <b>Hinzuf&uuml;gen|Dienstverweis<\/b> des Kontextmen&uuml;s des Projekt-Elements im Projektmappen-Explorer den Dialog <b>Dienstverweis hinzuf&uuml;gen<\/b>. Hier tragen unter Adresse den folgenden Wert ein:<\/p>\n<pre>https:\/\/www.paypalobjects.com\/wsdl\/PayPalSvc.wsdl<\/pre>\n<p>Dann klicken Sie auf die Schaltfl&auml;che <b>Gehe zu <\/b>und warten einige Augenblicke. Dann erscheint in der Liste <b>Dienste <\/b>der Eintrag <b>PayPalAPIInterfaceService <\/b>mit zwei Untereintr&auml;gen (siehe Bild 3). Wenn Sie auf einen der Untereintr&auml;ge klicken, erscheinen unter <b>Vorg&auml;nge <\/b>einige API-Befehle. Wir tragen unten in das Feld <b>Namespace <\/b>den Wert <b>PayPalService <\/b>ein. Danach k&ouml;nnen Sie Klassen f&uuml;r den Zugriff auf den Webservice mit einem Klick auf die Schaltfl&auml;che <b>OK <\/b>erstellen lassen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_191_003.png\" alt=\"Hinzuf&uuml;gen eines Dienstverweises\" width=\"499,6607\" height=\"408,1507\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen eines Dienstverweises<\/span><\/b><\/p>\n<p>Den PayPal-Service finden wir danach im Projektmappen-Explorer in einem neuen Bereich namens <b>Connected Services <\/b>vor (siehe Bild 4). Hier brauchen wir keine weiteren Schritte vorzunehmen, wir nutzen gleich einfach die Befehle des Service.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_191_004.png\" alt=\"Der PayPal-Service im Projektmappen-Explorer\" width=\"349,7625\" height=\"263,014\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Der PayPal-Service im Projektmappen-Explorer<\/span><\/b><\/p>\n<h2>Webservice auf Produktiv-Konto umstellen<\/h2>\n<p>Beim Einrichten des Webservice wurden in der Datei <b>App.config <\/b>einige Einstellungen vorgenommen. Darunter finden Sie im Bereich <b>client <\/b>auch zwei Elemente namens <b>endpoint<\/b>. Diese enthalten aktuell die Adresse der Sandbox-Zug&auml;nge (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_04\/pic_191_005.png\" alt=\"Einstellungen f&uuml;r den PayPal-Webservice in der Datei App.config\" width=\"649,559\" height=\"503,3415\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Einstellungen f&uuml;r den PayPal-Webservice in der Datei App.config<\/span><\/b><\/p>\n<p>Wenn Sie ein Sandbox-Konto eingerichtet haben oder einrichten m&ouml;chten, k&ouml;nnen Sie damit arbeiten. Wir wollen diese Schritte an dieser Stelle aussparen und direkt auf das Produktiv-Konto zugreifen.<\/p>\n<p>Dazu ersetzen Sie f&uuml;r diese Elemente die Werte f&uuml;r das Attribut <b>address <\/b>mit den folgenden Werten:<\/p>\n<pre>https:\/\/api-3t.paypal.com\/2.0\/\r\nhttps:\/\/api-aa-3t.paypal.com\/2.0<\/pre>\n<p>Beachten Sie, dass Sie sich die Adressen f&uuml;r die beiden <b>endpoint<\/b>-Elemente geringf&uuml;gig unterscheiden &#8211; genau wie die Werte der <b>name<\/b>-Attribute. Das zweite enth&auml;lt jeweils die Buchstaben <b>aa<\/b>. Ersetzen Sie also so, dass das Ergebnis anschlie&szlig;end wie folgt aussieht:<\/p>\n<pre>&lt;endpoint address=\"https:\/\/api-3t.paypal.com\/2.0\/\" binding=\"basicHttpBinding\" bindingConfiguration=\"PayPalAPISoapBinding\"    contract=\"PaypalService.PayPalAPIInterface\" name=\"PayPalAPI\" \/&gt;\r\n&lt;endpoint address=\"https:\/\/api-aa-3t.paypal.com\/2.0\/\" binding=\"basicHttpBinding\"     bindingConfiguration=\"PayPalAPIAASoapBinding\" contract=\"PaypalService.PayPalAPIAAInterface\" name=\"PayPalAPIAA\" \/&gt;<\/pre>\n<h2>Schaltfl&auml;che f&uuml;r den Abruf des aktuellen Saldos<\/h2>\n<p>Nun f&uuml;gen wir dem Fenster <b>MainWindow.xaml <\/b>eine Schaltfl&auml;che namens <b>btnSaldo <\/b>hinzu und f&uuml;gen dieser &uuml;ber das Attribut <b>Click <\/b>eine neue Ereignismethode namens <b>btnSaldo_Click <\/b>hinzu:<\/p>\n<pre>&lt;Button x:Name=\"btnSaldo\" Content=\"Saldo abrufen\" ... Click=\"btnSaldo_Click\"\/&gt;<\/pre>\n<p>Die Ereignismethode im Code behind-Modul <b>MainWindow.xaml.vb <\/b>ist noch leer, wird aber gleich gef&uuml;llt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSaldo_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Zugriffsdaten als Konstanten abspeichern<\/h2>\n<p>Nun hinterlegen wir zun&auml;chst die Zugriffsdaten f&uuml;r den PayPal-Account als Konstanten im Kopf des Code behind-Moduls:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     Const cStrBenutzername<span style=\"color:blue;\"> As String<\/span> = \"********************\"\r\n     Const cStrKennwort<span style=\"color:blue;\"> As String<\/span> = \"*******************\"\r\n     Const cStrSignatur<span style=\"color:blue;\"> As String<\/span> = \"************************************************\"\r\n     ...\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<h2>Saldo abrufen<\/h2>\n<p>Die Methode <b>btnSaldo_Click <\/b>f&uuml;llen wir nun mit den ben&ouml;tigten Anweisungen zum Abrufen des Saldos auf. Als Erstes deklarieren wir einige Variablen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSaldo_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>objPayPalAPIInterfaceClient<span style=\"color:blue;\"> As <\/span>PaypalService.PayPalAPIInterfaceClient\r\n     <span style=\"color:blue;\">Dim <\/span>objCustomSecurityHeaderType<span style=\"color:blue;\"> As <\/span>PaypalService.CustomSecurityHeaderType\r\n     <span style=\"color:blue;\">Dim <\/span>objUserIDPasswordType<span style=\"color:blue;\"> As <\/span>PaypalService.UserIdPasswordType\r\n     <span style=\"color:blue;\">Dim <\/span>objBalanceReq<span style=\"color:blue;\"> As <\/span>PaypalService.GetBalanceReq\r\n     <span style=\"color:blue;\">Dim <\/span>objGetBalanceResponseType<span style=\"color:blue;\"> As <\/span>PaypalService.GetBalanceResponseType<\/pre>\n<p>Danach f&uuml;llen wir einige Objektvariablen mit den entsprechenden Verweisen auf neu erstellte Objekte, darunter auch das Objekt <b>objUserIDPasswordType <\/b>(wir haben die Objekte der &Uuml;bersicht halber nach dem Objekttyp mit vorangestelltem <b>obj <\/b>benannt).<\/p>\n<p>Darunter auch das Objekt <b>objUserIDPasswordType<\/b>, dem wir &uuml;ber die Eigenschaften <b>Username<\/b>, <b>Password <\/b>und <b>Signature <\/b>die entsprechenden Daten aus den zuvor festgelegten Konstanten zuweisen:<\/p>\n<pre>     objPayPalAPIInterfaceClient = <span style=\"color:blue;\">New<\/span> PaypalService.PayPalAPIInterfaceClient\r\n     objCustomSecurityHeaderType = <span style=\"color:blue;\">New<\/span> PaypalService.CustomSecurityHeaderType\r\n     objUserIDPasswordType = <span style=\"color:blue;\">New<\/span> PaypalService.UserIdPasswordType\r\n     <span style=\"color:blue;\">With<\/span> objUserIDPasswordType\r\n         .Username = cStrBenutzername\r\n         .Password = cStrKennwort\r\n         .Signature = cStrSignatur\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     objCustomSecurityHeaderType.Credentials = objUserIDPasswordType<\/pre>\n<p>Danach erstellen wir ein <b>GetBalanceReq<\/b>-Objekt, dem wir ein neues <b>GetBalanceRequestType<\/b>-Objekt zuweisen sowie die Version des zu verwendenden Requests (hier <b>204.0<\/b>):<\/p>\n<pre>     objBalanceReq = <span style=\"color:blue;\">New<\/span> PaypalService.GetBalanceReq\r\n     <span style=\"color:blue;\">With<\/span> objBalanceReq\r\n         .GetBalanceRequest = <span style=\"color:blue;\">New<\/span> PaypalService.GetBalanceRequestType\r\n         .GetBalanceRequest.Version = \"204.0\"\r\n     End <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Das <b>GetBalanceReq<\/b>-Objekt &uuml;bergeben wir dann dem Aufruf der Methode <b>GetBalance <\/b>als zweiten Parameter &#8211; der erste ist der Parameter <b>objCustomSecurityHeaderType <\/b>mit den Zugangsdaten:<\/p>\n<pre>     objGetBalanceResponseType = objPayPalAPIInterfaceClient.GetBalance(objCustomSecurityHeaderType, objBalanceReq)<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000191\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000191?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000191\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PayPal ist ein beliebtes Zahlungsmittel. Gut, wenn man auf einfache Weise den &Uuml;berblick &uuml;ber den Stand seines PayPal-Kontos und &uuml;ber die erfolgten Ums&auml;tze erh&auml;lt &#8211; zum Beispiel &uuml;ber die Webseite oder eine App f&uuml;r das Smartphone. Uns interessiert nat&uuml;rlich, wie wir von der Benutzeroberfl&auml;che einer WPF-Anwendung auf diese Informationen zugreifen k&ouml;nnen. Deshalb schauen wir uns in diesem Artikel an, wie Sie die notwendigen Sicherheitsinformationen f&uuml;r den Zugriff erhalten und wie Sie eine Anwendung um Funktionen zum Abrufen von Kontostand und Ums&auml;tzen erweitern. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662019,66042019,44000004],"tags":[],"yst_prominent_words":[],"class_list":["post-55000191","post","type-post","status-publish","format-standard","hentry","category-662019","category-66042019","category-Loesungen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000191"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000191\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000191"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}