fix: improve insurance payment
This commit is contained in:
parent
8218c8053b
commit
21cf029a13
|
@ -10,4 +10,3 @@ Homestead.yaml
|
||||||
/public/insurances-subscriptions-docs
|
/public/insurances-subscriptions-docs
|
||||||
/public/qrcodes
|
/public/qrcodes
|
||||||
/public/invoices-docs
|
/public/invoices-docs
|
||||||
composer.lock
|
|
||||||
|
|
|
@ -24,10 +24,12 @@ use App\Models\PaymentAggregator;
|
||||||
use App\Models\PaymentTransaction;
|
use App\Models\PaymentTransaction;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\Wallet;
|
use App\Models\Wallet;
|
||||||
|
use App\Models\WalletIlinkTransaction;
|
||||||
use App\Rules\PasswordValidation;
|
use App\Rules\PasswordValidation;
|
||||||
use App\Traits\Helper;
|
use App\Traits\Helper;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use Exception;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
@ -252,10 +254,10 @@ class InsuranceInvoiceController extends Controller
|
||||||
$this->validate($request, [
|
$this->validate($request, [
|
||||||
'password' => 'required|string',
|
'password' => 'required|string',
|
||||||
'amount' => 'required|numeric|min:0',
|
'amount' => 'required|numeric|min:0',
|
||||||
'payment_method' => 'required|string',
|
'payment_method' => 'required|string|in:CARD,MOBILE_MONEY,WALLET',
|
||||||
'payment_phone' => 'required_unless:payment_method,wallet|string',
|
'payment_phone' => 'required_unless:payment_method,WALLET|string',
|
||||||
'payment_transaction_id' => 'nullable|exists:payment_transactions,transaction_id', // A envoyer apres avoir effectuer le paiement
|
'payment_transaction_id' => 'nullable|exists:payment_transactions,transaction_id', // A envoyer apres avoir effectuer le paiement
|
||||||
'payment_token' => 'required_with:payment_transaction_id|string', // A envoyer apres avoir effectuer le paiement
|
// 'payment_token' => 'required_with:payment_transaction_id|string', // A envoyer apres avoir effectuer le paiement
|
||||||
'otp' => 'nullable|string'
|
'otp' => 'nullable|string'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -298,22 +300,44 @@ class InsuranceInvoiceController extends Controller
|
||||||
return $this->errorResponse(trans('errors.minimum amount_to_paid', ['amount' => $this->toMoneyWithCurrencyCode($invoice->amount_per_split, $currency)]));
|
return $this->errorResponse(trans('errors.minimum amount_to_paid', ['amount' => $this->toMoneyWithCurrencyCode($invoice->amount_per_split, $currency)]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($transaction_id)) {
|
|
||||||
|
|
||||||
if ($payment_method == 'wallet') {
|
if ($payment_method == 'WALLET') {
|
||||||
if ($user->wallet->balance < $amountToPaid) {
|
if ($user->wallet->balance < $amountToPaid) {
|
||||||
$remains_amount = $amountToPaid - $user->wallet->balance;
|
$remains_amount = $amountToPaid - $user->wallet->balance;
|
||||||
return $this->errorResponse(trans('errors.insufficient_balance', ['amount' => $this->toMoneyWithCurrencyCode($remains_amount, $currency)]));
|
return $this->errorResponse(trans('errors.insufficient_balance', ['amount' => $this->toMoneyWithCurrencyCode($remains_amount, $currency)]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$aggregator = PaymentAggregator::where('status', 1)->first();
|
|
||||||
if (!$aggregator) {
|
$result = $this->handlePayIn([
|
||||||
return $this->errorResponse(trans('errors.payment_not_available'));
|
// 'card_no' => $user->numero_carte,
|
||||||
}
|
// 'exp_month' => date("m", strtotime($user->expiration_date)),
|
||||||
|
// 'exp_year' => date("Y", strtotime($user->expiration_date)),
|
||||||
|
// 'cvc' => $request->input('cvv'),
|
||||||
|
'amount' => $amountToPaid,
|
||||||
|
'currency' => $user->network->country->currency_code,
|
||||||
|
'customer_id' => $user->id,
|
||||||
|
'customer_email' => $user->email,
|
||||||
|
'customer_name' => $user->lastname,
|
||||||
|
'customer_surname' => $user->lastname,
|
||||||
|
'customer_phone_number' => $user->phone,
|
||||||
|
'customer_address' => $user->adresse,
|
||||||
|
'customer_country' => $user->network->country->code_country,
|
||||||
|
'customer_city' => $user->adresse,
|
||||||
|
'customer_state' => $user->network->country->code_country,
|
||||||
|
'customer_zip_code' => '00237',
|
||||||
|
'payment_method' => $request->input('payment_method'),
|
||||||
|
'reason' => trans('messages.insurance_invoice'),
|
||||||
|
], $transaction_id);
|
||||||
|
|
||||||
|
if (!is_string($result)) {
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
$transaction_id = $result;
|
||||||
$transaction = PaymentTransaction::where('transaction_id', $transaction_id)->where('payment_token', $request->input('payment_token'))->where('state', 'ACCEPTED')->first();
|
}
|
||||||
|
|
||||||
|
if (!empty($transaction_id)) {
|
||||||
|
$transaction = PaymentTransaction::where('transaction_id', $transaction_id)->where('state', 'ACCEPTED')->first();
|
||||||
if (!$transaction) {
|
if (!$transaction) {
|
||||||
return $this->errorResponse(trans('errors.payment_not_found'), 404);
|
return $this->errorResponse(trans('errors.payment_not_found'), 404);
|
||||||
}
|
}
|
||||||
|
@ -339,46 +363,6 @@ class InsuranceInvoiceController extends Controller
|
||||||
if ($payment_method == 'wallet') {
|
if ($payment_method == 'wallet') {
|
||||||
$user->wallet->balance -= $amountToPaid;
|
$user->wallet->balance -= $amountToPaid;
|
||||||
$user->wallet->save();
|
$user->wallet->save();
|
||||||
} else {
|
|
||||||
|
|
||||||
// Pay through payment service
|
|
||||||
$client = new Client([
|
|
||||||
'base_uri' => config('variable.payment_service_url'),
|
|
||||||
'headers' => [
|
|
||||||
'Authorization' => config('variable.payment_service_key'),
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
|
|
||||||
$paymentResponse = $client->post('/pay', [
|
|
||||||
'json' => [
|
|
||||||
'aggregator_id' => $aggregator->id,
|
|
||||||
'amount' => $amountToPaid,
|
|
||||||
'currency' => $user->network->country->currency_code,
|
|
||||||
'customer_id' => $user->id,
|
|
||||||
'customer_email' => $user->email,
|
|
||||||
'customer_name' => $user->lastname,
|
|
||||||
'customer_surname' => $user->lastname,
|
|
||||||
'customer_phone_number' => $request->input('payment_phone'),
|
|
||||||
'customer_address' => $user->adresse,
|
|
||||||
'customer_country' => $user->network->country->code_country,
|
|
||||||
'customer_city' => $user->adresse,
|
|
||||||
'customer_state' => $user->network->country->code_country,
|
|
||||||
'customer_zip_code' => '00237',
|
|
||||||
'payment_method' => $request->input('payment_method'),
|
|
||||||
'reason' => trans('messages.insurance_invoice'),
|
|
||||||
'otp' => $request->input('otp')
|
|
||||||
],
|
|
||||||
'http_errors' => false
|
|
||||||
]);
|
|
||||||
|
|
||||||
$responseData = json_decode($paymentResponse->getBody()->getContents());
|
|
||||||
$responseCode = $paymentResponse->getStatusCode();
|
|
||||||
if ($responseCode == 200) {
|
|
||||||
// $transaction_id = $responseData->response->transaction_id;
|
|
||||||
return $this->successResponse($responseData->response);
|
|
||||||
} else {
|
|
||||||
return $this->errorResponse($responseData->error ?? trans('errors.unexpected_error'), $responseCode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,6 +454,47 @@ class InsuranceInvoiceController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private function handlePayIn($data, $payment_transaction_id = null)
|
||||||
|
{
|
||||||
|
// Pay through payment service
|
||||||
|
$client = new Client([
|
||||||
|
'base_uri' => config('variable.payment_service_url'),
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => config('variable.payment_service_key'),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// PayIn through payment service
|
||||||
|
if (empty($payment_transaction_id)) {
|
||||||
|
// PayIn through payment service
|
||||||
|
$response = $client->post('/pay', ['json' => $data, 'http_errors' => false]);
|
||||||
|
} else {
|
||||||
|
// Check payment status through payment service
|
||||||
|
if (NhInsurancesPayment::where('payment_id', $payment_transaction_id)->exists()) {
|
||||||
|
throw new Exception(__('errors.transaction_already_completed'), 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $client->get('/checkStatus/' . $payment_transaction_id, ['http_errors' => false]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$code = $response->getStatusCode();
|
||||||
|
$content = json_decode($response->getBody()->getContents(), true);
|
||||||
|
if ($code == 301) {
|
||||||
|
return $this->successResponse($content["response"], $content['status']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($code == 200) {
|
||||||
|
$response = $content["response"];
|
||||||
|
return $response["transaction_id"];
|
||||||
|
} else {
|
||||||
|
throw new Exception($content['error'] ?? __('errors.visa_api_failed'), $content['status'] ?? 500);
|
||||||
|
// return $this->errorResponse($responseData->error ?? trans('errors.unexpected_error'), $responseCode);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
// public function generateInvoices()
|
// public function generateInvoices()
|
||||||
// {
|
// {
|
||||||
// try {
|
// try {
|
||||||
|
|
Loading…
Reference in New Issue