Commit f1c47109 by Dirk Wildt

7.5.2

parent 859ba1bb
TODO
,TODO
* 161115: Bug in context with variants: In case of update the quantity by caddy, limits won't respected!
* jquery.t3caddy-4.0.0.js: possible lang is en and de only!
7.5.2
17-09-21
Fetaure
* #i0166: Enable or disable prompts to your console by the Constant Editor. See category [CADDY - DEBUG].
Has an effect for PHP code only.
* #i0165: E-Payment: Integration of method Paypal
Improvement
* #i0164: E-Payment: Form for ELV (IBAN/BIC) got a field for the bankname
* #i0163: Update Paymill-PHP-API from 3.0.2 to master (1 after 4.4.2)
* YOU MUST install the extension Paymill
* Is moved
Resources/Public/JavaScript/e-payment-provider/paymill/paymill-php-3.0.2 > EXT:paymill/Resources/Private/3.0.2/paymill-php-3.0.2
7.5.1
17-09-19
Feature
......
......@@ -4,7 +4,9 @@ plugin.caddy {
debug.paramsAndTs = 0
# cat=caddy - debug//101; type=boolean; label= Debug user functions (backend): Enable the DRS for user functions
debug.userfunc = 0
# cat=caddy - debug//102; type=boolean; label= Don't replace empty marker: Enable it, if empty HTML markers should not removed.
# cat=caddy - debug//102; type=boolean; label= Console: Enable it, if you like prompts to the console of your internet browser.
debug.console = 0
# cat=caddy - debug//103; type=boolean; label= Don't replace empty marker: Enable it, if empty HTML markers should not removed.
debug.dontReplaceEmptyMarker = 0
# cat=caddy - debug/others/998; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptExternalLinks]; label=External Links:typo3-caddy.de
debug.externalLinks = Click me!
......
......@@ -9,6 +9,8 @@ plugin.tx_caddy_pi1 {
dontReplaceEmptyMarker = {$plugin.caddy.debug.dontReplaceEmptyMarker}
// [Boolean] Debug user functions (backend): Enable the DRS for user functions
paramsAndTs = {$plugin.caddy.debug.paramsAndTs}
// [Boolean] Enable it, if you like prompts to the console of your internet browser.
console = {$plugin.caddy.debug.console}
// [Boolean] Don't replace empty marker: Enable it, if empty HTML markers should not removed.
userfunc = {$plugin.caddy.debug.userfunc}
}
......
......@@ -50,7 +50,7 @@ plugin.caddy {
# cat=caddy - e-payment - paymill files//105; type=string; label= HTML:HTML template
e-payment.paymill.files.html = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/template/foundation/4x/html/payment_methods.html
# cat=caddy - e-payment - paymill files//106; type=string; label= JavaScript API:
e-payment.paymill.files.php.autoload = Resources/Public/JavaScript/e-payment/paymill/api/php/vendor/autoload.php
e-payment.paymill.files.php.autoload = EXT:paymill/Resources/Private/master/paymill-php/autoload.php
# cat=caddy - e-payment - paymill files/others/998; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptExternalLinks]; label=External Links:typo3-caddy.de
e-payment.paymill.files.externalLinks = Click me!
# cat=caddy - e-payment - paymill files/others/999; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptSponsors]; label=Subsidise the Caddy project!
......
......@@ -39,18 +39,18 @@ plugin.caddy {
# cat=caddy - e-payment - paymill*/others/999; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptSponsors]; label=Subsidise the Caddy project!
e-payment.paymill.sponsors = Click me!
# cat=caddy - e-payment - paymill files//101; type=string; label= CSS:CSS for paymill
# cat=caddy - e-payment - paymill files//100; type=string; label= Paymill Bridge: URL. Usually https://bridge.paymill.com/
e-payment.paymill.files.js.bridge = https://bridge.paymill.com/
# cat=caddy - e-payment - paymill files//101; type=string; label= Paymill PHP API:Path to the file autoload.php
e-payment.paymill.files.php.autoload = EXT:paymill/Resources/Private/master/paymill-php/autoload.php
# cat=caddy - e-payment - paymill files//102; type=string; label= HTML:Path to the HTML template
e-payment.paymill.files.html = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/template/foundation/5x/html/payment_methods.html
# cat=caddy - e-payment - paymill files//103; type=string; label= CSS:Path to the CSS file for the HTML template
e-payment.paymill.files.css = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/template/foundation/5x/css/paymill.css
# cat=caddy - e-payment - paymill files//102; type=string; label= JavaScript API:
# cat=caddy - e-payment - paymill files//104; type=string; label= JSS:Path to the JavaScript file
e-payment.paymill.files.js.api = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/api/js/paymill-cc-elv-iban_5x.js
# cat=caddy - e-payment - paymill files//103; type=string; label= JavaScript localization:
e-payment.paymill.files.js.bridge = https://bridge.paymill.com/
# cat=caddy - e-payment - paymill files//104; type=string; label= JavaScript localization:
# cat=caddy - e-payment - paymill files//105; type=string; label= Localisation:Path to the JavaScript localization file
e-payment.paymill.files.js.lang = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/api/js/translation.js
# cat=caddy - e-payment - paymill files//105; type=string; label= HTML:HTML template
e-payment.paymill.files.html = EXT:caddy/Resources/Public/JavaScript/e-payment/paymill/template/foundation/5x/html/payment_methods.html
# cat=caddy - e-payment - paymill files//106; type=string; label= JavaScript API:
e-payment.paymill.files.php.autoload = Resources/Public/JavaScript/e-payment/paymill/api/php/vendor/autoload.php
# cat=caddy - e-payment - paymill files/others/998; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptExternalLinks]; label=External Links:typo3-caddy.de
e-payment.paymill.files.externalLinks = Click me!
# cat=caddy - e-payment - paymill files/others/999; type=user[EXT:caddy/Resources/Private/Lib/userfunc/class.tx_caddy_userfunc.php:tx_caddy_userfunc->promptSponsors]; label=Subsidise the Caddy project!
......@@ -104,4 +104,12 @@ plugin.caddy {
options.payment.13.costs = 0.00
# cat=caddy - options - payment/enable/324; type=options[normal,reduced]; label= 13. Direct debit (IBAN) - tax rate:Tax rate for extra costs for the payment option direct debit (IBAN).
options.payment.13.taxrate = normal
# cat=caddy - options - payment/enable/421; type=boolean; label= 14. Paypal - enabled:Disable it, if you don't want to offer the payment option paypal.
options.payment.14.enabled = 1
# cat=caddy - options - payment/enable/422; type=string; label= 14. Paypal - discount (%):Cash discount for the payment option paypal in per cent. Example: 3.00.
options.payment.14.cashdiscount = 0.00
# cat=caddy - options - payment/enable/423; type=string; label= 14. Paypal - costs:Extra costs for payment option paypal. Example: 9.99.
options.payment.14.costs = 0.00
# cat=caddy - options - payment/enable/424; type=options[normal,reduced]; label= 14. Paypal - tax rate:Tax rate for extra costs for the payment option paypal.
options.payment.14.taxrate = normal
}
\ No newline at end of file
......@@ -21,10 +21,11 @@ plugin.tx_caddy_pi1 {
// files, keys, mode
paymill =
paymill {
// html
// html, php
files =
files {
html = {$plugin.caddy.e-payment.paymill.files.html}
// autoload
php =
php {
autoload = {$plugin.caddy.e-payment.paymill.files.php.autoload}
......@@ -249,6 +250,54 @@ plugin.tx_caddy_pi1 {
extra = {$plugin.caddy.options.payment.13.costs}
tax = {$plugin.caddy.options.payment.13.taxrate}
}
14 < plugin.tx_caddy_pi1.api.options.payment.options.1
// paypal: term of credit, recommend us. Internal #i0165
14 = paypal
14 {
enabled = {$plugin.caddy.options.payment.14.enabled}
// [Boolean]: true, if it is an e-payment-method
e-payment = 1
title {
10 {
10 {
data = LLL:EXT:caddy/Resources/Private/Lib/e-payment/paymill/locallang.xml:paypal-paymentname
}
20 {
if {
isGreaterThan = {$plugin.caddy.options.payment.14.costs}
}
20 {
10 {
userFunc {
number {
value = {$plugin.caddy.options.payment.14.costs}
}
}
}
}
}
}
20 {
if {
isGreaterThan = {$plugin.caddy.options.payment.14.cashdiscount}
}
20 {
10 {
userFunc {
number {
value = {$plugin.caddy.options.payment.14.cashdiscount}
}
}
}
}
}
}
cash-discount {
percent = {$plugin.caddy.options.payment.14.cashdiscount}
}
extra = {$plugin.caddy.options.payment.14.costs}
tax = {$plugin.caddy.options.payment.14.taxrate}
}
}
}
}
......@@ -278,10 +327,20 @@ plugin.tx_caddy_pi1 {
}
// direct debit (IBAN) (de: Lastschrift mit IBAN): term of credit, recommend us
13 < .12
}
// paypal: term of credit, recommend us. Internal #i0165
14 = TEXT
14 {
value = You've paid with paypal.
lang {
de = Sie haben mit Paypal bezahlt
en = You've paid with paypal.
}
}
}
caddy_header_paymentmethod_creditcard < plugin.tx_caddy_pi1.api.options.payment.options.11.title
caddy_header_paymentmethod_elv < plugin.tx_caddy_pi1.api.options.payment.options.12.title
caddy_header_paymentmethod_elv-iban < plugin.tx_caddy_pi1.api.options.payment.options.13.title
caddy_header_paymentmethod_paypal < plugin.tx_caddy_pi1.api.options.payment.options.14.title
paymill_public_key < plugin.tx_caddy_pi1.api.e-payment.provider.paymill.keys.public
}
}
......
......@@ -32,7 +32,7 @@ use TYPO3\CMS\Core\Utility\DebugUtility;
* @package TYPO3
* @subpackage tx_caddy
* @internal #53678
* @version 7.4.5
* @version 7.5.2
* @since 4.0.6
*/
class tx_caddy_paymill_paymentMethods extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
......@@ -398,6 +398,10 @@ class tx_caddy_paymill_paymentMethods extends \TYPO3\CMS\Frontend\Plugin\Abstrac
case( 13 ):
$this->paymentMethodsElvIban();
break;
// #i0165, 170921, dwildt +
case( 14 ):
$this->paymentMethodsPaypal();
break;
default:
$this->paymentMethodsUndefined();
break;
......@@ -536,7 +540,7 @@ class tx_caddy_paymill_paymentMethods extends \TYPO3\CMS\Frontend\Plugin\Abstrac
$marker[ '###VALUE_ELV-IBAN###' ] = $iban;
$marker[ '###VALUE_ELV-BIC###' ] = '**********';
$marker[ '###VALUE_ELV-IBAN-HOLDER###' ] = $this->paymillLib->getBankHolder();
var_dump(__METHOD__, __LINE__, $marker);
//var_dump(__METHOD__, __LINE__, $marker);
$this->content = $this->pObj->cObj->substituteMarkerArray( $this->content, $marker );
}
......@@ -560,6 +564,28 @@ var_dump(__METHOD__, __LINE__, $marker);
}
/**
* paymentMethodsPaypal( ):
*
* @param integer $paymentId : current payment id. 1: credit card, 2: elv. 3: sepa (elv-iban).
* @return void
* @access private
* @version 7.5.2
* @since 7.5.2
* @internal #i0165
*/
private function paymentMethodsPaypal()
{
// notice (grey) = secondary, info (blue) = [empty!], ok (green) = success, error (red) = alert
$this->prompts[] = 'SERVER_PROMPT_WICLOSE_SUBPART|secondary|' . $this->pi_getLL( 'prompt-paypal-ok' );
$this->prompts[] = 'SERVER_PROMPT_WOCLOSE_SUBPART|success|' . $this->pi_getLL( 'prompt-paywith-paypal' );
$marker[ '###VALUE_PAYMILL-ACCOUNT###' ] = $this->paymillLib->getBankAccount();
$marker[ '###VALUE_PAYMILL-HOLDER###' ] = $this->paymillLib->getBankHolder();
//var_dump(__METHOD__, __LINE__, $marker);
$this->content = $this->pObj->cObj->substituteMarkerArray( $this->content, $marker );
}
/**
* paymentMethodsUndefined( ):
*
* @param integer $paymentId : current payment id. 1: credit card, 2: elv. 3: sepa (elv-iban).
......
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>
<body>
<script type="text/javascript">
var PAYMILL_PUBLIC_KEY = '264783270323a4a3374e4bdcdee9f8d2';
</script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://bridge.paymill.com/"></script>
<script type="text/javascript">
$(document).ready(function () {
function PaymillResponseHandler(error, result) {
if (error) {
// Displays the error above the form
$(".payment-errors").text(error.apierror);
} else {
$(".payment-errors").text("");
var form = $("#payment-form");
// Token
var token = result.token;
// Insert token into form in order to submit to server
form.append("<input type='hidden' name='paymillToken' value='" + token + "'/>");
form.get(0).submit();
}
$(".submit-button").removeAttr("disabled");
}
$("#payment-form").submit(function (event) {
// Deactivate submit button to avoid further clicks
$('.submit-button').attr("disabled", "disabled");
if (!paymill.validateCardNumber($('.card-number').val())) {
$(".payment-errors").text("Invalid card number");
$(".submit-button").removeAttr("disabled");
return false;
}
if (!paymill.validateExpiry(
$('.card-expiry-month').val(),
$('.card-expiry-year').val())
) {
$(".payment-errors").text("Invalid expiration date");
$(".submit-button").removeAttr("disabled");
return false;
}
paymill.createToken({
number: $('.card-number').val(),
exp_month: $('.card-expiry-month').val(),
exp_year: $('.card-expiry-year').val(),
cvc: $('.card-cvc').val(),
cardholder: $('.card-holdername').val(),
amount_int: $('.card-amount-int').val(), // Integer z.B. "4900" für 49,00 EUR
currency: $('.card-currency').val() // ISO 4217 z.B. "EUR"
}, PaymillResponseHandler);
return false;
});
});
</script>
<div class="payment-errors"></div>
<form id="payment-form" action="request-3.0.2.php" method="POST">
<input class="card-amount-int" type="hidden" value="4900" />
<input class="card-currency" type="hidden" value="EUR" />
<div class="form-row"><label>Card number</label>
<input class="card-number" type="text" value="4111111111111111" size="20" /></div>
<div class="form-row"><label>CVC (Prüfnummer)</label>
<input class="card-cvc" type="text" value="111" size="4" /></div>
<div class="form-row"><label>Name</label>
<input class="card-holdername" type="text" value="Joe Doe" size="20" /></div>
<div class="form-row"><label>Expiry Date (MM/YYYY)</label>
<input class="card-expiry-month" type="text" value="02" size="2" />
<span> / </span>
<input class="card-expiry-year" type="text" value="2015" size="4" /></div>
<div class="form-row"><label>Währung</label>
<button class="submit-button" type="submit">Submit</button>
</form>
</body>
</html>
PAYMILL-PHP
===========
[![Build Status](https://travis-ci.org/paymill/paymill-php.png)](https://travis-ci.org/paymill/paymill-php)
[![Latest Stable Version](https://poser.pugx.org/paymill/paymill/v/stable.png)](https://packagist.org/packages/paymill/paymill)
[![Total Downloads](https://poser.pugx.org/paymill/paymill/downloads.png)](https://packagist.org/packages/paymill/paymill)
How to test
-----------
There are different credit card numbers, frontend and backend error codes, which can be used for testing.
For more information, please read our testing reference.
https://www.paymill.com/en-gb/documentation-3/reference/testing/
Getting started with PAYMILL
----------------------------
If you don't already use Composer, then you probably should read the installation guide http://getcomposer.org/download/.
Please include this library via Composer in your composer.json and execute **composer update** to refresh the autoload.php.
```
{
"require": {
"paymill/paymill": "v3.0.0"
}
}
```
1. Instantiate the request class with the following parameters:
$apiKey: First parameter is always your private API (test) Key
```php
$request = new Paymill\Request($apiKey);
```
2. Instantiate the model class with the parameters described in the API-reference:
```php
$payment = new Paymill\Models\Request\Payment();
$payment->setToken("098f6bcd4621d373cade4e832627b4f6");
```
3. Use your desired function:
```php
$response = $request->create($payment);
$paymentId = $response->getId();
```
It recommend to wrap it into a "try/catch" to handle exceptions like this:
```php
try{
$response = $request->create($payment);
$paymentId = $response->getId();
}catch(PaymillException $e){
//Do something with the error informations below
$e->getResponseCode();
$e->getStatusCode();
$e->getErrorMessage();
}
```
Documentation
--------------
For further information, please refer to our official PHP library reference: https://www.paymill.com/en-gb/documentation-3/reference/api-reference/index.html
<?php
namespace Paymill\API;
use Exception;
/**
* It's incorrect to test for the function itself. Since we know exactly when the
* json_decode function was introduced. So we test the PHP version instead.
*/
if (version_compare(PHP_VERSION, '5.2.0', '<')) {
throw new Exception('Your PHP version is too old: install the PECL JSON extension');
} else if (!function_exists('json_decode')) {
throw new Exception('The JSON extension is missing: install it.');
}
/**
* Check if the cURL extension is enabled.
*
*/
if (!extension_loaded('curl')) {
throw new Exception('Please install the PHP cURL extension');
}
/**
* Curl
*/
class Curl extends CommunicationAbstract
{
private $_apiKey;
private $_apiUrl;
private $_extraOptions;
/**
* cURL HTTP client constructor
*
* @param string $apiKey
* @param string $apiEndpoint
* @param array $extracURL
* Extra cURL options. The array is keyed by the name of the cURL
* options.
*/
public function __construct($apiKey, $apiEndpoint = 'https://api.paymill.com/v2/', $extracURL = array())
{
$this->_apiKey = $apiKey;
$this->_apiUrl = $apiEndpoint;
/**
* Proxy support. The proxy can be SOCKS5 or HTTP.
* Also the connection could be tunneled through.
*/
if (!empty($extracURL)) {
$this->_extraOptions;
}
}
/**
* Perform HTTP request to REST endpoint
*
* @param string $action
* @param array $params
* @param string $method
* @return array
*/
public function requestApi($action = '', $params = array(), $method = 'POST')
{
$curlOpts = array(
CURLOPT_URL => $this->_apiUrl . $action,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_USERAGENT => 'Paymill-php/0.0.2',
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_CAINFO => realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'paymill.crt',
);
// Add extra options to cURL if defined.
if (!empty($this->_extraOptions)) {
$curlOpts += $this->_extraOptions;
}
if ('GET' === $method) {
if (0 !== count($params)) {
$curlOpts[CURLOPT_URL] .= false === strpos($curlOpts[CURLOPT_URL], '?') ? '?' : '&';
$curlOpts[CURLOPT_URL] .= http_build_query($params, null, '&');
}
} else {
$curlOpts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
}
if ($this->_apiKey) {
$curlOpts[CURLOPT_USERPWD] = $this->_apiKey . ':';
}
$curl = curl_init();
curl_setopt_array($curl, $curlOpts);
$responseBody = $this->_curlExec($curl);
$responseInfo = $this->_curlInfo($curl);
if ($responseBody === false) {
$responseBody = array('error' => $this->_curlError($curl));
}
curl_close($curl);
if ('application/json' === $responseInfo['content_type']) {
$responseBody = json_decode($responseBody, true);
}
return array(
'header' => array(
'status' => $responseInfo['http_code'],
'reason' => null,
),
'body' => $responseBody
);
}
/**
* Wrapps the curlExec function call
* @param cURL handle success $curl
* @return mixed
*/
protected function _curlExec($curl)
{
return curl_exec($curl);
}
/**
* Wrapps the curlInfo function call
* @param cURL handle success $curl
* @return mixed
*/
protected function _curlInfo($curl)
{
return curl_getinfo($curl);
}
/**
* Wrapps the curlError function call
* @param cURL handle success $curl
* @return mixed
*/
protected function _curlError($curl)
{
return curl_error($curl);
}
}
<?php
define('PAYMILL_API_HOST', 'https://api.paymill.de/v3/');
define('PAYMILL_API_KEY', '1b74c48cfb702d44bd5d3dab47534280');
set_include_path(implode(PATH_SEPARATOR, array(
realpath(realpath(dirname(__FILE__)) . '/paymill-php-3.0.2/lib'),
get_include_path(),
)));
$token = $_POST['paymillToken'];
if ($token) {
require 'Paymill/API/CommunicationAbstract.php';
require 'Paymill/API/Curl.php';
require 'Paymill/Models/Request/Base.php';
require 'Paymill/Models/Request/Client.php';
require 'Paymill/Models/Request/Offer.php';
require 'Paymill/Models/Request/Payment.php';
require 'Paymill/Models/Request/Preauthorization.php';
require 'Paymill/Models/Request/Refund.php';
require 'Paymill/Models/Request/Subscription.php';
require 'Paymill/Models/Request/Transaction.php';
require 'Paymill/Models/Request/Webhook.php';
require 'Paymill/Models/Response/Base.php';
require 'Paymill/Models/Response/Client.php';
require 'Paymill/Models/Response/Error.php';
require 'Paymill/Models/Response/Offer.php';
require 'Paymill/Models/Response/Payment.php';
require 'Paymill/Models/Response/Preauthorization.php';
require 'Paymill/Models/Response/Refund.php';
require 'Paymill/Models/Response/Subscription.php';
require 'Paymill/Models/Response/Transaction.php';
require 'Paymill/Models/Response/Webhook.php';
require 'Paymill/Services/PaymillException.php';
require 'Paymill/Services/ResponseHandler.php';
require 'Paymill/Request.php';
$request = new Paymill\Request(PAYMILL_API_KEY);
// $payment = new Paymill\Models\Request\Payment();
// $payment->setToken($token);
$transaction = new Paymill\Models\Request\Transaction();
$transaction->setAmount(4200) // e.g. "4200" for 42.00 EUR
->setCurrency('EUR')
->setToken($token)
->setDescription('Test Transaction');
try{
// $response = $request->create($payment);
// $paymentId = $response->getId();
$response = $request->create($transaction);
echo "Transaction: ";
print_r( $response );
}catch(PaymillException $e){
//Do something with the error informations below
// $e->getResponseCode();
// $e->getStatusCode();
// $e->getErrorMessage();
var_export( $e->getResponseCode(), true );
}
}
?>
\ No newline at end of file
......@@ -6,10 +6,18 @@ root@gera:/var/www/typo3.intern/paymill-payment-form-master# php composer.phar i
Tests und Ergebnisse
* Kreditkarten benötigen einen Betrag von über 1,50 EUR,
sonst kann es zu einem "unknown_error" kommen.
* 0 EUR: kann gezahlt werden, wird im Dash-Board gebucht
* 10.99 EUR ist OK und wird zu 10,99 EUR im Dashboard
* 10,99 EUR wird zu 10,00 EUR im Dashboard
* 10.03 * 100 wird zu 1002,9999: Workaround: Math.round( 1002,9999 )
* -1 EUR: führt zu einem PHP-Error bei ELV
* Phantasie-Währung führt zu einem PHP-Error
* Maximaler Betrag ist 21.474.836,47 EUR
\ No newline at end of file
* Maximaler Betrag ist 21.474.836,47 EUR
PHP-ERROR
* caddy/Resources/Public/JavaScript/e-payment/paymill/api/php/vendor/paymill/paymill/lib/Paymill/Services/PaymillException.php
* $message wird als array übergeben, string wird erwartet: FATAL ERROR
* PaymillException.php korrigiert
* PaymillException.orig.php ist Original-Datei
\ No newline at end of file
......@@ -6,6 +6,8 @@ root@gera:/var/www/typo3.intern/paymill-payment-form-master# php composer.phar i
Tests und Ergebnisse
* Kreditkarten benötigen einen Betrag von über 1,50 EUR,
sonst kann es zu einem "unknown_error" kommen.
* 0 EUR: kann gezahlt werden, wird im Dash-Board gebucht
* 10.99 EUR ist OK und wird zu 10,99 EUR im Dashboard