mivita/app/Http/Controllers/Api/PayoneController.php
2020-08-21 18:20:40 +02:00

149 lines
No EOL
4.8 KiB
PHP
Executable file

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Mail\MailCheckout;
use App\Models\PaymentTransaction;
use App\Models\ShoppingOrder;
use App\Models\ShoppingPayment;
use App\Services\Payment;
use App\Services\Shop;
use App\Services\Util;
use App\User;
use Illuminate\Support\Facades\Mail;
class PayoneController extends Controller
{
public function __construct()
{
}
public function paymentStatus(){
$data = \Request::all();
// test para
/* $data = [
'key' => '698fb2555f8b2efc74f60b2121421f45',
'txaction' => 'paid',
'clearingtype' => 'wlt',
'userid' => '158723953',
'txid' => '321623031',
'price' => '89.00',
'param' => '1', //$this->shopping_order->id,
'reference' => '15c83aee2766c3',
];
*/
if(!isset($data['key']) || !isset($data['param']) || !isset($data['userid']) || !isset($data['txid']) || !isset($data['reference']) || !isset($data['price'])){
\Log::channel('payone')->error('PaymentStatus: parameter incomplete: '.json_encode($data));
echo "PaymentStatus: parameter incomplete:";
var_dump($data);
die();
}
if($data['key'] != config('payone.defaults.key')) {
\Log::channel('payone')->error('PaymentStatus: Key error: '.json_encode($data));
echo "PaymentStatus: Key error:";
var_dump($data);
die();
}
$shopping_order = ShoppingOrder::find($data['param']);
if(!$shopping_order){
\Log::channel('payone')->error('PaymentStatus: ShoppingOrder not found: '.json_encode($data));
echo "PaymentStatus: ShoppingOrder not found:";
var_dump($data);
die();
}
$shopping_payment = ShoppingPayment::where('reference', $data['reference'])->first();
if(!$shopping_payment){
\Log::channel('payone')->error('PaymentStatus: ShoppingPayment not found: '.json_encode($data));
echo "PaymentStatus: ShoppingPayment not found:";
var_dump($data);
die();
}
if($shopping_payment->shopping_order_id != $shopping_order->id){
\Log::channel('payone')->error('PaymentStatus: ShoppingPayment no realation ShoppingOrder: '.json_encode($data));
echo "PaymentStatus: ShoppingPayment no realation ShoppingOrder:";
var_dump($data);
die();
}
if($data['key'] != config('payone.defaults.key')) {
\Log::channel('payone')->error('PaymentStatus: Key error: '.json_encode($data));
echo "PaymentStatus: ShoppingPayment no realation ShoppingOrder:";
var_dump($data);
die();
}
$price = number_format((round($data['price'],2) * 100), 0, '.', '');
$price_amount = number_format($shopping_payment->amount, 0, '.', '');
if($price_amount != $price){
$data['shopping_payment-amount'] = $price_amount;
$data['price-amount'] = $price;
\Log::channel('payone')->error('PaymentStatus: Price error: '.json_encode($data));
echo "PaymentStatus: Price error:";
var_dump($data);
die();
}
/* TODO -- need this?
if($shopping_payment->txaction == $data['txaction']){
\Log::channel('payone')->error('PaymentStatus: same txaction error: '.json_encode($data));
echo "PaymentStatus: same txaction:";
var_dump($data);
die();
}
*/
//create transaction
PaymentTransaction::create([
'shopping_payment_id' => $shopping_payment->id,
'request' => 'transaction',
'txid' => $data['txid'],
'userid' => $data['userid'],
'status' => 'PAYONE',
'key' => $data['key'],
'txaction' => $data['txaction'],
'transmitted_data' => Util::utf8ize($data),
'mode' => $data['mode'],
]);
$shopping_order->txaction = $data['txaction'];
$shopping_order->save();
$shopping_payment->txaction = $data['txaction'];
$shopping_payment->save();
$send_link = false;
if($data['txaction'] === 'failed'){
$shopping_order->setUserHistoryValue(['status' => 6]);
}
if($data['txaction'] === 'appointed'){
$shopping_order->setUserHistoryValue(['status' => 7]);
Shop::userOrders();
}
if($data['txaction'] === 'paid'){
$send_link = Payment::paymentStatusPaidAction($shopping_order, true);
}
$data['send_link'] = $send_link;
Payment::paymentStatusSendMail($shopping_order, $shopping_payment, $data);
print("TSOK");
exit;
}
}