diff --git a/src/Traits/PayPalAPI/Identity.php b/src/Traits/PayPalAPI/Identity.php index f5a68674..aaf36035 100644 --- a/src/Traits/PayPalAPI/Identity.php +++ b/src/Traits/PayPalAPI/Identity.php @@ -89,4 +89,108 @@ public function deleteUser(string $user_id) return $this->doPayPalRequest(false); } + + /** + * Create a merchant application. + * + * @param string $client_name + * @param array $redirect_uris + * @param array $contacts + * @param string $payer_id + * @param string $migrated_app + * @param string $application_type + * @param string $logo_url + * + * @throws \Throwable + * + * @return array|\Psr\Http\Message\StreamInterface|string + * + * @see https://developer.paypal.com/docs/api/identity/v1/#applications_post + */ + public function createMerchantApplication(string $client_name, array $redirect_uris, array $contacts, string $payer_id, string $migrated_app, string $application_type = 'web', string $logo_url = '') + { + $this->apiEndPoint = 'v1/identity/applications'; + + $this->options['json'] = array_filter([ + 'application_type' => $application_type, + 'redirect_uris' => $redirect_uris, + 'client_name' => $client_name, + 'contacts' => $contacts, + 'payer_id' => $payer_id, + 'migrated_app' => $migrated_app, + 'logo_uri' => $logo_url, + ]); + + $this->verb = 'post'; + + return $this->doPayPalRequest(); + } + + /** + * Create a merchant application. + * + * @param array $features + * @param string $account_property + * + * @throws \Throwable + * + * @return array|\Psr\Http\Message\StreamInterface|string + * + * @see https://developer.paypal.com/docs/api/identity/v1/#account-settings_post + */ + public function setAccountProperties(array $features, string $account_property = 'BRAINTREE_MERCHANT') + { + $this->apiEndPoint = 'v1/identity/account-settings'; + + $this->options['json'] = [ + 'account_property' => $account_property, + 'features' => $features, + ]; + + $this->verb = 'post'; + + return $this->doPayPalRequest(); + } + + /** + * Create a merchant application. + * + * @param string $account_property + * + * @throws \Throwable + * + * @return array|\Psr\Http\Message\StreamInterface|string + * + * @see https://developer.paypal.com/docs/api/identity/v1/#account-settings_deactivate + */ + public function disableAccountProperties(string $account_property = 'BRAINTREE_MERCHANT') + { + $this->apiEndPoint = 'v1/identity/account-settings/deactivate'; + + $this->options['json'] = [ + 'account_property' => $account_property, + ]; + + $this->verb = 'post'; + + return $this->doPayPalRequest(); + } + + /** + * Get a client token. + * + * @throws \Throwable + * + * @return array|\Psr\Http\Message\StreamInterface|string + * + * @see https://developer.paypal.com/docs/multiparty/checkout/advanced/integrate/#link-sampleclienttokenrequest + */ + public function getClientToken() + { + $this->apiEndPoint = 'v1/identity/generate-token'; + + $this->verb = 'post'; + + return $this->doPayPalRequest(); + } } diff --git a/tests/Feature/AdapterFeatureTest.php b/tests/Feature/AdapterFeatureTest.php index 613b9e56..2a834799 100644 --- a/tests/Feature/AdapterFeatureTest.php +++ b/tests/Feature/AdapterFeatureTest.php @@ -1248,6 +1248,94 @@ public function it_can_deleta_a_user() $this->assertEmpty($response); } + /** @test */ + public function it_can_create_merchant_applications() + { + $this->client->setAccessToken([ + 'access_token' => self::$access_token, + 'token_type' => 'Bearer', + ]); + + $this->client->setClient( + $this->mock_http_client( + $this->mockCreateMerchantApplicationResponse() + ) + ); + + $response = $this->client->createMerchantApplication( + 'AGGREGATOR', + [ + 'https://example.com/callback', + 'https://example.com/callback2', + ], + [ + 'facilitator@example.com', + 'merchant@example.com', + ], + 'WDJJHEBZ4X2LY', + 'some-open-id' + ); + + $this->assertArrayHasKey('client_name', $response); + $this->assertArrayHasKey('contacts', $response); + $this->assertArrayHasKey('redirect_uris', $response); + } + + /** @test */ + public function it_can_set_account_properties() + { + $this->client->setAccessToken([ + 'access_token' => self::$access_token, + 'token_type' => 'Bearer', + ]); + + $this->client->setClient( + $this->mock_http_client('') + ); + + $response = $this->client->setAccountProperties($this->mockSetAccountPropertiesParams()); + + $this->assertEmpty($response); + } + + /** @test */ + public function it_can_disable_account_properties() + { + $this->client->setAccessToken([ + 'access_token' => self::$access_token, + 'token_type' => 'Bearer', + ]); + + $this->client->setClient( + $this->mock_http_client( + $this->mockUpdateOrdersResponse() + ) + ); + + $response = $this->client->disableAccountProperties(); + + $this->assertEmpty($response); + } + + /** @test */ + public function it_can_get_client_token() + { + $this->client->setAccessToken([ + 'access_token' => self::$access_token, + 'token_type' => 'Bearer', + ]); + + $this->client->setClient( + $this->mock_http_client( + $this->mockGetClientTokenResponse() + ) + ); + + $response = $this->client->getClientToken(); + + $this->assertArrayHasKey('client_token', $response); + } + /** @test */ public function it_can_create_orders() {