/**
  * @param array $requestData
  * @return BuyRequest
  */
 public static function create(array $requestData)
 {
     self::validateRequiredFields($requestData);
     $buyRequest = new BuyRequest();
     $buyRequest->setFrom($requestData["from"]);
     $buyRequest->setTo($requestData["to"]);
     $buyRequest->setDate(\DateTime::createFromFormat("Ymd", $requestData["date"]));
     $buyRequest->setSchedule($requestData["schedule"]);
     $buyRequest->setFolio($requestData["folio"]);
     $buyRequest->setCustomers(self::createCustomers($requestData["customers"]));
     return $buyRequest;
 }
예제 #2
0
    /**
     * @param \Tufesa\Service\Type\BuyRequest $buyRequest
     * @return \Tufesa\Service\Type\BuyResponse
     * @throws \Tufesa\Service\Exceptions\ResponseException
     */
    public function buyTickets(BuyRequest $buyRequest)
    {
        $customersXML = "";
        foreach ($buyRequest->getCustomers() as $customer) {
            $customersXML .= self::createCustomerXML($customer) . PHP_EOL;
        }
        $requestFormat = <<<REQUEST
<?xml version="1.0" encoding="UTF-8"?>
<BUSDoc version="1.0">
    <request>
        <from>%s</from>
        <to>%s</to>
        <date>%s</date>
        <schedule>%s</schedule>
        <folio>%s</folio>
        <customers>%s</customers>
    </request>
</BUSDoc>
REQUEST;
        $body = sprintf($requestFormat, $buyRequest->getFrom(), $buyRequest->getTo(), $buyRequest->getDate()->format("Ymd"), $buyRequest->getSchedule(), $buyRequest->getFolio(), $customersXML);
        $headers = ["Content-Type" => "text/xml", "Accept" => "text/json"];
        $request = $this->guzzleClient->post("buy", $headers, $body);
        $this->setLastRequest($request);
        $response = $request->send();
        $this->setLastResponse($response);
        $resource = $response->json();
        if ($resource["_Response"]["resultField"]["_id"] != "00") {
            throw new ResponseException($resource["_Response"]["resultField"]["_message"]);
        }
        $tickets = $resource["_Response"]["dataField"][0];
        return BuyResponseFactory::create($tickets);
    }