-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c7839e2
commit 6c4850f
Showing
59 changed files
with
6,845 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
<?php | ||
/* | ||
* 2007-2013 PrestaShop | ||
* | ||
* NOTICE OF LICENSE | ||
* | ||
* This source file is subject to the Academic Free License (AFL 3.0) | ||
* that is bundled with this package in the file LICENSE.txt. | ||
* It is also available through the world-wide-web at this URL: | ||
* http://opensource.org/licenses/afl-3.0.php | ||
* If you did not receive a copy of the license and are unable to | ||
* obtain it through the world-wide-web, please send an email | ||
* to [email protected] so we can send you a copy immediately. | ||
* | ||
* DISCLAIMER | ||
* | ||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer | ||
* versions in the future. If you wish to customize PrestaShop for your | ||
* needs please refer to http://www.prestashop.com for more information. | ||
* | ||
* @author PrestaShop SA <[email protected]> | ||
* @copyright 2007-2013 PrestaShop SA | ||
* @version Release: $Revision: 7040 $ | ||
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) | ||
* International Registered Trademark & Property of PrestaShop SA | ||
*/ | ||
|
||
include(dirname(__FILE__).'/../../config/config.inc.php'); | ||
include(dirname(__FILE__).'/../../init.php'); | ||
include(dirname(__FILE__).'/stripejs.php'); | ||
|
||
if (!defined('_PS_VERSION_')) | ||
exit; | ||
|
||
$customer = new Customer((int)$cookie->id_customer); | ||
if (!Validate::isLoadedObject($customer)) | ||
die('0'); | ||
|
||
if (!isset($_POST['token']) || $_POST['token'] != $customer->secure_key) | ||
die('0'); | ||
|
||
/* Check that the module is active and that we have the token */ | ||
$stripe = new StripeJs(); | ||
if ($stripe->active && isset($_POST['action'])) | ||
{ | ||
switch ($_POST['action']) | ||
{ | ||
case 'delete_card': | ||
echo (int)$stripe->deleteCreditCard(); | ||
break; | ||
} | ||
} |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?xml version="1.0" encoding="UTF-8" ?> | ||
<module> | ||
<name>stripejs</name> | ||
<displayName><![CDATA[Stripe]]></displayName> | ||
<version><![CDATA[0.9.7]]></version> | ||
<description><![CDATA[Accept payments by Credit Card with Stripe (Visa, Mastercard, Amex, Discover and Diners Club)]]></description> | ||
<author><![CDATA[PrestaShop]]></author> | ||
<tab><![CDATA[payments_gateways]]></tab> | ||
<confirmUninstall>Warning: all the Stripe customers credit cards and transaction details saved in your database will be deleted. Are you sure you want uninstall this module?</confirmUninstall> | ||
<is_configurable>1</is_configurable> | ||
<need_instance>0</need_instance> | ||
<limited_countries></limited_countries> | ||
</module> |
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
|
||
/* PrestaShop - Replaced all json_* by Tools::json* to ensure compatibility w/ PHP 5.x */ | ||
|
||
abstract class Stripe | ||
{ | ||
public static $apiKey; | ||
public static $apiBase = 'https://api.stripe.com/v1'; | ||
public static $verifySslCerts = true; | ||
const VERSION = '1.7.7'; | ||
|
||
public static function getApiKey() { return self::$apiKey; } | ||
public static function setApiKey($apiKey) { self::$apiKey = $apiKey; } | ||
public static function getVerifySslCerts() { return self::$verifySslCerts; } | ||
public static function setVerifySslCerts($verify) { self::$verifySslCerts = $verify; } | ||
} | ||
|
||
// Utilities | ||
require(dirname(__FILE__) . '/Stripe/Util.php'); | ||
require(dirname(__FILE__) . '/Stripe/Util/Set.php'); | ||
|
||
// Errors | ||
require(dirname(__FILE__) . '/Stripe/Error.php'); | ||
require(dirname(__FILE__) . '/Stripe/ApiError.php'); | ||
require(dirname(__FILE__) . '/Stripe/ApiConnectionError.php'); | ||
require(dirname(__FILE__) . '/Stripe/AuthenticationError.php'); | ||
require(dirname(__FILE__) . '/Stripe/CardError.php'); | ||
require(dirname(__FILE__) . '/Stripe/InvalidRequestError.php'); | ||
|
||
// Plumbing | ||
require(dirname(__FILE__) . '/Stripe/Object.php'); | ||
require(dirname(__FILE__) . '/Stripe/ApiRequestor.php'); | ||
require(dirname(__FILE__) . '/Stripe/ApiResource.php'); | ||
require(dirname(__FILE__) . '/Stripe/SingletonApiResource.php'); | ||
|
||
// Stripe API Resources | ||
require(dirname(__FILE__) . '/Stripe/Account.php'); | ||
require(dirname(__FILE__) . '/Stripe/Charge.php'); | ||
require(dirname(__FILE__) . '/Stripe/Customer.php'); | ||
require(dirname(__FILE__) . '/Stripe/Invoice.php'); | ||
require(dirname(__FILE__) . '/Stripe/InvoiceItem.php'); | ||
require(dirname(__FILE__) . '/Stripe/Plan.php'); | ||
require(dirname(__FILE__) . '/Stripe/Token.php'); | ||
require(dirname(__FILE__) . '/Stripe/Coupon.php'); | ||
require(dirname(__FILE__) . '/Stripe/Event.php'); | ||
require(dirname(__FILE__) . '/Stripe/Transfer.php'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
|
||
class Stripe_Account extends Stripe_SingletonApiResource | ||
{ | ||
public static function constructFrom($values, $apiKey=null) | ||
{ | ||
$class = get_class(); | ||
return self::scopedConstructFrom($class, $values, $apiKey); | ||
} | ||
|
||
public static function retrieve($apiKey=null) | ||
{ | ||
$class = get_class(); | ||
return self::_scopedSingletonRetrieve($class, $apiKey); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?php | ||
|
||
class Stripe_ApiConnectionError extends Stripe_Error | ||
{ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?php | ||
|
||
class Stripe_ApiError extends Stripe_Error | ||
{ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,206 @@ | ||
<?php | ||
|
||
class Stripe_ApiRequestor | ||
{ | ||
public $apiKey; | ||
|
||
public function __construct($apiKey=null) | ||
{ | ||
$this->_apiKey = $apiKey; | ||
} | ||
|
||
public static function apiUrl($url='') | ||
{ | ||
$apiBase = Stripe::$apiBase; | ||
return "$apiBase$url"; | ||
} | ||
|
||
public static function utf8($value) | ||
{ | ||
if (is_string($value)) | ||
return utf8_encode($value); | ||
else | ||
return $value; | ||
} | ||
|
||
private static function _encodeObjects($d) | ||
{ | ||
if ($d instanceof Stripe_ApiResource) { | ||
return $d->id; | ||
} else if ($d === true) { | ||
return 'true'; | ||
} else if ($d === false) { | ||
return 'false'; | ||
} else if (is_array($d)) { | ||
$res = array(); | ||
foreach ($d as $k => $v) | ||
$res[$k] = self::_encodeObjects($v); | ||
return $res; | ||
} else { | ||
return $d; | ||
} | ||
} | ||
|
||
public static function encode($d) | ||
{ | ||
return http_build_query($d, null, '&'); | ||
} | ||
|
||
public function request($meth, $url, $params=null) | ||
{ | ||
if (!$params) | ||
$params = array(); | ||
list($rbody, $rcode, $myApiKey) = $this->_requestRaw($meth, $url, $params); | ||
$resp = $this->_interpretResponse($rbody, $rcode); | ||
return array($resp, $myApiKey); | ||
} | ||
|
||
public function handleApiError($rbody, $rcode, $resp) | ||
{ | ||
if (!is_array($resp) || !isset($resp['error'])) | ||
throw new Stripe_ApiError("Invalid response object from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody, $resp); | ||
$error = $resp['error']; | ||
switch ($rcode) { | ||
case 400: | ||
case 404: | ||
throw new Stripe_InvalidRequestError(isset($error['message']) ? $error['message'] : null, | ||
isset($error['param']) ? $error['param'] : null, | ||
$rcode, $rbody, $resp); | ||
case 401: | ||
throw new Stripe_AuthenticationError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp); | ||
case 402: | ||
throw new Stripe_CardError(isset($error['message']) ? $error['message'] : null, | ||
isset($error['param']) ? $error['param'] : null, | ||
isset($error['code']) ? $error['code'] : null, | ||
$rcode, $rbody, $resp); | ||
default: | ||
throw new Stripe_ApiError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp); | ||
} | ||
} | ||
|
||
private function _requestRaw($meth, $url, $params) | ||
{ | ||
$myApiKey = $this->_apiKey; | ||
if (!$myApiKey) | ||
$myApiKey = Stripe::$apiKey; | ||
if (!$myApiKey) | ||
throw new Stripe_AuthenticationError('No API key provided. (HINT: set your API key using "Stripe::setApiKey(<API-KEY>)". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email [email protected] if you have any questions.'); | ||
|
||
$absUrl = $this->apiUrl($url); | ||
$params = self::_encodeObjects($params); | ||
$langVersion = phpversion(); | ||
$uname = php_uname(); | ||
$ua = array('bindings_version' => Stripe::VERSION, | ||
'lang' => 'php', | ||
'lang_version' => $langVersion, | ||
'publisher' => 'stripe', | ||
'uname' => $uname); | ||
$headers = array('X-Stripe-Client-User-Agent: ' . Tools::jsonEncode($ua), /* PrestaShop */ | ||
'X-Stripe-Application: ca_0ZCKiqjiWpOYdxqHZPKaKQlRDnNPhd9P', | ||
'User-Agent: Stripe/v1 PhpBindings/' . Stripe::VERSION, | ||
'Authorization: Bearer ' . $myApiKey); | ||
list($rbody, $rcode) = $this->_curlRequest($meth, $absUrl, $headers, $params); | ||
return array($rbody, $rcode, $myApiKey); | ||
} | ||
|
||
private function _interpretResponse($rbody, $rcode) | ||
{ | ||
try { | ||
$rbody = trim($rbody, '"'); | ||
$rbody = str_replace('\n', '', $rbody); | ||
$rbody = str_replace("\n", '', $rbody); | ||
$rbody = str_replace("\\", '', $rbody); | ||
|
||
$resp = json_decode($rbody, true); /* PrestaShop */ | ||
} catch (Exception $e) { | ||
throw new Stripe_ApiError("Invalid response body from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody); | ||
} | ||
|
||
if ($rcode < 200 || $rcode >= 300) { | ||
$this->handleApiError($rbody, $rcode, $resp); | ||
} | ||
return $resp; | ||
} | ||
|
||
private function _curlRequest($meth, $absUrl, $headers, $params) | ||
{ | ||
$curl = curl_init(); | ||
$meth = strtolower($meth); | ||
$opts = array(); | ||
if ($meth == 'get') { | ||
$opts[CURLOPT_HTTPGET] = 1; | ||
if (count($params) > 0) { | ||
$encoded = self::encode($params); | ||
$absUrl = "$absUrl?$encoded"; | ||
} | ||
} else if ($meth == 'post') { | ||
$opts[CURLOPT_POST] = 1; | ||
$opts[CURLOPT_POSTFIELDS] = self::encode($params); | ||
} else if ($meth == 'delete') { | ||
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE'; | ||
if (count($params) > 0) { | ||
$encoded = self::encode($params); | ||
$absUrl = "$absUrl?$encoded"; | ||
} | ||
} else { | ||
throw new Stripe_ApiError("Unrecognized method $meth"); | ||
} | ||
|
||
$absUrl = self::utf8($absUrl); | ||
$opts[CURLOPT_URL] = $absUrl; | ||
$opts[CURLOPT_RETURNTRANSFER] = true; | ||
$opts[CURLOPT_CONNECTTIMEOUT] = 30; | ||
$opts[CURLOPT_TIMEOUT] = 80; | ||
$opts[CURLOPT_RETURNTRANSFER] = true; | ||
$opts[CURLOPT_HTTPHEADER] = $headers; | ||
if (!Stripe::$verifySslCerts) | ||
$opts[CURLOPT_SSL_VERIFYPEER] = false; | ||
|
||
curl_setopt_array($curl, $opts); | ||
$rbody = curl_exec($curl); | ||
|
||
$errno = curl_errno($curl); | ||
if ($errno == CURLE_SSL_CACERT || | ||
$errno == CURLE_SSL_PEER_CERTIFICATE || | ||
$errno == 77 // CURLE_SSL_CACERT_BADFILE (constant not defined in PHP though) | ||
) { | ||
array_push($headers, 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'); | ||
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); | ||
curl_setopt($curl, CURLOPT_CAINFO, | ||
dirname(__FILE__) . '/../data/ca-certificates.crt'); | ||
$rbody = curl_exec($curl); | ||
} | ||
|
||
if ($rbody === false) { | ||
$errno = curl_errno($curl); | ||
$message = curl_error($curl); | ||
curl_close($curl); | ||
$this->handleCurlError($errno, $message); | ||
} | ||
|
||
$rcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); | ||
curl_close($curl); | ||
return array($rbody, $rcode); | ||
} | ||
|
||
public function handleCurlError($errno, $message) | ||
{ | ||
$apiBase = Stripe::$apiBase; | ||
switch ($errno) { | ||
case CURLE_COULDNT_CONNECT: | ||
case CURLE_COULDNT_RESOLVE_HOST: | ||
case CURLE_OPERATION_TIMEOUTED: | ||
$msg = "Could not connect to Stripe ($apiBase). Please check your internet connection and try again. If this problem persists, you should check Stripe's service status at https://twitter.com/stripestatus, or let us know at [email protected]."; | ||
break; | ||
case CURLE_SSL_CACERT: | ||
case CURLE_SSL_PEER_CERTIFICATE: | ||
$msg = "Could not verify Stripe's SSL certificate. Please make sure that your network is not intercepting certificates. (Try going to $apiBase in your browser.) If this problem persists, let us know at [email protected]."; | ||
break; | ||
default: | ||
$msg = "Unexpected error communicating with Stripe. If this problem persists, let us know at [email protected]."; | ||
} | ||
|
||
$msg .= "\n\n(Network error [errno $errno]: $message)"; | ||
throw new Stripe_ApiConnectionError($msg); | ||
} | ||
} |
Oops, something went wrong.