示例#1
0
 /**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     RequestNotSupportedException::assertSupports($this, $request);
     $environment = $this->api['environment'];
     $signature = $this->api['signature_key'];
     $posId = $this->api['pos_id'];
     $openPayU = $this->getOpenPayUWrapper() ? $this->getOpenPayUWrapper() : new OpenPayUWrapper($environment, $signature, $posId);
     $model = $request->getModel();
     $model = ArrayObject::ensureArrayObject($model);
     /**
      * @var Token $token
      */
     $token = $request->getToken();
     if ($model['orderId'] == null) {
         $order = array();
         $order['continueUrl'] = $token->getTargetUrl();
         //customer will be redirected to this page after successfull payment
         $order['notifyUrl'] = $this->tokenFactory->createNotifyToken($token->getGatewayName(), $token->getDetails())->getTargetUrl();
         $order['customerIp'] = $model['customerIp'];
         $order['merchantPosId'] = $posId;
         $order['description'] = $model['description'];
         $order['currencyCode'] = $model['currencyCode'];
         $order['totalAmount'] = $model['totalAmount'];
         $order['extOrderId'] = $model['extOrderId'];
         //must be unique!
         $order['buyer'] = $model['buyer'];
         if (!array_key_exists('products', $model) || count($model['products']) == 0) {
             $order['products'] = array(array('name' => $model['description'], 'unitPrice' => $model['totalAmount'], 'quantity' => 1));
         } else {
             $order['products'] = $model['products'];
         }
         $response = $openPayU->create($order)->getResponse();
         if ($response && $response->status->statusCode == 'SUCCESS') {
             $model['orderId'] = $response->orderId;
             $request->setModel($model);
             throw new HttpRedirect($response->redirectUri);
         } else {
             throw PayUException::newInstance($response->status);
         }
     } else {
         $response = $openPayU->retrieve($model['orderId'])->getResponse();
         if ($response->status->statusCode == 'SUCCESS') {
             $model['status'] = $response->orders[0]->status;
             $request->setModel($model);
         }
     }
 }
 /**
  * @test
  */
 public function shouldCreateNotifyTokenWithoutModel()
 {
     $token = new Token();
     $tokenStorageMock = $this->createStorageMock();
     $tokenStorageMock->expects($this->once())->method('createModel')->will($this->returnValue($token));
     $tokenStorageMock->expects($this->once())->method('updateModel')->with($this->identicalTo($token));
     $paymentName = 'thePaymentName';
     $storageRegistryMock = $this->createStorageRegistryMock();
     $storageRegistryMock->expects($this->never())->method('getStorage');
     $factory = new GenericTokenFactory($tokenStorageMock, $storageRegistryMock, 'http://example.com', 'capture.php', 'notify.php');
     $actualToken = $factory->createNotifyToken($paymentName, null);
     $this->assertSame($token, $actualToken);
     $this->assertEquals($paymentName, $token->getPaymentName());
     $this->assertNull($token->getDetails());
     $this->assertEquals('http://example.com/notify.php?payum_token=' . $token->getHash(), $token->getTargetUrl());
     $this->assertNull($token->getAfterUrl());
 }
示例#3
0
 /**
  * @test
  */
 public function shouldAllowCreateNotifyTokenWithoutModel()
 {
     $gatewayName = 'theGatewayName';
     $notifyPath = 'theNotifyPath';
     $notifyToken = new Token();
     $tokenFactoryMock = $this->createTokenFactoryMock();
     $tokenFactoryMock->expects($this->once())->method('createToken')->with($gatewayName, null, $notifyPath, array(), null, array())->willReturn($notifyToken);
     $factory = new GenericTokenFactory($tokenFactoryMock, array('notify' => $notifyPath));
     $actualToken = $factory->createNotifyToken($gatewayName);
     $this->assertSame($notifyToken, $actualToken);
 }