* $api_key = new \Balanced\APIKey(); * $api_key->save(); * $secret = $api_key->secret // better save this somewhere * print $secret; * \Balanced\Settings::$api_key = $secret; * * $marketplace = new \Balanced\Marketplace(); * $marketplace->save(); * var_dump($marketplace); * * * Each api key is uniquely associated with an api key so once you've created a * marketplace: * * * \Balanced\Settings::$api_key = $secret; * $marketplace = \Balanced\Marketplace::mine(); // this is the marketplace associated with $secret * */ class Marketplace extends Resource { protected static $_uri_spec = null; public static function init() { self::$_uri_spec = new URISpec('marketplaces', 'id', '/v1'); self::$_registry->add(get_called_class()); } /** * Get the marketplace associated with the currently configured * \Balanced\Settings::$api_key. * * @throws \RESTful\Exceptions\NoResultFound * @return \Balanced\Marketplace */ public static function mine() { return self::query()->one(); } /** * Create a card. These can later be associated with an account using * \Balanced\Account->addCard or \Balanced\Marketplace->createBuyer. * * @param string street_address Street address. Use null if there is no address for the card. * @param string city City. Use null if there is no address for the card. * @param string postal_code Postal code. Use null if there is no address for the card. * @param string name Name as it appears on the card. * @param string card_number Card number. * @param string security_code Card security code. Use null if it is no available. * @param int expiration_month Expiration month. * @param int expiration_year Expiration year. * * @return \Balanced\Card */ public function createCard( $street_address, $city, $region, $postal_code, $name, $card_number, $security_code, $expiration_month, $expiration_year) { if ($region != null && strlen($region) > 0) { trigger_error("The region parameter will be deprecated in the next minor version of balanced-php", E_USER_NOTICE); } return $this->cards->create(array( 'street_address' => $street_address, 'city' => $city, 'region' => $region, 'postal_code' => $postal_code, 'name' => $name, 'card_number' => $card_number, 'security_code' => $security_code, 'expiration_month' => $expiration_month, 'expiration_year' => $expiration_year )); } /** * Create a bank account. These can later be associated with an account * using \Balanced\Account->addBankAccount. * * @param string name Name of the account holder. * @param string account_number Account number. * @param string routing_number Bank code or routing number. * @param string type checking or savings * @param array meta Single level mapping from string keys to string values. * * @return \Balanced\BankAccount */ public function createBankAccount( $name, $account_number, $routing_number, $type, $meta = null ) { return $this->bank_accounts->create(array( 'name' => $name, 'account_number' => $account_number, 'routing_number' => $routing_number, 'type' => $type, 'meta' => $meta )); } /** * Create a role-less account. You can later turn this into a buyer by * adding a funding source (e.g a card) or a merchant using * \Balanced\Account->promoteToMerchant. * * @param string email_address Optional email address. There can only be one account with this email address. * @param array[string]string meta Optional metadata to associate with the account. * * @return \Balanced\Account */ public function createAccount($email_address = null, $meta = null) { return $this->accounts->create(array( 'email_address' => $email_address, 'meta' => $meta, )); } /** * Find or create a role-less account by email address. You can later turn * this into a buyer by adding a funding source (e.g a card) or a merchant * using \Balanced\Account->promoteToMerchant. * * @param string email_address Email address. There can only be one account with this email address. * * @return \Balanced\Account */ function findOrCreateAccountByEmailAddress($email_address) { $marketplace = Marketplace::mine(); try { $account = $this->accounts->create(array( 'email_address' => $email_address )); } catch (Errors\DuplicateAccountEmailAddress $e) { $account = Account::get($e->extras->account_uri); } return $account; } /** * Create a buyer account. * * @param string email_address Optional email address. There can only be one account with this email address. * @param string card_uri URI referencing a card to associate with the account. * @param array[string]string meta Optional metadata to associate with the account. * @param string name Optional name of the account. * * @return \Balanced\Account */ public function createBuyer($email_address, $card_uri, $meta = null, $name = null) { return $this->accounts->create(array( 'email_address' => $email_address, 'card_uri' => $card_uri, 'meta' => $meta, 'name' => $name )); } /** * Create a merchant account. * * Unlike buyers the identity of a merchant must be established before * the account can function as a merchant (i.e. be credited). A merchant * can be either a person or a business. Either way that information is * represented as an associative array and passed as the merchant parameter * when creating the merchant account. * * For a person the array looks like this: * * * array( * 'type' => 'person', * 'name' => 'William James', * 'tax_id' => '393-48-3992', * 'street_address' => '167 West 74th Street', * 'postal_code' => '10023', * 'dob' => '1842-01-01', * 'phone_number' => '+16505551234', * 'country_code' => 'USA' * ) * * * For a business the array looks like this: * * * array( * 'type' => 'business', * 'name' => 'Levain Bakery', * 'tax_id' => '253912384', * 'street_address' => '167 West 74th Street', * 'postal_code' => '10023', * 'phone_number' => '+16505551234', * 'country_code' => 'USA', * 'person' => array( * 'name' => 'William James', * 'tax_id' => '393483992', * 'street_address' => '167 West 74th Street', * 'postal_code' => '10023', * 'dob' => '1842-01-01', * 'phone_number' => '+16505551234', * 'country_code' => 'USA', * ) * ) * * * In some cases the identity of the merchant, person or business, cannot * be verified in which case a \Balanced\Exceptions\HTTPError is thrown: * * * $identity = array( * 'type' => 'business', * 'name' => 'Levain Bakery', * 'tax_id' => '253912384', * 'street_address' => '167 West 74th Street', * 'postal_code' => '10023', * 'phone_number' => '+16505551234', * 'country_code' => 'USA', * 'person' => array( * 'name' => 'William James', * 'tax_id' => '393483992', * 'street_address' => '167 West 74th Street', * 'postal_code' => '10023', * 'dob' => '1842-01-01', * 'phone_number' => '+16505551234', * 'country_code' => 'USA', * ), * ); * * try { * $merchant = \Balanced\Marketplace::mine()->createMerchant( * 'merchant@example.com', * $identity, * ); * catch (\Balanced\Exceptions\HTTPError $e) { * if ($e->code != 300) { * throw $e; * } * print e->response->header['Location'] // this is where merchant must signup * } * * * Once the merchant has completed signup you can use the resulting URI to * create an account for them on your marketplace: * * * $merchant = self::$marketplace->createMerchant( * 'merchant@example.com', * null, * null, * $merchant_uri * ); * * * @param string email_address Optional email address. There can only be one account with this email address. * @param array[string]mixed merchant Associative array describing the merchants identity. * @param string $bank_account_uri Optional URI referencing a bank account to associate with this account. * @param string $merchant_uri URI of a merchant created via the redirection sign-up flow. * @param string $name Optional name of the merchant. * @param array[string]string meta Optional metadata to associate with the account. * * @return \Balanced\Account */ public function createMerchant( $email_address = null, $merchant = null, $bank_account_uri = null, $merchant_uri = null, $name = null, $meta = null) { return $this->accounts->create(array( 'email_address' => $email_address, 'merchant' => $merchant, 'merchant_uri' => $merchant_uri, 'bank_account_uri' => $bank_account_uri, 'name' => $name, 'meta' => $meta, )); } /* * Create a callback. * * @param string url URL of callback. */ public function createCallback( $url ) { return $this->callbacks->create(array( 'url' => $url )); } }