SEPA Payment

This commit is contained in:
Kevin Adametz 2020-01-08 19:40:16 +01:00
parent 7ef7a507c7
commit f117f79bb9
9 changed files with 286 additions and 95 deletions

View file

@ -79,10 +79,10 @@ class PayoneController extends Controller
}
//make Payone payment
public function setPrePayment($payment_method, $amount, $currency, $cc_ret = []){
public function setPrePayment($payment_method, $amount, $currency, $ret = []){
$this->reference = substr(uniqid(true), 0, 16);
$this->setMethod($payment_method, $cc_ret);
$this->setMethod($payment_method, $ret);
$this->urls = [
'successurl' => route('checkout.transaction_status', ['success', $this->reference]),
@ -138,13 +138,13 @@ class PayoneController extends Controller
}
private function setMethod($payment_method, $cc_ret = []){
private function setMethod($payment_method, $ret = []){
if($payment_method){
if(strpos($payment_method, '#')){
$payment_method = explode('#', $payment_method);
//wallet Paypal
if($payment_method[0] == 'wlt'){
if($payment_method[0] === 'wlt'){
$this->method = [
"clearingtype" => "wlt",
"wallettype" => $payment_method[1],
@ -153,7 +153,7 @@ class PayoneController extends Controller
];
}
//Online-Überweisung
if($payment_method[0] == 'sb'){
if($payment_method[0] === 'sb'){
$this->method = [
"clearingtype" => "sb",
"wallettype" => "",
@ -164,7 +164,7 @@ class PayoneController extends Controller
}
//Rechnungskauf
/* if($payment_method[0]== 'fnc'){
/* if($payment_method[0]=== 'fnc'){
$this->method = [
"clearingtype" => "fnc",
"wallettype" => "",
@ -178,7 +178,22 @@ class PayoneController extends Controller
*/
}
//vorkasse
if($payment_method == 'vor'){
if($payment_method === 'elv'){
$this->method = [
"clearingtype" => "elv",
"wallettype" => "",
'onlinebanktransfertype' => "",
"request" => "authorization",
"mandate_identification" => $ret['elv']['mandate_identification'],
"iban" => $ret['elv']['iban'],
"bic" => $ret['elv']['bic'],
"bankaccountholder" =>$ret['elv']['bankaccountholder'],
// "bankcountry" => "DE",
];
}
//vorkasse
if($payment_method === 'vor'){
$this->method = [
"clearingtype" => "vor",
"wallettype" => "",
@ -186,22 +201,19 @@ class PayoneController extends Controller
"request" => "authorization",
];
}
//CreditCard
if($payment_method == 'cc'){
if($payment_method === 'cc'){
//need the $cc_ret
$this->method = [
"clearingtype" => "cc",
"wallettype" => "",
'onlinebanktransfertype' => "",
"request" => "authorization",
"pseudocardpan" => $cc_ret['pseudocardpan']
"pseudocardpan" => $ret['cc']['pseudocardpan']
//"xid" => "3-D Secure transaction ID"
];
}
}
}
@ -209,14 +221,11 @@ class PayoneController extends Controller
$request = array_merge($this->default, $this->personalData, $this->deliveryData, $this->method, $this->prepayment, $this->urls);
$response = Payone::sendRequest($request);
/*
* status APPROVED / REDIRECT / ERROR / PENDING
*/
if($response['status'] == 'ERROR'){
if($response['status'] === 'ERROR'){
PaymentTransaction::create([
'shopping_payment_id' => $this->shopping_payment->id,
'request' => $this->method['request'],
@ -231,7 +240,7 @@ class PayoneController extends Controller
}
if($response['status'] == 'REDIRECT'){
if($response['status'] === 'REDIRECT'){
PaymentTransaction::create([
'shopping_payment_id' => $this->shopping_payment->id,
'request' => $this->method['request'],
@ -244,7 +253,7 @@ class PayoneController extends Controller
}
if($response['status'] == 'APPROVED'){
if($response['status'] === 'APPROVED'){
// header("Location: " . $response["redirecturl"]); // or other redirect method
$payt = PaymentTransaction::create([
'shopping_payment_id' => $this->shopping_payment->id,
@ -255,18 +264,25 @@ class PayoneController extends Controller
'transmitted_data' => $response,
]);
if($payt->shopping_payment->clearingtype == "vor"){
if($payt->shopping_payment->clearingtype === "vor"){
//vorkasse
return redirect(route('checkout.transaction_approved', [$payt->id, $this->reference]));
exit;
}
if($payt->shopping_payment->clearingtype == "cc"){
if($payt->shopping_payment->clearingtype === "cc"){
//creditcard
return redirect(route('checkout.transaction_approved', [$payt->id, $this->reference]));
exit;
}
if($payt->shopping_payment->clearingtype === "elv"){
//sepa
return redirect(route('checkout.transaction_approved', [$payt->id, $this->reference]));
exit;
}
var_dump($response);
die();
//txid
@ -276,7 +292,7 @@ class PayoneController extends Controller
}
if($response['status'] == 'PENDING'){
if($response['status'] === 'PENDING'){
var_dump($response);
die();
//txid
@ -308,6 +324,46 @@ class PayoneController extends Controller
}
public function checkBankAccount($data, $amount, $currency, $shopping_user)
{
$this->shopping_user = $shopping_user;
$this->setPersonalData();
$this->prepayment = [
"clearingtype" => "elv",
"amount" => $amount, // amount in smallest currency unit, i.e. cents
"currency" => $currency,
"request" => "managemandate", // create account receivable and instantly book the amount
"bankaccountholder" => $data['elv_bankaccountholder'],
"iban" => $data['elv_iban'],
"bic" => $data['elv_bic'],
// "language" => 'de',
];
$request = array_merge($this->default, $this->personalData, $this->deliveryData, $this->method, $this->prepayment, $this->urls);
// dd($request);
return Payone::sendRequest($request);
}
/* public function getPDFFile($mandateId)
{
$params['file_reference'] = $mandateId;//"XX-T0000000";
$params['file_type'] = 'SEPA_MANDATE';
$params['file_format'] = 'PDF';
$request = array_merge($this->default, $params);
return Payone::sendRequest($request);
}
*/
/* public function checkStatus(){
// again, the default values will be needed
$capture = array(
@ -327,6 +383,20 @@ class PayoneController extends Controller
//debit payment
/*
*
*
* $params['bankaccountholder'] = $paymentData['mopt_payone__debit_bankaccountholder'];
$params['iban'] = $this->removeWhitespaces($paymentData['mopt_payone__debit_iban']);
$params['bic'] = $this->removeWhitespaces($paymentData['mopt_payone__debit_bic']);
* $params['bankcountry'] = $paymentData['mopt_payone__debit_bankcountry'];
$params['bankaccount'] = $this->removeWhitespaces($paymentData['mopt_payone__debit_bankaccount']);
$params['bankcode'] = $this->removeWhitespaces($paymentData['mopt_payone__debit_bankcode']);
if (Shopware()->Session()->moptMandateData) {
$params['mandate_identification'] = Shopware()->Session()->moptMandateData['mopt_payone__mandateIdentification'];
}
*
* ["clearing_bankaccount"]=> string(10) "2599100003"
["clearing_bankcode"]=> string(8) "12345678"
["clearing_bankcountry"]=> string(2) "DE"

View file

@ -129,27 +129,26 @@ class CheckoutController extends Controller
//check credit Card
if(Input::get('payment_method')){
$cc_ret = [];
$ret = [];
//need precheck the card
if(Input::get('payment_method') == 'cc'){
if(Input::get('payment_method') === 'cc'){
$pay = new PayoneController();
$cc_ret = $pay->checkCreditCard($data);
if($cc_ret['status'] == 'ERROR' || $cc_ret['status'] == 'INVALID'){
$ret['cc'] = $pay->checkCreditCard($data);
if($ret['cc']['status'] === 'ERROR' || $ret['cc']['status'] === 'INVALID'){
/* PaymentTransaction::create([
'shopping_payment_id' => //is no shopping_payment_id at this moment,
'request' => 'creditcardcheck,
'errorcode' => $cc_ret['errorcode'],
'errormessage' => $cc_ret['errormessage'],
'customermessage' => $cc_ret['customermessage'],
'errorcode' => $ret['cc']['errorcode'],
'errormessage' => $ret['cc']['errormessage'],
'customermessage' => $ret['cc']['customermessage'],
'status' => $response['status'],
]);*/
\Session::flash('cc-error', 1);
\Session::flash('errormessage', $cc_ret['errormessage']);
\Session::flash('customermessage', $cc_ret['customermessage']);
\Session::flash('errormessage', $ret['cc']['errormessage']);
\Session::flash('customermessage', $ret['cc']['customermessage']);
return redirect(route('checkout.checkout_card'))->withInput(Input::all());
exit;
}
if($cc_ret['status'] == 'VALID'){
if($ret['cc']['status'] === 'VALID'){
/*
* array(4) { ["status"]=> string(5) "VALID" ["pseudocardpan"]=> string(19) "9410010000169020567" ["cardtype"]=> string(1) "V" ["truncatedcardpan"]=> string(16) "411111XXXXXX1111" }
* application through http post
@ -158,11 +157,56 @@ class CheckoutController extends Controller
}
}
//need precheck the card
if(Input::get('payment_method') === 'elv' && is_null(Input::get('mandate_identification'))){
$pay = new PayoneController();
$amount = (int) (float) Yard::instance('shopping')->totalWithShipping(2, '.', ',') *100;
$ret['elv'] = $pay->checkBankAccount($data, $amount, 'EUR', $shopping_user);
if($ret['elv']['status'] === 'ERROR' || $ret['elv']['status'] === 'INVALID'){
/* PaymentTransaction::create([
'shopping_payment_id' => //is no shopping_payment_id at this moment,
'request' => 'creditcardcheck,
'errorcode' => $ret['cc']['errorcode'],
'errormessage' => $ret['cc']['errormessage'],
'customermessage' => $ret['cc']['customermessage'],
'status' => $response['status'],
]);*/
\Session::flash('elv-error', 1);
\Session::flash('errormessage', $ret['elv']['errormessage']);
\Session::flash('customermessage', $ret['elv']['customermessage']);
return redirect(route('checkout.checkout_card'))->withInput(Input::all());
}
if($ret['elv']['status'] === 'APPROVED' && $ret['elv']['mandate_status'] !== "active"){
dd($ret);
\Session::flash('elv-managemandate', 1);
\Session::flash('elv-mandate_identification', $ret['elv']['mandate_identification']);
\Session::flash('elv-mandate_text', $ret['elv']['mandate_text']);
\Session::flash('elv-creditor_identifier', $ret['elv']['creditor_identifier']);
return redirect(route('checkout.checkout_card'))->withInput(Input::all());
/*
* array(4) { ["status"]=> string(5) "VALID" ["pseudocardpan"]=> string(19) "9410010000169020567" ["cardtype"]=> string(1) "V" ["truncatedcardpan"]=> string(16) "411111XXXXXX1111" }
* application through http post
* get this to the prepayment
* */
}
$ret['elv']['bankaccountholder'] = $data['elv_bankaccountholder'];
}
if(Input::get('payment_method') === 'elv' && Input::get('mandate_identification')) {
$ret['elv']['mandate_identification'] = Input::get('mandate_identification');
$ret['elv']['creditor_identifier'] = Input::get('creditor_identifier');
$ret['elv']['iban'] = $data['iban'];
$ret['elv']['bic'] = $data['elv_bic'];
$ret['elv']['bankaccountholder'] = $data['elv_bankaccountholder'];
}
//other
$pay = new PayoneController();
$pay->init($shopping_user, $shopping_order);
$amount = intval(floatval(Yard::instance('shopping')->totalWithShipping(2, '.', ',')) *100);
$reference = $pay->setPrePayment(Input::get('payment_method'), $amount, 'EUR', $cc_ret);
$amount = (int) (float) Yard::instance('shopping')->totalWithShipping(2, '.', ',') *100;
$reference = $pay->setPrePayment(Input::get('payment_method'), $amount, 'EUR', $ret);
$this->putPayments('payment_reference', $reference);
$pay->setPersonalData();
return $pay->ResponseData();
@ -185,7 +229,7 @@ class CheckoutController extends Controller
$ShoppingPayment->status = $status;
$ShoppingPayment->save();
if($status == "success"){
if($status === "success"){
Yard::instance('shopping')->destroy();
$this->destroy();
@ -199,12 +243,12 @@ class CheckoutController extends Controller
];
return view('web.templates.checkout-final', $data);
}
if($status == "cancel"){
if($status === "cancel"){
\Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.');
return redirect(route('checkout.checkout_card'));
}
if($status == "error"){
if($status === "error"){
\Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.');
return redirect(route('checkout.checkout_card'));