/** * @param Hypercharge\IUrl $url * @param Hypercharge\IRequest $request * @return Hypercharge\IResponse * @throws Hypercharge\Error */ public function call(IUrl $url, IRequest $request) { $curl = Config::getFactory()->createHttpsClient(Config::getUser(), Config::getPassword()); $serializer = new XmlSerializer(); $responseStr = $curl->xmlPost($url->get(), $serializer->toXml($request)); $responseDom = new \SimpleXMLElement($responseStr); return $request->createResponse(XmlSerializer::dom2hash($responseDom)); }
/** * DO NOT USE, PRIVATE METHOD! must be public for unittests * @param string $uid scheduler.unique_id * @param array $params hash keys (all optional): page, per_page * @return Hypercharge\RecurringScheduler */ static function index($uid, $params = array()) { Helper::validateUniqueId($uid); JsonSchema::validate('scheduler_transactions_index', $params); $factory = Config::getFactory(); $url = $factory->createUrl(array('scheduler', $uid, 'transactions'), $params); $response = $factory->createHttpsClient()->jsonGet($url); if ($response->entries_base_type != 'PaymentTransaction') { throw new Errors\ResponseFormatError('entries_base_type expected "PaymentTransaction" but was: ' . $response->entries_base_type, $response); } return $response; }
/** * Note: PagianatedByDateRequest#creteResponse($data) implementation must return a PaginatedCollection * @param Hypercharge\IUrl $url * @param function $callback function($entity) $entity is each instance contained in PaginatedCollection returned by #creteResponse($data) implementation */ function each($url, $callback) { $this->validate(); $webservice = Config::getFactory()->createWebservice(); while ($page = $webservice->call($url, $this)) { foreach ($page as $entity) { $callback($entity); } if (!$page->hasNextPage()) { break; } $this->page = $page->getNextPage(); } }
/** * returns the date when the next Transaction is scheduled for * @param string $uid the scheduler.unique_id * @return string date 'yyyy-mm-dd' e.g. '2014-03-28' */ static function next($uid) { Helper::validateUniqueId($uid); $factory = Config::getFactory(); $url = $factory->createUrl(array('scheduler', $uid, 'next')); $response = $factory->createHttpsClient()->jsonGet($url); if ($response === null) { return; } if (!(is_object($response) && @$response->type == 'RecurringEvent' && !empty($response->due_date))) { throw new Errors\ResponseFormatError("expected object type=RecurringEvent", $response); } return $response->due_date; }
/** * @param string $klass * @param mixed $request array or Hypercharge\TransactionRequest * @param string $channelToken * @param string $action * @return Hypercharge\Transaction */ private static function _call($klass, $request, $channelToken, $action = 'process') { if (is_array($request)) { $request['transaction_type'] = $klass; } else { if (is_object($request)) { $request->transaction_type = $klass; } } $request = Helper::ensure('TransactionRequest', $request); $request->validate(); $factory = Config::getFactory(); $url = $factory->createTransactionUrl($channelToken, $action); return $factory->createWebservice()->call($url, $request); }
/** * see "reconcile" in Hypercharge API doc * @param string $unique_id a Payment.unique_id * @return Hypercharge\Payment * @throws Hypercharge\Errors\Error */ static function find($unique_id) { $request = new SimplePaymentReturningRequest('reconcile', $unique_id); $request->validate(); $factory = Config::getFactory(); $url = $factory->createPaymentUrl('reconcile'); return $factory->createWebservice()->call($url, $request); }