/**
  * @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);
 }
Example #6
0
 /**
  * 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);
 }