diff --git a/.gitignore b/.gitignore index 5017d9c4..84e11ab2 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ build/ composer.lock composer.phar vendor/* + +.phpunit.result.cache diff --git a/composer.json b/composer.json index c829ea44..b9b013f9 100644 --- a/composer.json +++ b/composer.json @@ -21,11 +21,11 @@ } ], "require": { - "php": ">=5.3.0", + "php": ">=7.4.0", "ext-curl": "*" }, "require-dev": { - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "~9.6", "satooshi/php-coveralls": "~0.6.1" }, "autoload": { diff --git a/samples/subscription-samples/delete_customer.php b/samples/subscription-samples/delete_customer.php new file mode 100644 index 00000000..71cd8747 --- /dev/null +++ b/samples/subscription-samples/delete_customer.php @@ -0,0 +1,12 @@ +setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + $result = \Iyzipay\Model\Subscription\SubscriptionDeleteCustomer::delete($request, Config::options()); + print_r($result); +} + +deleteSubscriptionCustomer(); diff --git a/samples/subscription-samples/subscription_list.php b/samples/subscription-samples/subscription_list.php new file mode 100644 index 00000000..e06dbe5c --- /dev/null +++ b/samples/subscription-samples/subscription_list.php @@ -0,0 +1,22 @@ +setPage(1); + $request->setCount(10); + $request->setSubscriptionStatus(\Iyzipay\Model\Status::ACTIVE); + $request->setSubscriptionReferenceCode('c8ab43da-f4b3-40d2-b1ef-620da93ec3e9'); + $request->setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + $request->setPricingPlanReferenceCode('c1d489b6-9adc-42fa-88ae-47ea2e5dbe1e'); + $request->setParentReferenceCode('f219267d-ce05-4039-a773-225ea44aacd1'); + $request->setStartDate('2024-01-01 23:56:00'); + $request->setEndDate('2024-02-02 23:56:00'); + + $result = \Iyzipay\Model\Subscription\SubscriptionList::create($request, Config::options()); + print_r($result); +} + +subscriptionList(); diff --git a/src/Iyzipay/DefaultHttpClient.php b/src/Iyzipay/DefaultHttpClient.php index cab25812..08d159b2 100644 --- a/src/Iyzipay/DefaultHttpClient.php +++ b/src/Iyzipay/DefaultHttpClient.php @@ -65,6 +65,18 @@ public function put($url, $header, $content) )); } + public function patch($url, $header, $content) + { + return $this->curl->exec($url, array( + CURLOPT_CUSTOMREQUEST => "PATCH", + CURLOPT_POSTFIELDS => $content, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_VERBOSE => false, + CURLOPT_HEADER => false, + CURLOPT_HTTPHEADER => $header + )); + } + public function delete($url, $header, $content = null) { return $this->curl->exec($url, array( diff --git a/src/Iyzipay/IyzipayResource.php b/src/Iyzipay/IyzipayResource.php index 3fbc2ea9..04465838 100644 --- a/src/Iyzipay/IyzipayResource.php +++ b/src/Iyzipay/IyzipayResource.php @@ -27,7 +27,7 @@ protected static function getHttpHeaders(Request $request, Options $options) return $header; } - protected static function getHttpHeadersV2($uri, Request $request = null, Options $options) + protected static function getHttpHeadersV2($uri, Request $request = null, Options $options, bool $addRandom = false) { $header = array( "Accept: application/json", @@ -36,6 +36,7 @@ protected static function getHttpHeadersV2($uri, Request $request = null, Option $rnd = uniqid(); array_push($header, "Authorization: " . self::prepareAuthorizationStringV2($uri, $request, $options, $rnd)); + $addRandom && array_push($header, "x-iyzi-rnd: " . $rnd); array_push($header, "x-iyzi-client-version: " . "iyzipay-php-2.0.43"); return $header; diff --git a/src/Iyzipay/Model/Mapper/Subscription/SubscriptionDeleteCustomerMapper.php b/src/Iyzipay/Model/Mapper/Subscription/SubscriptionDeleteCustomerMapper.php new file mode 100644 index 00000000..92a76114 --- /dev/null +++ b/src/Iyzipay/Model/Mapper/Subscription/SubscriptionDeleteCustomerMapper.php @@ -0,0 +1,28 @@ +customerReferenceCode)) { + $customer->setCustomerReferenceCode($jsonObject->customerReferenceCode); + } + + return $customer; + } + + public function mapSubscriptionDeleteCustomer(SubscriptionDeleteCustomer $customer): SubscriptionDeleteCustomer { + return $this->mapSubscriptionDeleteCustomerFrom($customer, $this->jsonObject); + } +} + + diff --git a/src/Iyzipay/Model/Mapper/Subscription/SubscriptionListMapper.php b/src/Iyzipay/Model/Mapper/Subscription/SubscriptionListMapper.php new file mode 100644 index 00000000..13f203e7 --- /dev/null +++ b/src/Iyzipay/Model/Mapper/Subscription/SubscriptionListMapper.php @@ -0,0 +1,58 @@ +subscriptionReferenceCode)) { + $subscriptionList->setSubscriptionReferenceCode($jsonObject->subscriptionReferenceCode); + } + + if (isset($jsonObject->subscriptionStatus)) { + $subscriptionList->setSubscriptionStatus($jsonObject->subscriptionStatus); + } + + if (isset($jsonObject->page)) { + $subscriptionList->setPage($jsonObject->page); + } + + if (isset($jsonObject->count)) { + $subscriptionList->setCount($jsonObject->count); + } + + if (isset($jsonObject->customerReferenceCode)) { + $subscriptionList->setCustomerReferenceCode($jsonObject->customerReferenceCode); + } + + if (isset($jsonObject->parentReferenceCode)) { + $subscriptionList->setParentReferenceCode($jsonObject->parentReferenceCode); + } + + if (isset($jsonObject->startDate)) { + $subscriptionList->setStartDate($jsonObject->startDate); + } + + if (isset($jsonObject->endDate)) { + $subscriptionList->setEndDate($jsonObject->endDate); + } + + if (isset($jsonObject->pricingPlanReferenceCode)) { + $subscriptionList->setPricingPlanReferenceCode($jsonObject->pricingPlanReferenceCode); + } + + return $subscriptionList; + } + + public function mapSubscriptionList(SubscriptionList $subscriptionList): \Iyzipay\Model\Subscription\SubscriptionList { + return $this->mapSubscriptionListFrom($subscriptionList, $this->jsonObject); + } +} diff --git a/src/Iyzipay/Model/Status.php b/src/Iyzipay/Model/Status.php index 0616a17e..36a2c1ca 100644 --- a/src/Iyzipay/Model/Status.php +++ b/src/Iyzipay/Model/Status.php @@ -6,4 +6,6 @@ class Status { const SUCCESS = "success"; const FAILURE = "failure"; + const ACTIVE = "ACTIVE"; + const PASSIVE = "PASSIVE"; } \ No newline at end of file diff --git a/src/Iyzipay/Model/Subscription/SubscriptionDeleteCustomer.php b/src/Iyzipay/Model/Subscription/SubscriptionDeleteCustomer.php new file mode 100644 index 00000000..9af701d0 --- /dev/null +++ b/src/Iyzipay/Model/Subscription/SubscriptionDeleteCustomer.php @@ -0,0 +1,27 @@ +getBaseUrl() . '/v2/subscription/customers/delete/' . $request->getCustomerReferenceCode() . RequestStringBuilder::requestToStringQuery($request);; + $rawResult = parent::httpClient()->post($uri, parent::getHttpHeadersV2($uri, null, $options), null); + return SubscriptionDeleteCustomerMapper::create($rawResult)->jsonDecode()->mapSubscriptionDeleteCustomer(new SubscriptionDeleteCustomer()); + } + + public function getCustomerReferenceCode(): string { + return $this->customerReferenceCode; + } + + public function setCustomerReferenceCode(string $customerReferenceCode): void { + $this->customerReferenceCode = $customerReferenceCode; + } +} diff --git a/src/Iyzipay/Model/Subscription/SubscriptionList.php b/src/Iyzipay/Model/Subscription/SubscriptionList.php new file mode 100644 index 00000000..a42b62c5 --- /dev/null +++ b/src/Iyzipay/Model/Subscription/SubscriptionList.php @@ -0,0 +1,101 @@ +getBaseUrl() . '/v2/subscription/subscriptions' . RequestStringBuilder::requestToStringQuery($request, 'searchSubscription'); + $rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options)); + return SubscriptionListMapper::create($rawResult)->jsonDecode()->mapSubscriptionList(new SubscriptionList()); + } + + public function getSubscriptionReferenceCode(): string { + return $this->subscriptionReferenceCode; + } + + public function setSubscriptionReferenceCode(string $subscriptionReferenceCode): void { + $this->subscriptionReferenceCode = $subscriptionReferenceCode; + } + + public function getSubscriptionStatus(): string { + return $this->subscriptionStatus; + } + + public function setSubscriptionStatus(string $subscriptionStatus): void { + $this->subscriptionStatus = $subscriptionStatus; + } + + public function getPage(): int { + return $this->page; + } + + public function setPage(int $page): void { + $this->page = $page; + } + + public function getCount(): int { + return $this->count; + } + + public function setCount(int $count): void { + $this->count = $count; + } + +// + public function getCustomerReferenceCode(): string { + return $this->customerReferenceCode; + } + + public function setCustomerReferenceCode(string $customerReferenceCode): void { + $this->customerReferenceCode = $customerReferenceCode; + } + + public function getParentReferenceCode(): string { + return $this->parentReferenceCode; + } + + public function setParentReferenceCode(string $parentReferenceCode): void { + $this->parentReferenceCode = $parentReferenceCode; + } + + public function getStartDate(): string { + return $this->startDate; + } + + public function setStartDate(string $startDate): void { + $this->startDate = urlencode($startDate); + } + + public function getEndDate(): string { + return $this->endDate; + } + + public function setEndDate(string $endDate): void { + $this->endDate = urlencode($endDate); + } + + + public function getPricingPlanReferenceCode(): string { + return $this->pricingPlanReferenceCode; + } + + public function setPricingPlanReferenceCode(string $pricingPlanReferenceCode): void { + $this->pricingPlanReferenceCode = $pricingPlanReferenceCode; + } +} diff --git a/src/Iyzipay/Request/Subscription/SubscriptionDeleteCustomerRequest.php b/src/Iyzipay/Request/Subscription/SubscriptionDeleteCustomerRequest.php new file mode 100644 index 00000000..78b01f07 --- /dev/null +++ b/src/Iyzipay/Request/Subscription/SubscriptionDeleteCustomerRequest.php @@ -0,0 +1,24 @@ +customerReferenceCode; + } + + public function setCustomerReferenceCode(string $customerReferenceCode): void { + $this->customerReferenceCode = $customerReferenceCode; + } + + public function getJsonObject(): array { + return JsonBuilder::fromJsonObject(parent::getJsonObject()) + ->add('customerReferenceCode', $this->getCustomerReferenceCode()) + ->getObject(); + } +} diff --git a/src/Iyzipay/Request/Subscription/SubscriptionListRequest.php b/src/Iyzipay/Request/Subscription/SubscriptionListRequest.php new file mode 100644 index 00000000..55faa3f3 --- /dev/null +++ b/src/Iyzipay/Request/Subscription/SubscriptionListRequest.php @@ -0,0 +1,104 @@ +subscriptionReferenceCode ?? null; + } + + public function setSubscriptionReferenceCode(string $subscriptionReferenceCode): void { + $this->subscriptionReferenceCode = $subscriptionReferenceCode; + } + + public function getSubscriptionStatus(): ?string { + return $this->subscriptionStatus ?? null; + } + + public function setSubscriptionStatus(string $subscriptionStatus): void { + $this->subscriptionStatus = $subscriptionStatus; + } + + public function getPage(): int { + return $this->page; + } + + public function setPage(int $page): void { + $this->page = $page; + } + + public function getCount(): int { + return $this->count; + } + + public function setCount(int $count): void { + $this->count = $count; + } + + public function getCustomerReferenceCode(): ?string { + return $this->customerReferenceCode ?? null; + } + + public function setCustomerReferenceCode(string $customerReferenceCode): void { + $this->customerReferenceCode = $customerReferenceCode; + } + + public function getParentReferenceCode(): ?string { + return $this->parentReferenceCode ?? null; + } + + public function setParentReferenceCode(string $parentReferenceCode): void { + $this->parentReferenceCode = $parentReferenceCode; + } + + public function getStartDate(): ?string { + return $this->startDate ?? null; + } + + public function setStartDate(string $startDate): void { + $this->startDate = urlencode($startDate); + } + + public function getEndDate(): ?string { + return $this->endDate ?? null; + } + + public function setEndDate(string $endDate): void { + $this->endDate = urlencode($endDate); + } + + public function getPricingPlanReferenceCode(): ?string { + return $this->pricingPlanReferenceCode ?? null; + } + + public function setPricingPlanReferenceCode(string $pricingPlanReferenceCode): void { + $this->pricingPlanReferenceCode = $pricingPlanReferenceCode; + } + + public function getJsonObject(): array { + return JsonBuilder::fromJsonObject(parent::getJsonObject()) + ->add('subscriptionReferenceCode', $this->getSubscriptionReferenceCode()) + ->add('subscriptionStatus', $this->getSubscriptionStatus()) + ->add('page', $this->getPage()) + ->add('count', $this->getCount()) + ->add('customerReferenceCode', $this->getCustomerReferenceCode()) + ->add('parentReferenceCode', $this->getParentReferenceCode()) + ->add('startDate', $this->getStartDate()) + ->add('endDate', $this->getEndDate()) + ->add('pricingPlanReferenceCode', $this->getPricingPlanReferenceCode()) + ->getObject(); + } +} diff --git a/src/Iyzipay/RequestStringBuilder.php b/src/Iyzipay/RequestStringBuilder.php index 13682a77..79547766 100644 --- a/src/Iyzipay/RequestStringBuilder.php +++ b/src/Iyzipay/RequestStringBuilder.php @@ -150,6 +150,10 @@ public static function requestToStringQuery(Request $request, $type = null) $stringQuery .= "&locale=" . $request->getLocale(); } + if ($type == 'locale') { + $stringQuery = "?locale=" . $request->getLocale(); + } + if($type == 'defaultParams' ) { if($request->getConversationId()) { $stringQuery = "?conversationId=" . $request->getConversationId(); @@ -175,6 +179,20 @@ public static function requestToStringQuery(Request $request, $type = null) } } + if($type == 'reportingScrollTransaction') { + if($request->getDocumentScrollVoSortingOrder()) { + $stringQuery = '?documentScrollVoSortingOrder=' . $request->getDocumentScrollVoSortingOrder(); + } + + if($request->getTransactionDate()) { + $stringQuery .= "&transactionDate=" . $request->getTransactionDate(); + } + + if($request->getLastId()) { + $stringQuery .= '&lastId=' . $request->getLastId(); + } + } + if($type == 'subscriptionItems' ) { if ($request->getPage()) { $stringQuery = "?page=" . $request->getPage(); diff --git a/tests/Iyzipay/Tests/IyzipayResourceTestCase.php b/tests/Iyzipay/Tests/IyzipayResourceTestCase.php index f3bca767..a3f1bd8a 100644 --- a/tests/Iyzipay/Tests/IyzipayResourceTestCase.php +++ b/tests/Iyzipay/Tests/IyzipayResourceTestCase.php @@ -21,7 +21,7 @@ class IyzipayResourceTestCase extends TestCase "conversationId":"123456" }'; - public function setUp() + public function setUp(): void { parent::setUp(); @@ -83,4 +83,4 @@ public function test_should_check_http_client_not_empty() { $this->assertNotEmpty($this->httpClient); } -} \ No newline at end of file +} diff --git a/tests/Iyzipay/Tests/Model/Subscription/SubscriptionDeleteCustomerTest.php b/tests/Iyzipay/Tests/Model/Subscription/SubscriptionDeleteCustomerTest.php new file mode 100644 index 00000000..d2a4136d --- /dev/null +++ b/tests/Iyzipay/Tests/Model/Subscription/SubscriptionDeleteCustomerTest.php @@ -0,0 +1,18 @@ +setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + + $this->expectHttpPost(); + $customer = SubscriptionDeleteCustomer::delete($request, $this->options); + $this->verifyResource($customer); + } +} diff --git a/tests/Iyzipay/Tests/Model/Subscription/SubscriptionListTest.php b/tests/Iyzipay/Tests/Model/Subscription/SubscriptionListTest.php new file mode 100644 index 00000000..c51e33f7 --- /dev/null +++ b/tests/Iyzipay/Tests/Model/Subscription/SubscriptionListTest.php @@ -0,0 +1,26 @@ +setPage(1); + $request->setCount(10); + $request->setSubscriptionStatus(\Iyzipay\Model\Status::ACTIVE); + $request->setSubscriptionReferenceCode('c8ab43da-f4b3-40d2-b1ef-620da93ec3e9'); + $request->setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + $request->setPricingPlanReferenceCode('c1d489b6-9adc-42fa-88ae-47ea2e5dbe1e'); + $request->setParentReferenceCode('f219267d-ce05-4039-a773-225ea44aacd1'); + $request->setStartDate('2024-01-01'); + $request->setEndDate('2024-02-02'); + + $this->expectHttpGetV2(); + $list = SubscriptionList::create($request, $this->options); + $this->verifyResource($list); + } +} diff --git a/tests/Iyzipay/Tests/Request/Subscription/SubscriptionDeleteCustomerRequestTest.php b/tests/Iyzipay/Tests/Request/Subscription/SubscriptionDeleteCustomerRequestTest.php new file mode 100644 index 00000000..35efb63c --- /dev/null +++ b/tests/Iyzipay/Tests/Request/Subscription/SubscriptionDeleteCustomerRequestTest.php @@ -0,0 +1,21 @@ +prepareRequest(); + $jsonObject = $request->getJsonObject(); + + $this->assertEquals('566b2e1a-5046-4438-9b62-c8cf761f61d1', $jsonObject['customerReferenceCode']); + } + + private function prepareRequest() { + $request = new SubscriptionDeleteCustomerRequest(); + $request->setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + return $request; + } +} diff --git a/tests/Iyzipay/Tests/Request/Subscription/SubscriptionListRequestTest.php b/tests/Iyzipay/Tests/Request/Subscription/SubscriptionListRequestTest.php new file mode 100644 index 00000000..08350ac5 --- /dev/null +++ b/tests/Iyzipay/Tests/Request/Subscription/SubscriptionListRequestTest.php @@ -0,0 +1,37 @@ +prepareRequest(); + $jsonObject = $request->getJsonObject(); + + $this->assertEquals(1, $jsonObject['page']); + $this->assertEquals(10, $jsonObject['count']); + $this->assertEquals(\Iyzipay\Model\Status::ACTIVE, $jsonObject['subscriptionStatus']); + $this->assertEquals('c8ab43da-f4b3-40d2-b1ef-620da93ec3e9', $jsonObject['subscriptionReferenceCode']); + $this->assertEquals('566b2e1a-5046-4438-9b62-c8cf761f61d1', $jsonObject['customerReferenceCode']); + $this->assertEquals('c1d489b6-9adc-42fa-88ae-47ea2e5dbe1e', $jsonObject['pricingPlanReferenceCode']); + $this->assertEquals('f219267d-ce05-4039-a773-225ea44aacd1', $jsonObject['parentReferenceCode']); + $this->assertEquals('2024-01-01', $jsonObject['startDate']); + $this->assertEquals('2024-02-02', $jsonObject['endDate']); + } + + private function prepareRequest(): SubscriptionListRequest { + $request = new SubscriptionListRequest(); + $request->setPage(1); + $request->setCount(10); + $request->setSubscriptionStatus(\Iyzipay\Model\Status::ACTIVE); + $request->setSubscriptionReferenceCode('c8ab43da-f4b3-40d2-b1ef-620da93ec3e9'); + $request->setCustomerReferenceCode('566b2e1a-5046-4438-9b62-c8cf761f61d1'); + $request->setPricingPlanReferenceCode('c1d489b6-9adc-42fa-88ae-47ea2e5dbe1e'); + $request->setParentReferenceCode('f219267d-ce05-4039-a773-225ea44aacd1'); + $request->setStartDate('2024-01-01'); + $request->setEndDate('2024-02-02'); + return $request; + } +} diff --git a/tests/Iyzipay/Tests/TestCase.php b/tests/Iyzipay/Tests/TestCase.php index d094c4de..cd62f6e3 100644 --- a/tests/Iyzipay/Tests/TestCase.php +++ b/tests/Iyzipay/Tests/TestCase.php @@ -2,13 +2,14 @@ namespace Iyzipay\Tests; +use PHPUnit\Framework\TestCase as BaseTestCase; use Iyzipay\Options; -class TestCase extends \PHPUnit_Framework_TestCase +class TestCase extends BaseTestCase { protected $options; - protected function setUp() + protected function setUp(): void { $this->options = new Options(); $this->options->setApiKey("apiKey"); @@ -33,4 +34,4 @@ public function retrieveJsonFile($file) { return file_get_contents(__DIR__ . '/mock/' . $file, true); } -} \ No newline at end of file +}