Merge pull request #6388 from beganovich/v5-611

(v5) Refactor webhooks
This commit is contained in:
David Bomba 2021-08-12 21:18:41 +10:00 committed by GitHub
commit 8dbbfce0a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 61 deletions

View File

@ -65,54 +65,6 @@ class PaymentWebhookRequest extends Request
return false;
}
/**
* Resolve possible payment in the request.
*
* @return null|\App\Models\Payment
*/
public function getPayment()
{
// For testing purposes we'll slow down the webhook processing by 2 seconds
// to make sure webhook request doesn't came before our processing.
//if (app()->environment() !== 'production') {
sleep(2);
//}
// Some gateways, like Checkout, we can dynamically pass payment hash,
// which we will resolve here and get payment information from it.
if ($this->getPaymentHash()) {
return $this->getPaymentHash()->payment;
}
// While for some gateways, we need to extract the payment source/reference from the webhook request.
// Gateways like this: Stripe
if ($this->has('api_version') && $this->has('type') && $this->has('data')) {
$src = $this->data['object']['id'];
return Payment::where('transaction_reference', $src)->firstOrFail();
}
// If none of previously done logics is correct, we'll just display
// not found page.
return false;
}
/**
* Resolve client from payment hash.
*
* @return null|\App\Models\Client|bool
*/
public function getClient()
{
$hash = $this->getPaymentHash();
if($hash) {
return Client::find($hash->data->client_id)->firstOrFail();
}
return false;
}
/**
* Resolve company from company_key parameter.
*

View File

@ -332,7 +332,7 @@ class CheckoutComPaymentDriver extends BaseDriver
}
}
public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null)
public function processWebhookRequest(PaymentWebhookRequest $request)
{
return true;
}

View File

@ -388,21 +388,23 @@ class StripePaymentDriver extends BaseDriver
return $this->payment_method->processVerification($request, $payment_method);
}
public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment)
public function processWebhookRequest(PaymentWebhookRequest $request)
{
if ($request->type == 'source.chargeable') {
$payment->status_id = Payment::STATUS_COMPLETED;
$payment->save();
if ($request->type === 'charge.succeeded' || $request->type === 'source.chargeable') {
foreach ($request->data as $transaction) {
$payment = Payment::query()
->where('transaction_reference', $transaction['id'])
->where('company_id', $request->getCompany()->id)
->first();
if ($payment) {
$payment->status_id = Payment::STATUS_COMPLETED;
$payment->save();
}
}
}
if ($request->type == 'charge.succeeded') {
$payment->status_id = Payment::STATUS_COMPLETED;
$payment->save();
}
// charge.failed, charge.refunded
return response([], 200);
return response()->json([], 200);
}
public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash)

View File

@ -168,6 +168,8 @@ class WePayPaymentDriver extends BaseDriver
$input = $request->all();
$config = $this->company_gateway->getConfig();
$accountId = $this->company_gateway->getConfigField('accountId');
foreach (array_keys($input) as $key) {