/** * Listens for and stores PayPal IPN requests. * * @return IpnOrder * @throws InvalidIpnException * @throws UnexpectedResponseBodyException * @throws UnexpectedResponseStatusException */ public function getOrder() { $request = $this->getRequestHandler(); $listener = new PayPalListener($request); $listener->setMode($this->getEnvironment()); if ($listener->verifyIpn()) { return $this->store($request->getData()); } else { throw new InvalidIpnException("PayPal as responded with INVALID"); } }
/** * 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; }
/** * @param Verifier $verifier * @return $this */ public function setVerifier(Verifier $verifier) { $this->verifier = $verifier; $this->listener->setVerifier($verifier); return $this; }
public function getReport() { ini_set('date.timezone', 'Europe/London'); // phpunit forces me to do this?!? return parent::getReport(); }