/** * @group pay-req-order */ public function testPayRequestWithOrder() { $order = $this->getMock('Ulink_Order'); $order->expects($this->any())->method('getJsonData')->will($this->returnValue('foo')); $request = new Ulink_PaymentRequest(); $request->setAmount(new Ulink_Money('23.50')); $request->setCurrency("EUR"); $request->setTimestamp(123); $request->setOrder($order); $this->assertEquals("{\"type\":\"pay\",\"timestamp\":123,\"response-url\":null,\"back-url\":null,\"data\":{" . "\"amount\":\"23.50\",\"currency\":\"EUR\"" . ",\"order\":\"foo\"}}", $request->toJson()); }
public static function createFromJson($json) { $jsonData = $json->data; $request = new Ulink_PaymentRequest(); $request->setAmount(new Ulink_Money($jsonData->amount)); $request->setCurrency($jsonData->currency); if (isset($json->id) && $json->id) { $request->setClientTransactionId($json->id); } if (isset($json->{'response-url'}) && $json->{'response-url'}) { $request->setResponseUrl($json->{'response-url'}); } if (isset($json->{'back-url'}) && $json->{'back-url'}) { $request->setGoBackUrl($json->{'back-url'}); } if (isset($jsonData->order) && $jsonData->order) { $request->setOrder(Ulink_Order::createFromJson($jsonData->order)); } return $request; }
/** * @param array $data * @return string */ public function encrypt($data = array()) { $defaults = array('clientTransactionId' => '', 'amount' => '0', 'order' => array(), 'currency' => null, 'goBackUrl' => null, 'responseUrl' => null); $data = array_merge($defaults, $data); $request = new Ulink_PaymentRequest(); $request->setClientTransactionId($data['clientTransactionId']); $request->setAmount(new Ulink_Money($data['amount'])); $request->setCurrency($data['currency'] ? $data['currency'] : $this->getDefaultCurrency()); $request->setGoBackUrl($data['goBackUrl'] ? $data['goBackUrl'] : $this->getDefaultGoBackUrl()); $request->setResponseUrl($data['responseUrl'] ? $data['responseUrl'] : $this->getDefaultResponseUrl()); if (count($data['order'])) { $_order = new Ulink_Order(); /** * $item = array( * 'name' => 'Some Name', * 'description' => 'Some Description', * 'oneItemPrice' => '10.90', * 'quantity' => 5 * ); */ foreach ($data['order'] as $item) { $_order->addItem(new Ulink_OrderItem($item['name'], $item['description'], new Ulink_Money($item['oneItemPrice']), isset($item['quantity']) ? $item['quantity'] : 1)); } $request->setOrder($_order); } $requestJson = $request->toJson(); $requestJson = Ulink_CryptoUtils::seal($requestJson, $this->getPublicKeyPem()); $packet = new Ulink_TransportPacket(); $packet->setRequest($requestJson); $signature = Ulink_CryptoUtils::sign($requestJson, $this->getPrivateKeyPem()); $packet->setSignature($signature); $packet->setClientId($this->getClientId()); return $packet->toJson(); }
/** * @test * @return void */ public function testPaymentOut() { $privKey = $this->getPrivateKeyPem(); $pubKey = $this->getPublicKeyPem(); $order = new Ulink_Order(); $order->addItem(new Ulink_OrderItem("Milk", "Puhlqj ez", new Ulink_Money("25.90"))); $order->addItem(new Ulink_OrderItem("Mja4ik", "Puhlqj mja4", new Ulink_Money("9.00"))); $request = new Ulink_PaymentRequest(); $request->setAmount(new Ulink_Money("34.90")); $request->setCurrency(Ulink_Request::CURRENCY_EURO); $request->setOrder($order); $requestJson = $request->toJson(); $requestJson = Ulink_CryptoUtils::seal($requestJson, $pubKey); $packet = new Ulink_TransportPacket(); $packet->setRequest($requestJson); $signature = Ulink_CryptoUtils::sign($requestJson, $privKey); $packet->setSignature($signature); $packet->setClientId(15); $rawData = $packet->toJson(); $packet = Ulink_TransportPacket::createFromJson($rawData); $this->assertNotNull($packet); $this->assertEquals(15, $packet->getClientId()); $this->assertEquals($requestJson, $packet->getRequest()); $this->assertEquals($signature, $packet->getSignature()); $this->assertNotNull($packet->getSignature()); $this->assertTrue($packet->validateAgainstKey($pubKey)); $request = Ulink_RequestFactory::createFromJson( Ulink_CryptoUtils::unseal($packet->getRequest(), $privKey) ); $this->assertInstanceof('Ulink_PaymentRequest', $request); $paymentRequest = $request; $this->assertEquals("34.90", (string)$paymentRequest->getAmount()); $this->assertEquals("EUR", $paymentRequest->getCurrency()); $order = $paymentRequest->getOrder(); $this->assertNotNull($order); $this->assertEquals(2, count($order->getItems())); $items = $order->getItems(); $orderItem1 = $items[0]; $orderItem2 = $items[1]; $this->assertEquals("Milk", $orderItem1->getName()); $this->assertEquals("Puhlqj ez", $orderItem1->getDescription()); $this->assertEquals("25.90", (string)$orderItem1->getOneItemPrice()); $this->assertEquals("Mja4ik", $orderItem2->getName()); $this->assertEquals("Puhlqj mja4", $orderItem2->getDescription()); $this->assertEquals("9.00", (string)$orderItem2->getOneItemPrice()); }