payone 2
This commit is contained in:
parent
1953c97cd0
commit
d1dae9b736
9 changed files with 687 additions and 242 deletions
298
app/Http/Controllers/Pay/PayoneController.php
Normal file
298
app/Http/Controllers/Pay/PayoneController.php
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Pay;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Payone;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
|
||||
/*
|
||||
* clearingtype
|
||||
elv Debit payment
|
||||
cc Credit card
|
||||
rec Invoice
|
||||
cod Cash on delivery
|
||||
vor Prepayment
|
||||
sb Online Bank Transfer
|
||||
wlt e-wallet
|
||||
fnc Financing
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class PayoneController extends Controller
|
||||
{
|
||||
|
||||
|
||||
private $default = [];
|
||||
|
||||
private $personalData = [];
|
||||
private $deliveryData = [];
|
||||
|
||||
private $method = [];
|
||||
private $prepayment = [];
|
||||
private $onlineTransfer = [];
|
||||
private $creditCard = [];
|
||||
|
||||
private $url = [];
|
||||
|
||||
|
||||
public function __construct($payment_method = null) {
|
||||
|
||||
if($payment_method){
|
||||
|
||||
if(strpos($payment_method, '#')){
|
||||
$payment_method = explode('#', $payment_method);
|
||||
//wallet
|
||||
if($payment_method[0] == 'wlt'){
|
||||
$this->method = [
|
||||
"clearingtype" => "wlt",
|
||||
"wallettype" => $payment_method[1],
|
||||
"request" => "authorization",
|
||||
];
|
||||
}
|
||||
//Online-Überweisung
|
||||
if($payment_method[0] == 'sb'){
|
||||
$this->method = [
|
||||
"clearingtype" => "sb",
|
||||
"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",
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
$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->method, $this->prepayment, $this->url);
|
||||
// var_dump($request);
|
||||
// echo "<br><br><br>";
|
||||
$response = Payone::sendRequest($request);
|
||||
/*
|
||||
* status APPROVED / REDIRECT / ERROR / PENDING
|
||||
* */
|
||||
|
||||
//cc
|
||||
|
||||
|
||||
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'] == '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
|
||||
|
||||
//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();
|
||||
//txid
|
||||
//Payment process ID (PAYONE)
|
||||
//userid
|
||||
//Debtor ID (PAYONE)
|
||||
}
|
||||
die("error");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//set for clearingtype
|
||||
//debit payment
|
||||
/*
|
||||
* 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
|
||||
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)",
|
||||
|
||||
];
|
||||
|
||||
/*3-D Secure*/
|
||||
$this->creditCard['xid'] = "3-D Secure transaction ID";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -69,7 +69,6 @@ class CardController extends Controller
|
|||
// $ShippingCountry = ShippingCountry::where('country_id', 1)->first();
|
||||
// $selected_country = $ShippingCountry->id;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'user_shop' => Util::getUserShop(),
|
||||
];
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Web;
|
|||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Pay\PayoneController;
|
||||
use App\Models\Product;
|
||||
use Validator;
|
||||
use App\Services\Util;
|
||||
|
|
@ -27,8 +28,6 @@ class CheckoutController extends Controller
|
|||
|
||||
$user_shop = Util::getUserShop();
|
||||
|
||||
|
||||
|
||||
if(Input::get('selected_country')){
|
||||
Yard::instance('shopping')->setShippingCountryWithPrice(Input::get('selected_country'));
|
||||
}else{
|
||||
|
|
@ -43,7 +42,7 @@ class CheckoutController extends Controller
|
|||
|
||||
public function checkoutFinal(){
|
||||
|
||||
$rules = array(
|
||||
/*$rules = array(
|
||||
'billing.firstname'=>'required',
|
||||
'billing.lastname'=>'required',
|
||||
'billing.email'=>'required|email',
|
||||
|
|
@ -65,8 +64,16 @@ class CheckoutController extends Controller
|
|||
$validator = Validator::make(Input::all(), $rules);
|
||||
if ($validator->fails()) {
|
||||
return back()->withErrors($validator)->withErrors($validator)->withInput(Input::all());
|
||||
}*/
|
||||
|
||||
if(Input::get('payment_method')){
|
||||
$pay = new PayoneController(Input::get('payment_method'));
|
||||
$pay->setPrePayment([]);
|
||||
$pay->setPersonalData([]);
|
||||
$pay->ResponseData([]);
|
||||
}
|
||||
|
||||
|
||||
$data = [
|
||||
'user_shop' => Util::getUserShop(),
|
||||
];
|
||||
|
|
@ -74,6 +81,20 @@ class CheckoutController extends Controller
|
|||
}
|
||||
|
||||
|
||||
public function transactionStatus($check){
|
||||
|
||||
if($check == "cancel"){
|
||||
\Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.');
|
||||
return $this->checkout();
|
||||
}
|
||||
$pay = new PayoneController([]);
|
||||
$pay->checkStatus();
|
||||
$data = \Request::all();
|
||||
var_dump($data);
|
||||
$data = \Input::all();
|
||||
var_dump($data);
|
||||
die();
|
||||
}
|
||||
|
||||
public function removeCard($rowId){
|
||||
Yard::instance('shopping')->remove($rowId);
|
||||
|
|
|
|||
123
app/Services/Payone.php
Normal file
123
app/Services/Payone.php
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
/**
|
||||
* This class is a wrapper to be able to send arrays of Payone request
|
||||
* to the Payone platform.
|
||||
*
|
||||
* Payone Connector is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Payone Connector is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Payone Connector. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @package Simple PHP Integration
|
||||
* @link https://www.bspayone.com/
|
||||
* @copyright (C) BS PAYONE GmbH 2016, 2018
|
||||
* @author Florian Bender <florian.bender@bspayone.com>
|
||||
* @author Timo Kuchel <timo.kuchel@bspayone.com>
|
||||
* @author Hannes Reinberger <hannes.reinberger@bspayone.com>
|
||||
*/
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
|
||||
//require 'vendor/autoload.php';
|
||||
use Exception;
|
||||
use GuzzleHttp\Client;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Class Payone
|
||||
*/
|
||||
class Payone {
|
||||
|
||||
/**
|
||||
* The URL of the Payone API
|
||||
*/
|
||||
const PAYONE_SERVER_API_URL = 'https://api.pay1.de/post-gateway/';
|
||||
const PAYONE_CLIENT_API_URL = 'https://secure.pay1.de/client-api//';
|
||||
|
||||
/**
|
||||
* performing the HTTP POST request to the PAYONE platform
|
||||
*
|
||||
* @param array $request
|
||||
* @param string $responsetype
|
||||
* @throws Exception
|
||||
* @return array|\Psr\Http\Message\StreamInterface Returns an array of response
|
||||
* parameters in "classic" mode, a Stream for any other mode.
|
||||
*/
|
||||
public static function sendRequest($request, $responsetype = "")
|
||||
{
|
||||
if ($responsetype === "json") {
|
||||
// appends the accept: application/json header to the request
|
||||
// This is used to retrieve structured JSON in the response
|
||||
$client = new Client(['headers' => ['accept' => 'application/json']]);
|
||||
}
|
||||
else {
|
||||
// if $responsetype is set to anything else than "json", use the standard request
|
||||
$client = new Client();
|
||||
}
|
||||
|
||||
// echo "Requesting...";
|
||||
$begin = microtime(true);
|
||||
|
||||
if ($response = $client->request('POST', self::PAYONE_SERVER_API_URL, ['form_params' => $request])) {
|
||||
|
||||
if (implode($response->getHeader('Content-Type')) == 'text/plain; charset=UTF-8'){
|
||||
// if the content type is text/plain, parse response into array
|
||||
$return = self::parseResponse($response);
|
||||
} else {
|
||||
// if the content type is anything else, just return the response body
|
||||
$return = $response->getBody();
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new Exception('Something went wrong during the HTTP request.');
|
||||
}
|
||||
|
||||
$end = microtime(true);
|
||||
$duration = $end - $begin;
|
||||
/* echo "done.\n";
|
||||
echo "Request took " . $duration . " seconds.\n";
|
||||
echo "<br>";
|
||||
*/
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets response string an puts it into an array
|
||||
*
|
||||
* @param \Psr\Http\Message\ResponseInterface $response
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public static function parseResponse(ResponseInterface $response)
|
||||
{
|
||||
$responseArray = array();
|
||||
$explode = explode("\n", $response->getBody());
|
||||
foreach ($explode as $e) {
|
||||
$keyValue = explode("=", $e);
|
||||
if (trim($keyValue[0]) != "") {
|
||||
if (count($keyValue) == 2) {
|
||||
$responseArray[$keyValue[0]] = trim($keyValue[1]);
|
||||
} else {
|
||||
$key = $keyValue[0];
|
||||
unset($keyValue[0]);
|
||||
$value = implode("=", $keyValue);
|
||||
$responseArray[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*if ($responseArray['status'] == "ERROR") {
|
||||
$msg = "Payone returned an error:\n" . print_r($responseArray, true);
|
||||
throw new Exception($msg);
|
||||
}*/
|
||||
return $responseArray;
|
||||
}
|
||||
}
|
||||
|
|
@ -23,11 +23,18 @@ class Yard extends Cart
|
|||
if($this->getShippingExtra('shipping_price')){
|
||||
$this->shipping = floatval($this->getShippingExtra('shipping_price'));
|
||||
}
|
||||
|
||||
if($this->getShippingExtra('shipping_country_id')){
|
||||
$this->shipping_country_id = $this->getShippingExtra('shipping_country_id');
|
||||
}
|
||||
|
||||
parent::__construct($session, $events);
|
||||
|
||||
if($this->shipping == 0){
|
||||
self::instance('shopping')->setShippingCountryWithPrice($this->shipping_country_id);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function getTaxRate()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue