Die letzten Wochen wollte ich in ein Projekt Bitcoins als bezahl Option einbauen und musste mich für einen Payment Anbieter entscheiden. Ich hatte Coinbase und Bitpay in meine engere Wahl genommen und am Ende fuer Bitpay entschlossen. Warum? Weil Bitpay Auszahlungen in die EU macht und Coinbase nur auf Amerikanische Konten. Diese Entscheidung wurde einem also relativ einfach genommen.
Jetzt ging es um die Integration der Bitpay API in den Shop. Die Seite benutzt keine Shop Software und somit musste ich die API selber in der Seite einbauen. Die Dokumentation ist eigentlich recht gut. Diese beinhaltet sehr gut wie man eine Rechnung erstellt. Ich finde die “callback” Funktion wird nicht gut beschrieben und ich musste erst einmal ein bisschen ausprobieren. Als erstes, es gibt keine Testumgebung und somit muss man mit echten Bitcoins seine Implementierung testen. Irgendwie schreckt das eigentlich schon direkt ab.
Zum glück bietet Bitpay eine eigene library für PHP an. Somit musste man sich nicht um wirklich alles kümmern. Die Konfiguration in bp_options.php sollte verständlich sein und ich gehe hier nicht auf diese ein.
Erstellen einer Rechnung:
<?php
// bitpay
require 'bp_lib.php';
$post_data = array(
'product' => $product
);
$addl_options = array(
'itemDesc' => $description,
'itemCode' => $product,
'currency' => $currency
);
$response = bpCreateInvoice(null, $price, $post_data, $addl_options);
if(!empty($response)){
$bitpay = $response["url"];
if ($bitpay) {
header("Location: $bitpay");
}
?>
Die $post_data können später im callback verarbeitet werden, die anderen Werte sind nur für die Rechnung oder um die Umrechnung korrekt durchzuführen.
Verarbeiten des Callbacks:
Es hat also jemand ein Produkt gekauft und wir werden über dieses wunderbare Event informiert. Die Callback URL musste man vorher in den Optionen festlegen:
<?php
// bitpay
require 'bp_lib.php';
$BITPAY_KEY = "YOUR_BITPAY_KEY";
$response = bpVerifyNotification( $BITPAY_KEY );
$id = $response['id'];
$url = $response['url'];
$product = $response['posData']['product'];
$status = $response['status'];
$btcPrice = $response['btcPrice'];
$price = $response['price'];
$currency = $response['currency'];
$btcPaid = $response['btcPaid'];
$rate = $response['rate'];
?>
Eigentlich sehr einfach und man kann die Daten weiter verarbeiten. Die Hürde war an der stelle vorhanden, das man echte Bitcoins benutzen musste. Ich hoffe das Bitpay das bald ändern wird und ggf. werden dann mehr Shops auf Bitpay setzen. Wenn die Tests ordentlich verlaufen wird es bald einen Shop mehr geben der Bitcoins als Option anbietet.