payment Card first 4 payments inc. mails
This commit is contained in:
parent
c20deac3fe
commit
6e3adac4d7
38 changed files with 3063 additions and 921 deletions
|
|
@ -1,12 +1,5 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Pay;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Payone;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
|
||||
/*
|
||||
* clearingtype
|
||||
elv Debit payment
|
||||
|
|
@ -18,8 +11,27 @@ sb Online Bank Transfer
|
|||
wlt e-wallet
|
||||
fnc Financing
|
||||
*/
|
||||
/*private $payment_methods= [
|
||||
'wlt#PPE' => 'PayPal',
|
||||
'cc' => 'CreditCard',
|
||||
'sb#GPY' => 'giropay',
|
||||
'sb#PNT' => 'Sofort',
|
||||
'wlt#PDT' => 'paydirekt',
|
||||
'fnc' => 'Rechnungskauf',
|
||||
'pref' => 'Vorauskasse',
|
||||
];*/
|
||||
|
||||
|
||||
namespace App\Http\Controllers\Pay;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PaymentTransaction;
|
||||
use App\Models\ShoppingPayment;
|
||||
use App\Services\Payone;
|
||||
use Illuminate\Http\Request;
|
||||
use Util;
|
||||
use Yard;
|
||||
|
||||
|
||||
class PayoneController extends Controller
|
||||
{
|
||||
|
|
@ -30,210 +42,264 @@ class PayoneController extends Controller
|
|||
const REFUND = 'refund';
|
||||
const DEBIT = 'debit';
|
||||
|
||||
|
||||
private $default = [];
|
||||
|
||||
private $personalData = [];
|
||||
private $deliveryData = [];
|
||||
|
||||
private $method = [];
|
||||
private $prepayment = [];
|
||||
private $onlineTransfer = [];
|
||||
private $creditCard = [];
|
||||
|
||||
private $url = [];
|
||||
/* private $onlineTransfer = [];
|
||||
private $creditCard = []; */
|
||||
private $deliveryData = [];
|
||||
|
||||
|
||||
// private $payment_method;
|
||||
private $urls = [];
|
||||
|
||||
private $shopping_user;
|
||||
private $shopping_order;
|
||||
private $shopping_payment;
|
||||
|
||||
private $reference;
|
||||
|
||||
public function __construct() {
|
||||
|
||||
$this->default = \Config::get('payone.defaults');
|
||||
}
|
||||
|
||||
|
||||
public function init($shopping_user, $shopping_order){
|
||||
$this->shopping_user = $shopping_user;
|
||||
$this->shopping_order = $shopping_order;
|
||||
}
|
||||
|
||||
public function getShoppingPayment(){
|
||||
return $this->shopping_payment;
|
||||
}
|
||||
|
||||
//make Payone payment
|
||||
public function setPrePayment($payment_method, $amount, $currency, $cc_ret = []){
|
||||
|
||||
$this->reference = substr(uniqid(true), 0, 16);
|
||||
$this->setMethod($payment_method, $cc_ret);
|
||||
|
||||
$this->urls = [
|
||||
'successurl' => route('checkout.transaction_status', ['success', $this->reference]),
|
||||
'errorurl' => route('checkout.transaction_status', ['error', $this->reference]),
|
||||
'backurl' => route('checkout.transaction_status', ['cancel', $this->reference]),
|
||||
];
|
||||
|
||||
$this->prepayment = [
|
||||
"reference" => $this->reference, // a unique reference, e.g. order number
|
||||
"amount" => $amount, // amount in smallest currency unit, i.e. cents
|
||||
"currency" => $currency,
|
||||
"param" => $this->shopping_order->id,
|
||||
|
||||
];
|
||||
|
||||
$this->shopping_payment = ShoppingPayment::create([
|
||||
'shopping_order_id' => $this->shopping_order->id,
|
||||
'clearingtype' => $this->method["clearingtype"],
|
||||
'wallettype' => $this->method["wallettype"],
|
||||
'onlinebanktransfertype' => $this->method["onlinebanktransfertype"],
|
||||
'reference' => $this->reference,
|
||||
'amount' => $amount,
|
||||
'currency' => $currency,
|
||||
]);
|
||||
|
||||
return $this->reference;
|
||||
}
|
||||
|
||||
public function setPersonalData($data){
|
||||
|
||||
$this->personalData = [
|
||||
// "salutation" => "Mr.",
|
||||
// "firstname" => "Henry",
|
||||
"lastname" => "Player", // mandatory
|
||||
// "street" => "Royal Street 1",
|
||||
// "zip" => "24118",
|
||||
// "city" => "Kiel",
|
||||
"country" => "DE", // mandatory
|
||||
//"email" => " info-buyer@mivita.care",
|
||||
"language" => "de"
|
||||
];
|
||||
|
||||
|
||||
/* $this->personalData = array(
|
||||
"salutation" => "Herr",
|
||||
"title" => "Dr.",
|
||||
"firstname" => "Paul",
|
||||
"lastname" => "Neverpayer",
|
||||
"street" => "Fraunhoferstraße 2-4",
|
||||
"addressaddition" => "EG",
|
||||
"zip" => "24118",
|
||||
"city" => "Kiel",
|
||||
"country" => "DE",
|
||||
"email" => "paul.neverpayer@payone.de",
|
||||
"telephonenumber" => "043125968500",
|
||||
"birthday" => "19700204",
|
||||
"language" => "de",
|
||||
"gender" => "m",
|
||||
"ip" => "8.8.8.8"
|
||||
);
|
||||
*/
|
||||
|
||||
/**
|
||||
* Paydirekt requires both, personal data and shipping data
|
||||
*/
|
||||
/* $this->deliveryData = array(
|
||||
"shipping_firstname" => "Paul",
|
||||
"shipping_lastname" => "Neverpayer",
|
||||
"shipping_street" => "Hamburger Allee 26-28",
|
||||
"shipping_zip" => "60486",
|
||||
"shipping_city" => "Frankfurt am Main",
|
||||
"shipping_country" => "DE"
|
||||
);*/
|
||||
|
||||
|
||||
|
||||
public function __construct($payment_method = null) {
|
||||
|
||||
}
|
||||
|
||||
private function setMethod($payment_method, $cc_ret = []){
|
||||
|
||||
if($payment_method){
|
||||
|
||||
if(strpos($payment_method, '#')){
|
||||
$payment_method = explode('#', $payment_method);
|
||||
//wallet
|
||||
//wallet Paypal
|
||||
if($payment_method[0] == 'wlt'){
|
||||
$this->method = [
|
||||
"clearingtype" => "wlt",
|
||||
"wallettype" => $payment_method[1],
|
||||
"request" => "authorization",
|
||||
'onlinebanktransfertype' => "",
|
||||
"request" => "authorization"
|
||||
];
|
||||
}
|
||||
//Online-Überweisung
|
||||
if($payment_method[0] == 'sb'){
|
||||
$this->method = [
|
||||
"clearingtype" => "sb",
|
||||
"wallettype" => "",
|
||||
"onlinebanktransfertype" => $payment_method[1], // this is the type for Sofort.com
|
||||
"bankcountry" => "DE", // we need to know the country of the customer's bank, i.e. of the invoice address
|
||||
"request" => "authorization",
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
//Rechnungskauf
|
||||
/* if($payment_method[0]== 'fnc'){
|
||||
$this->method = [
|
||||
"clearingtype" => "fnc",
|
||||
"wallettype" => "",
|
||||
'onlinebanktransfertype' => "",
|
||||
"financingtype" => "PYV",
|
||||
"request" => "genericpayment",
|
||||
"add_paydata[action]" => "pre_check",
|
||||
"add_paydata[payment_type]" => "Payolution-Invoicing",
|
||||
];
|
||||
}
|
||||
*/
|
||||
}
|
||||
//vorkasse
|
||||
if($payment_method == 'vor'){
|
||||
$this->method = [
|
||||
"clearingtype" => "vor",
|
||||
"wallettype" => "",
|
||||
'onlinebanktransfertype' => "",
|
||||
"request" => "preauthorization",
|
||||
];
|
||||
}
|
||||
//CreditCard
|
||||
if($payment_method == 'cc'){
|
||||
//need the $cc_ret
|
||||
$this->method = [
|
||||
"clearingtype" => "cc",
|
||||
"wallettype" => "",
|
||||
'onlinebanktransfertype' => "",
|
||||
"request" => "authorization",
|
||||
"pseudocardpan" => $cc_ret['pseudocardpan']
|
||||
//"xid" => "3-D Secure transaction ID"
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
$this->default = \Config::get('payone.defaults');
|
||||
$this->url['successurl'] = route('checkout.transaction_status', ['success']);
|
||||
$this->url['errorurl'] = route('checkout.transaction_status', ['error']);
|
||||
$this->url['backurl'] = route('checkout.transaction_status', ['cancel']);
|
||||
|
||||
}
|
||||
|
||||
//make Payone payment
|
||||
|
||||
public function setPrePayment($data){
|
||||
|
||||
/* $this->prepayment = [
|
||||
"clearingtype" => "sb", // sb means online bank transfer
|
||||
"reference" => time(), // a unique reference, e.g. order number
|
||||
"amount" => "10000", // amount in smallest currency unit, i.e. cents
|
||||
"currency" => "EUR",
|
||||
"request" => "preauthorization", // create account receivable and instantly book the amount
|
||||
"onlinebanktransfertype" => "PNT", // this is the type for Sofort.com
|
||||
"bankcountry" => "DE", // we need to know the country of the customer's bank, i.e. of the invoice add
|
||||
//"request" => "preauthorization" // create account receivable
|
||||
];*/
|
||||
|
||||
$this->prepayment = [
|
||||
"reference" => time(), // a unique reference, e.g. order number
|
||||
"amount" => "10000", // amount in smallest currency unit, i.e. cents
|
||||
"currency" => "EUR",
|
||||
|
||||
|
||||
/* "clearingtype" => "wlt", // sb means online bank transfer
|
||||
"wallettype" => "PPE",
|
||||
"request" => "authorization",
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* "request" => "preauthorization",
|
||||
"cardpan" => "4301111100070203",
|
||||
"cardexpiredate" => "2105",
|
||||
"cardtype" => "V",
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
//"pseudocardpan" => "9410009000000005606",
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function creditCardCheck($data){
|
||||
|
||||
$this->prepayment = [
|
||||
"request" => "creditcardcheck", // create account receivable and instantly book the amount
|
||||
"cardpan" => "4111111111111111",
|
||||
"cardexpiredate" => "2105",
|
||||
"cardtype" => "V",
|
||||
"cardcvc2" => "123",
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public function setPersonalData($data){
|
||||
|
||||
$this->personalData = [
|
||||
// "salutation" => "Mr.",
|
||||
// "firstname" => "Henry",
|
||||
"lastname" => "Payer", // mandatory
|
||||
// "street" => "Royal Street 1",
|
||||
// "zip" => "24118",
|
||||
// "city" => "Kiel",
|
||||
"country" => "DE", // mandatory
|
||||
// "email" => "henry.viii@tudor.gov.uk",
|
||||
"language" => "de"
|
||||
];
|
||||
}
|
||||
|
||||
public function setDeliverylData($data){
|
||||
$this->deliveryData = [
|
||||
"shipping_company" => "Mr.",
|
||||
"shipping_firstname" => "Henry",
|
||||
"shipping_lastname" => "Tudor",
|
||||
"shipping_street" => "Royal Street 1",
|
||||
"shipping_zip" => "24118",
|
||||
"shipping_city" => "Kiel",
|
||||
"shipping_country" => "DE",
|
||||
];
|
||||
}
|
||||
|
||||
public function checkStatus(){
|
||||
// again, the default values will be needed
|
||||
$capture = array(
|
||||
"request" => "capture",
|
||||
"txid" => "your_txid",
|
||||
"sequencenumber" => "previous_sequencenumber_plus_one", // get this from the last received transactionsstatus
|
||||
"amount" => "your_amount", // you can either capture the full amount of the tx, or less
|
||||
"currency" => "EUR"
|
||||
);
|
||||
$request = array_merge($this->default, $capture);
|
||||
$response = Payone::sendRequest($request);
|
||||
|
||||
}
|
||||
|
||||
public function ResponseData(){
|
||||
|
||||
|
||||
$request = array_merge($this->default, $this->personalData, $this->deliveryData, $this->method, $this->prepayment, $this->urls);
|
||||
|
||||
|
||||
|
||||
$request = array_merge($this->default, $this->personalData, $this->method, $this->prepayment, $this->url);
|
||||
// var_dump($request);
|
||||
// echo "<br><br><br>";
|
||||
$response = Payone::sendRequest($request);
|
||||
/*
|
||||
* status APPROVED / REDIRECT / ERROR / PENDING
|
||||
* */
|
||||
|
||||
//cc
|
||||
|
||||
var_dump($response);
|
||||
die();
|
||||
if ($response["status"] == "REDIRECT") { // this happens when the card needs a 3d secure verification
|
||||
header("Location: " . $response["redirecturl"]); // or other redirect method
|
||||
} elseif ($response["status"] == "APPROVED") { // no 3d secure verification required, transaction went through
|
||||
echo "Thank you for your purchase.";
|
||||
var_dump($response);
|
||||
die();
|
||||
} else {
|
||||
echo "There has been an error processing your request.";
|
||||
var_dump($response);
|
||||
die();
|
||||
*/
|
||||
if($response['status'] == 'ERROR'){
|
||||
PaymentTransaction::create([
|
||||
'shopping_payment_id' => $this->shopping_payment->id,
|
||||
'request' => $this->method['request'],
|
||||
'errorcode' => $response['errorcode'],
|
||||
'errormessage' => $response['errormessage'],
|
||||
'customermessage' => $response['customermessage'],
|
||||
'status' => $response['status'],
|
||||
]);
|
||||
\Session::flash('errormessage', $response['errormessage']);
|
||||
\Session::flash('customermessage', $response['customermessage']);
|
||||
return redirect(route('checkout.checkout_card'));
|
||||
}
|
||||
|
||||
|
||||
if($response['status'] == 'REDIRECT'){
|
||||
PaymentTransaction::create([
|
||||
'shopping_payment_id' => $this->shopping_payment->id,
|
||||
'request' => $this->method['request'],
|
||||
'txid' => $response['txid'],
|
||||
'userid' => $response['userid'],
|
||||
'status' => $response['status'],
|
||||
]);
|
||||
return redirect()->away($response["redirecturl"]);
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
if($response['status'] == 'APPROVED'){
|
||||
// header("Location: " . $response["redirecturl"]); // or other redirect method
|
||||
var_dump($response);
|
||||
die();
|
||||
//txid
|
||||
//Payment process ID (PAYONE)
|
||||
//userid
|
||||
//Debtor ID (PAYONE)
|
||||
}
|
||||
if($response['status'] == 'REDIRECT'){
|
||||
header("Location: " . $response["redirecturl"]); // or other redirect method
|
||||
$payt = PaymentTransaction::create([
|
||||
'shopping_payment_id' => $this->shopping_payment->id,
|
||||
'request' => $this->method['request'],
|
||||
'txid' => $response['txid'],
|
||||
'userid' => $response['userid'],
|
||||
'status' => $response['status'],
|
||||
'transmitted_data' => $response,
|
||||
]);
|
||||
|
||||
if($payt->shopping_payment->clearingtype == "vor"){
|
||||
//vorkasse
|
||||
return redirect(route('checkout.transaction_approved', [$payt->id, $this->reference]));
|
||||
exit;
|
||||
}
|
||||
|
||||
if($payt->shopping_payment->clearingtype == "cc"){
|
||||
//creditcard
|
||||
return redirect(route('checkout.transaction_approved', [$payt->id, $this->reference]));
|
||||
exit;
|
||||
}
|
||||
|
||||
var_dump($response);
|
||||
die();
|
||||
//txid
|
||||
//Payment process ID (PAYONE)
|
||||
//userid
|
||||
//Debtor ID (PAYONE)
|
||||
//redirecturl
|
||||
//Redirect URL
|
||||
}
|
||||
if($response['status'] == 'ERROR'){
|
||||
var_dump($response);
|
||||
die();
|
||||
//errorcode
|
||||
//Error number
|
||||
//errormessage
|
||||
//Error message for the merchant
|
||||
//customermessage
|
||||
// Error message for the end customer
|
||||
}
|
||||
|
||||
|
||||
if($response['status'] == 'PENDING'){
|
||||
var_dump($response);
|
||||
die();
|
||||
|
|
@ -248,54 +314,92 @@ class PayoneController extends Controller
|
|||
|
||||
|
||||
|
||||
public function checkCreditCard($data)
|
||||
{
|
||||
$this->prepayment = [
|
||||
"request" => "creditcardcheck", // create account receivable and instantly book the amount
|
||||
"cardholder" => $data['cc_cardholder_first']." ".$data['cc_cardholder_last'],
|
||||
"cardpan" => $data['cc_cardpan'],
|
||||
"cardexpiredate" => substr($data['cc_cardexpireyear'], -2) . $data['cc_cardexpiremonth'],
|
||||
"cardtype" => $data['cc_cardtype'],
|
||||
"cardcvc2" => $data['cc_cardcvc2'],
|
||||
"storecarddata" => 'yes',
|
||||
"language" => 'de',
|
||||
];
|
||||
$request = array_merge($this->default, $this->prepayment);
|
||||
$response = Payone::sendRequest($request);
|
||||
return $response;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* public function checkStatus(){
|
||||
// again, the default values will be needed
|
||||
$capture = array(
|
||||
"request" => "capture",
|
||||
"txid" => "your_txid",
|
||||
"sequencenumber" => "previous_sequencenumber_plus_one", // get this from the last received transactionsstatus
|
||||
"amount" => "your_amount", // you can either capture the full amount of the tx, or less
|
||||
"currency" => "EUR"
|
||||
);
|
||||
$request = array_merge($this->default, $capture);
|
||||
$response = Payone::sendRequest($request);
|
||||
|
||||
} */
|
||||
|
||||
|
||||
//set for clearingtype
|
||||
//debit payment
|
||||
/*
|
||||
*
|
||||
* ["clearing_bankaccount"]=> string(10) "2599100003"
|
||||
["clearing_bankcode"]=> string(8) "12345678"
|
||||
["clearing_bankcountry"]=> string(2) "DE"
|
||||
["clearing_bankname"]=> string(8) "Testbank"
|
||||
["clearing_bankaccountholder"]=> string(11) "Test Nutzer"
|
||||
["clearing_bankcity"]=> string(4) "Kiel"
|
||||
["clearing_bankiban"]=> string(22) "DE00123456782599100003"
|
||||
["clearing_bankbic"]=> string(8) "TESTTEST" }
|
||||
*/
|
||||
/*
|
||||
* PNT Sofortbanking (DE, AT, CH, NL)
|
||||
GPY giropay (DE)
|
||||
EPS eps – online transfer (AT)
|
||||
PFF PostFinance E-Finance (CH)
|
||||
PFC PostFinance Card (CH)
|
||||
IDL iDEAL (NL)
|
||||
P24 Przelewy24 (PL)
|
||||
BCT Bancontact*/
|
||||
/*
|
||||
* iban
|
||||
* bic
|
||||
* bankcountry*/
|
||||
public function setOnlineTransfer($data){
|
||||
/*
|
||||
* PNT Sofortbanking (DE, AT, CH, NL)
|
||||
GPY giropay (DE)
|
||||
EPS eps – online transfer (AT)
|
||||
PFF PostFinance E-Finance (CH)
|
||||
PFC PostFinance Card (CH)
|
||||
IDL iDEAL (NL)
|
||||
P24 Przelewy24 (PL)
|
||||
BCT Bancontact*/
|
||||
$this->onlineTransfer = [
|
||||
"onlinebanktransfertype" => "PNT",
|
||||
"bankcountry" => "DE",
|
||||
// "iban" => "",
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function setCreditCard(){
|
||||
/*
|
||||
* Card type
|
||||
/* * Card type
|
||||
V Visa
|
||||
M MasterCard
|
||||
A American Express
|
||||
D Diners / Discover
|
||||
J JCB
|
||||
O Maestro International
|
||||
*/
|
||||
$this->creditCard = [
|
||||
"cardpan" => "number",
|
||||
"cardtype" => "V",
|
||||
"cardexpiredate" => "YYMM",
|
||||
// "cardcvc2" => "Credit verification number (CVC)",
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public function setDeliverylData($data){
|
||||
$this->deliveryData = [
|
||||
"shipping_company" => "Mr.",
|
||||
"shipping_firstname" => "Henry",
|
||||
"shipping_lastname" => "Tudor",
|
||||
"shipping_street" => "Royal Street 1",
|
||||
"shipping_zip" => "24118",
|
||||
"shipping_city" => "Kiel",
|
||||
"shipping_country" => "DE",
|
||||
];
|
||||
|
||||
/*3-D Secure*/
|
||||
$this->creditCard['xid'] = "3-D Secure transaction ID";
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue