/**
  * 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");
     }
 }
示例#2
0
 /**
  * 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();
     }
 }
示例#3
0
 /**
  * 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;
 }
示例#4
0
 /**
  * @param Verifier $verifier
  * @return $this
  */
 public function setVerifier(Verifier $verifier)
 {
     $this->verifier = $verifier;
     $this->listener->setVerifier($verifier);
     return $this;
 }
示例#5
0
 public function getReport()
 {
     ini_set('date.timezone', 'Europe/London');
     // phpunit forces me to do this?!?
     return parent::getReport();
 }