/** * Paypal subscription ipn handler. */ public function subscribe() { try { \DB::beginTransaction(); $listener = new Listener(); $verifier = new CurlVerifier(); $ipn = \Input::all(); $ipnMessage = new Message($ipn); $verifier->setIpnMessage($ipnMessage); $verifier->setEnvironment(\Config::get('paxifi.paypal.environment')); $listener->setVerifier($verifier); $listener->listen(function () use($listener, $ipn, &$response) { // on verified IPN (everything is good!) $resp = $listener->getVerifier()->getVerificationResponse(); // Find paid driver (custom is driver_id). if ($driver = EloquentDriverRepository::find(\Input::get('custom'))) { \Event::fire('paxifi.paypal.subscription.' . $ipn['txn_type'], [$driver, $ipn]); \DB::commit(); } }, function () use($listener) { // on invalid IPN (somethings not right!) $report = $listener->getReport(); $resp = $listener->getVerifier()->getVerificationResponse(); return $this->setStatusCode(400)->respondWithError('Subscription failed.'); }); } catch (\RuntimeException $e) { return $this->setStatusCode(400)->respondWithError($e->getMessage()); } catch (\Exception $e) { return $this->errorInternalError(); } }
/** * Validates the IPN request returns the IPN data on success * * @return array $ipnMessage */ public function verifyIpn() { $listener = new Listener(); $verifier = new CurlVerifier(); $ipnMessage = Message::createFromGlobals(); // uses php://input $verifier->setIpnMessage($ipnMessage); $verifier->forceSSLv3(FALSE); $verifier->setEnvironment('production'); // can either be sandbox or production $listener->setVerifier($verifier); // If IPN does not validate if (!$listener->processIpn()) { throw new InvalidIpnException($listener->getReport()); } // On verified IPN return $ipnMessage; }