App\Ninja\PaymentDrivers\WePayPaymentDriver::handleWebHook PHP Method

handleWebHook() public method

public handleWebHook ( $input )
    public function handleWebHook($input)
    {
        $accountGateway = $this->accountGateway;
        $accountId = $accountGateway->account_id;
        foreach (array_keys($input) as $key) {
            if ('_id' == substr($key, -3)) {
                $objectType = substr($key, 0, -3);
                $objectId = $input[$key];
                break;
            }
        }
        if (!isset($objectType)) {
            throw new Exception('Could not find object id parameter');
        }
        if ($objectType == 'credit_card') {
            $paymentMethod = PaymentMethod::scope(false, $accountId)->where('source_reference', '=', $objectId)->first();
            if (!$paymentMethod) {
                throw new Exception('Unknown payment method');
            }
            $wepay = Utils::setupWePay($accountGateway);
            $source = $wepay->request('credit_card', ['client_id' => WEPAY_CLIENT_ID, 'client_secret' => WEPAY_CLIENT_SECRET, 'credit_card_id' => intval($objectId)]);
            if ($source->state == 'deleted') {
                $paymentMethod->delete();
            } else {
                //$this->paymentService->convertPaymentMethodFromWePay($source, null, $paymentMethod)->save();
            }
            return 'Processed successfully';
        } elseif ($objectType == 'account') {
            $config = $accountGateway->getConfig();
            if ($config->accountId != $objectId) {
                throw new Exception('Unknown account');
            }
            $wepay = Utils::setupWePay($accountGateway);
            $wepayAccount = $wepay->request('account', ['account_id' => intval($objectId)]);
            if ($wepayAccount->state == 'deleted') {
                $accountGateway->delete();
            } else {
                $config->state = $wepayAccount->state;
                $accountGateway->setConfig($config);
                $accountGateway->save();
            }
            return ['message' => 'Processed successfully'];
        } elseif ($objectType == 'checkout') {
            $payment = Payment::scope(false, $accountId)->where('transaction_reference', '=', $objectId)->first();
            if (!$payment) {
                throw new Exception('Unknown payment');
            }
            $wepay = Utils::setupWePay($accountGateway);
            $checkout = $wepay->request('checkout', ['checkout_id' => intval($objectId)]);
            if ($checkout->state == 'refunded') {
                $payment->recordRefund();
            } elseif (!empty($checkout->refund) && !empty($checkout->refund->amount_refunded) && $checkout->refund->amount_refunded - $payment->refunded > 0) {
                $payment->recordRefund($checkout->refund->amount_refunded - $payment->refunded);
            }
            if ($checkout->state == 'captured') {
                $payment->markComplete();
            } elseif ($checkout->state == 'cancelled') {
                $payment->markCancelled();
            } elseif ($checkout->state == 'failed') {
                $payment->markFailed();
            }
            return 'Processed successfully';
        } else {
            return 'Ignoring event';
        }
    }