/** * {@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()); }
/** * @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); }