<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jaqe&#039;s Blog &#187; php</title>
	<atom:link href="http://www.jaqe.de/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jaqe.de</link>
	<description>Linux - Webentwicklung - PHP - MySQL - C# - Dies und Das</description>
	<lastBuildDate>Thu, 24 Mar 2011 22:19:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Verschlüsselte PayPal-Zahlung (EWP) mit PHP5</title>
		<link>http://www.jaqe.de/2008/01/12/verschlusselte-paypal-zahlung-ewp-mit-php5/</link>
		<comments>http://www.jaqe.de/2008/01/12/verschlusselte-paypal-zahlung-ewp-mit-php5/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 15:30:29 +0000</pubDate>
		<dc:creator>Jaqe</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[paypal]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.jaqe.de/2008/01/12/verschlusselte-paypal-zahlung-ewp-mit-php5/</guid>
		<description><![CDATA[Ich hatte die letzten 2 Tage damit zu tun, den Aufruf der Sofortigen Zahlung (Web Payment) von PayPal zu verschlüsseln, damit niemand mit den Parametern schabernack treiben kann. Hierbei gibt es das große Problem, dass auf der PayPal-Developer-Seite zwar viel steht, aber eigentlich doch wieder nichts. Dennoch kommt hier die Lösung in Form einer PHP5-Klasse. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte die letzten 2 Tage damit zu tun, den Aufruf der Sofortigen Zahlung (Web Payment) von PayPal zu verschlüsseln, damit niemand mit den Parametern schabernack treiben kann. Hierbei gibt es das große Problem, dass auf der <a href="http://developer.paypal.com/" title="PayPal Developer" target="_blank">PayPal-Developer-Seite</a> zwar viel steht, aber eigentlich doch wieder nichts. Dennoch kommt hier die Lösung in Form einer PHP5-Klasse.</p>
<p><span id="more-20"></span></p>
<p>Fündig wurde ich im Supportforum von PayPal, der dortige Link auf ein PHP-Script führt leier ins leere, doch netter weise hat jemand diesen Code überarbeitet und als <a href="http://www.paypaldeveloper.com/pdn/board/message?board.id=ewp&amp;thread.id=34" title="PayPal Developer Beitrag" target="_blank">Anhang an seinen Post</a> der Community zurück gegeben. Ich habe mir den Sourcecode geschnappt, den Code etwas bereinigt und auf PHP5 OOP-Standard umgebaut. Er ist nicht perfekt aber funktioniert problemlos! Wichtig ist hierbei, dass PHP in ein temporäres Verzeichnis schreiben darf und PHP mit OpenSSL-Funktionen ausgestattet ist. Das Verzeichnis ist nötig, da PayPal eine verschlüsselung der Daten fordert, welche eigentlich für die Verschlüsselung von Emails gedacht ist und die entsprechenden PHP-Funktionen also nur mit Dateien umgehen können. Sicherlich könnte man hier auch mit Streams arbeiten, dennoch funktioniert meine Version genauso gut.</p>
<p>Folgende  Schritte sind für die verschlüsselten Zahlungsoptionen (Encrypted Website Payments (EWP)) nötig:</p>
<ul>
<li>Erstellen eines privaten und öffentlichen Schlüssels mit OpenSSL (1024bit)<quote>openssl genrsa -out my-privatekey.pem 1024</quote></li>
<li>Erstellen eines öffentliches Zertifikates mit dem privaten Schlüssel (Gültigkeit: 365 Tage)<quote>openssl req -new -key my-privatekey.pem -x509 -days 365 -out my-publiccert.pem</quote></li>
<li>Einloggen in den PayPal <strong>Business</strong> Account und unter Profil auf &#8220;Verschlüsselte Zahlungseinstellungen&#8221; klicken. Dort den öffentlichen Schlüssel hochladen und die generierte Zertifikat-ID notieren.</li>
<li>Download des öffentlichen PayPal-Zertifikats und nun die eigenen beiden Zertifikate und das PayPal zertifikat an einen sicheren Ort, am besten ausserhalb des DocumentRoot des Webservers kopieren. <strong>Niemand darf zugriff auf den eigenen privaten Schlüssel bekommen</strong>!</li>
</ul>
<p>Nun kann meine PHP-PayPal-EWP-Klasse (tolles Wort) von <a href="http://www.jaqe.de/wp-content/uploads/2008/01/class_paypal_ewpphp.txt" title="PayPal EWP PHP5 Klasse">hier heruntergeladen</a> werden. Dem Construcot der Klasse übergibt man 4 Parameter: Zertifikat-ID, den Pfad zum eigenen öffentlichen Schlüssel, den Pfad zum eigenen privaten Schlüssel und den Pfad zum öffentlichen PayPal-Zertifikat. Der anschließende Aufruf der Methode encryptButton() gibt den kompletten verschlüsselten Formulareintrag zurück, welcher in ein hidden-Feld geschrieben werden muss. Die encryptButton() Methode erwartet als Parameter ein Array mit den Optionen für PayPal. Dort muss die Email-Adresse des PayPal-Accounts, sowie die Währung und der Gesamtpreis übergeben werden. Der Rest ist optional, der Wert des cmd Feldes lautet standardmäßig &#8220;_xclick&#8221; für eine einfache Zahlung eines festen Betrags. Hier noch ein Codebeispiel für PHP und den HTML-Code:</p>
<p>&lt;?php<br />
require_once(&#8216;class_paypal_ewp.php&#8217;);<br />
$paypal_dir = &#8216;/pfad/zu/den/zertifikaten/&#8217;;<br />
$paypal_url = &#8216;http://www.paypal.com&#8217;; // oder www.sandbox.paypal.com fuer Entwickler<br />
$paypal_zertifikat_id = &#8216;abcdef&#8217;; // Zertifikat-ID von der PayPal Seite</p>
<p>$paypal = new PayPalEWP($paypal_zertifikat_id, $paypal_dir.&#8217;my-publickey.pem&#8217;, $paypal_dir.&#8217;my-privatekey.pem&#8217;, $paypal_dir.&#8217;paypal-cert.pem&#8217;);</p>
<p>$parameters = array(<br />
&#8216;cmd&#8217; =&gt; &#8216;_xclick&#8217;,<br />
&#8216;business&#8217; =&gt; &#8216;mein@paypalaccount.de&#8217;,<br />
&#8216;item_name&#8217; =&gt; &#8216;Test Gegenstand&#8217;, // Name der Bestellung<br />
&#8216;amount&#8217; =&gt; &#8217;00.01&#8242;, // Wert<br />
&#8216;no_shipping&#8217; =&gt; &#8217;1&#8242;, // Keine Versandkosten<br />
&#8216;return&#8217; =&gt; &#8216;http://www.beispiel.de/paypal_ok.php&#8217;, // URL fuer erfolgreiche Zahlung<br />
&#8216;cancel_return&#8217; =&gt; &#8216;http://www.beispiel.de/paypal_cancel.php&#8217;, // URL fuer Zahlungsabbruch<br />
&#8216;no_note&#8217; =&gt; &#8217;1&#8242;, // Keine Notizen vom Kauefer moeglich<br />
&#8216;currency_code&#8217; =&gt; &#8216;EUR&#8217;,<br />
&#8216;lc&#8217; =&gt; &#8216;DE&#8217;,<br />
&#8216;rm&#8217; =&gt; &#8217;2&#8242;, // Der return-URL werden die Paramater als POST uebergeben<br />
&#8216;bn&#8217; =&gt; &#8216;PP-BuyNowBF&#8217;,<br />
&#8216;custom&#8217; =&gt; &#8216;Irgendwas was mitgeschickt werden soll&#8217;<br />
);</p>
<p>$encrypted = $paypal-&gt;encryptButton($parameters);</p>
<p>?&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;&lt;title&gt;PayPal Test&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form action=&#8221;&lt;?= $paypal_url ?&gt;/cgi-bin/webscr&#8221; method=&#8221;post&#8221;&gt;<br />
&lt;input type=&#8221;hidden&#8221; name=&#8221;cmd&#8221; value=&#8221;_s-xclick&#8221; /&gt;<br />
&lt;input type=&#8221;image&#8221; src=&#8221;https://www.paypal.com/de_DE/i/btn/x-click-but01.gif&#8221; border=&#8221;0&#8243; name=&#8221;submit&#8221; alt=&#8221;Zahlen Sie mit PayPal &#8211; schnell, kostenlos und sicher!&#8221; /&gt;<br />
&lt;img alt=&#8221;" border=&#8221;0&#8243; src=&#8221;https://www.paypal.com/de_DE/i/scr/pixel.gif&#8221; width=&#8221;1&#8243; height=&#8221;1&#8243;&gt;<br />
&lt;input type=&#8221;hidden&#8221; name=&#8221;encrypted&#8221; value=&#8221;&lt;?= $encrypted ?&gt;&#8221; /&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Und schon ist der PayPal-Knopf auf der Seite und alle parameter sind verschlüsselt und können nur von PayPal entschlüsselt werden.</p>
<p>Bei meinen Tests vielen mir ein paar ungereimtheiten auf:</p>
<p>Nach der Rückleitung auf die eigene Seite nach einer erfolgreichen Bezahlung in der <strong>PayPal-Sandbox</strong> werden andere Variablen an die eigene Seite übermittelt, als dies auf dem Live-PayPal der Fall ist. Ausserdem werden die Variablen im Live-PayPal per GET, in der Sandbox per POST übermittelt. Davon steht nirgendwo etwas auf den PayPal-Seiten, also vorsicht bei der Entwicklung! Wenn der Kunde die Rückleitung auf die eigene Seite nicht zulässt oder abbricht, so kann die eigene Seite nicht feststellen, dass jemand gezahlt hat! Am besten ist es also, Web Payment Standard (siehe oben) mit <a href="https://www.paypal.com/IntegrationCenter/ic_ipn.html" title="IPN bei PayPal" target="_blank">IPN (Instant Payment Notification)</a> zu verbinden, damit man von PayPal über eine URL vom Kauf informationen bekommt.</p>
<p>Im großen und ganzen finde ich die ganzen möglichkeiten bei PayPal sehr schwach und unzureichend dokumentiert, vorallem die Unterschiede mit der Sandbox. Aber vielleicht habe ich auch nur die falschen Quellen benutzt. Wenn jemand detaillierte Dokus hat, bitte melden ! <img src='http://www.jaqe.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jaqe.de/2008/01/12/verschlusselte-paypal-zahlung-ewp-mit-php5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP4 Support beendet</title>
		<link>http://www.jaqe.de/2008/01/04/php4-support-beendet/</link>
		<comments>http://www.jaqe.de/2008/01/04/php4-support-beendet/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 11:43:14 +0000</pubDate>
		<dc:creator>Jaqe</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.jaqe.de/2008/01/04/php4-support-beendet/</guid>
		<description><![CDATA[Zum 31.12.2007 endete der Support für PHP4 durch die Entwicklergemeinschaft. In diesem Zuge wurde die vorerst letzte offizielle PHP4 Version 4.4.8 veröffentlicht. In diesem Release wurden etliche sicherheitsrelevante Fehler beseitigt. In Zukunft wird es also keine neuen Versionen der 4er Reihe von PHP geben, die Entwickler schließen allerdings nicht aus, dass es weitere Fehlerkorrekturen bis [...]]]></description>
			<content:encoded><![CDATA[<p>Zum 31.12.2007 endete der Support für <a href="http://www.php.net" title="PHP" target="_blank">PHP4</a> durch die Entwicklergemeinschaft. In diesem Zuge wurde die vorerst letzte offizielle PHP4 Version 4.4.8 veröffentlicht. In diesem Release wurden etliche sicherheitsrelevante Fehler beseitigt. In Zukunft wird es also keine neuen Versionen der 4er Reihe von PHP geben, die Entwickler schließen allerdings nicht aus, dass es weitere Fehlerkorrekturen bis zum 08.08.2008 geben wird, allerdings keine neuen Features.</p>
<p>Die Entwickler und ich empfehlen, sofern möglich, auf PHP 5.2 zu aktualisieren. Der 5er Zweigt bringt haufenweise Verbesserungen im <a href="http://de.wikipedia.org/wiki/Objektorientierte_Programmierung" title="Objektorientierte Programmierung bei Wikipedia" target="_blank">OOP</a>-Bereich sowie der Speicherverwaltung und anderer Bereiche. Die kommende Version 6 wird im OOP-Bereich nochmals einen Zahn zulegen und wird die erste PHP-Version, welche offiziell komplette mit UTF-8 zurecht kommt. Bisher sind hier leider oftmals Umwege über die mbstring-Funktionen nötig.</p>
<p>Und zum Abschluß noch eine durchaus wichtige Anmerkung: Wer einen eigenen Server betreibt und PHP selbst compiliert und installiert sollte stets darauf achten, immer die aktuellste PHP-Version zu verwenden. Das gefährlichste am Internet heutzutage sind nicht behobene Sicherheitslücken!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jaqe.de/2008/01/04/php4-support-beendet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

