Add support for transient status between making a payment and receiving the webhook #761
This commit is contained in:
parent
b1ff62d9ec
commit
2432a08c4d
1 changed files with 34 additions and 7 deletions
|
|
@ -8,7 +8,8 @@ use Catalyst\ApiBundle\Component\Response as ApiResponse;
|
|||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\VehicleManufacturer;
|
||||
use App\Entity\Vehicle;
|
||||
|
||||
use App\Ramcar\InsuranceApplicationStatus;
|
||||
use App\Service\PayMongoConnector;
|
||||
use DateTime;
|
||||
|
||||
class VehicleController extends ApiController
|
||||
|
|
@ -107,7 +108,7 @@ class VehicleController extends ApiController
|
|||
|
||||
}
|
||||
|
||||
public function getVehicle(Request $req, $id)
|
||||
public function getVehicle(Request $req, $id, PayMongoConnector $paymongo)
|
||||
{
|
||||
// check requirements
|
||||
$validity = $this->validateRequest($req);
|
||||
|
|
@ -131,7 +132,7 @@ class VehicleController extends ApiController
|
|||
|
||||
// response
|
||||
return new ApiResponse(true, '', [
|
||||
'vehicle' => $this->generateVehicleInfo($cv, true),
|
||||
'vehicle' => $this->generateVehicleInfo($cv, true, $paymongo),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -169,7 +170,7 @@ class VehicleController extends ApiController
|
|||
]);
|
||||
}
|
||||
|
||||
public function listVehicles(Request $req)
|
||||
public function listVehicles(Request $req, PayMongoConnector $paymongo)
|
||||
{
|
||||
// validate params
|
||||
$validity = $this->validateRequest($req);
|
||||
|
|
@ -190,7 +191,7 @@ class VehicleController extends ApiController
|
|||
// only get the customer's vehicles whose flag_active is true
|
||||
$cvs = $this->em->getRepository(CustomerVehicle::class)->findBy(['flag_active' => true, 'customer' => $cust]);
|
||||
foreach ($cvs as $cv) {
|
||||
$cv_list[] = $this->generateVehicleInfo($cv, true);
|
||||
$cv_list[] = $this->generateVehicleInfo($cv, true, $paymongo);
|
||||
}
|
||||
|
||||
// response
|
||||
|
|
@ -283,7 +284,7 @@ class VehicleController extends ApiController
|
|||
return new ApiResponse();
|
||||
}
|
||||
|
||||
protected function generateVehicleInfo(CustomerVehicle $cv, $include_insurance = false)
|
||||
protected function generateVehicleInfo(CustomerVehicle $cv, $include_insurance = false, PayMongoConnector $paymongo)
|
||||
{
|
||||
$battery_id = null;
|
||||
if ($cv->getCurrentBattery() != null)
|
||||
|
|
@ -325,11 +326,37 @@ class VehicleController extends ApiController
|
|||
$gt = $iobj->getGatewayTransaction();
|
||||
$date_complete = $iobj->getDateComplete();
|
||||
$date_expire = $iobj->getDateExpire();
|
||||
$status = $iobj->getStatus();
|
||||
|
||||
error_log("\r\nTHIS IS THE CURRENT STATUS: " . $status . "\r\n");
|
||||
|
||||
// handle the very transient state between a payment being made and receiving the paymongo webhook
|
||||
// TODO: maybe handle this more elegantly. issue is not sure it is a good idea to update the db for this very transient status as the webhook listener also updates this status right away
|
||||
switch ($status) {
|
||||
case InsuranceApplicationStatus::CREATED:
|
||||
// get latest status on this checkout from paymongo
|
||||
$checkout = $paymongo->getCheckout($gt->getExtTransactionId());
|
||||
|
||||
if ($checkout['success']) {
|
||||
$payment_intent = $checkout['response']['data']['attributes']['payment_intent'] ?? null;
|
||||
if (!empty($payment_intent)) {
|
||||
$intent_status = $payment_intent['attributes']['status'] ?? null;
|
||||
|
||||
// TODO: define these paymongo payment intent statuses elsewhere
|
||||
if ($intent_status === 'processing' || $intent_status === 'succeeded') {
|
||||
$status = InsuranceApplicationStatus::PAID;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
$insurance = [
|
||||
'id' => $iobj->getID(),
|
||||
'ext_transaction_id' => $iobj->getExtTransactionId(),
|
||||
'status' => $iobj->getStatus(),
|
||||
'status' => $status,
|
||||
'coc_url' => $iobj->getCOC(),
|
||||
'checkout_url' => $gt->getMetadata()['checkout_url'],
|
||||
'transaction_status' => $gt->getStatus(),
|
||||
|
|
|
|||
Loading…
Reference in a new issue