Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,11 @@
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
verbose="true">

<testsuites>
<testsuite name="Unit Tests">
<directory>tests/Iyzipay/Tests</directory>
</testsuite>
</testsuites>

<filter>
<whitelist>
<directory>src/</directory>
</whitelist>
</filter>

<logging>
<log type="coverage-html" target="build/coverage" title="iyzipay-php"
charset="UTF-8" yui="true" highlight="true"
lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="build/logs/clover.xml"/>
<log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
</logging>
</phpunit>
32 changes: 32 additions & 0 deletions samples/create_threeds_v2_payment.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

require_once('config.php');
require_once('signature_verification.php');

# create request class
$request = new \Iyzipay\Request\CreateThreedsV2PaymentRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId("123456789");
$request->setPaymentId("25146302");
$request->setPaidPrice("1.2");
$request->setBasketId('B67832');
$request->setCurrency(\Iyzipay\Model\Currency::TL);

# make request
$threedsV2Payment = \Iyzipay\Model\ThreedsV2Payment::create($request, Config::options());

# print result
print_r($threedsV2Payment);

#verify signature
$paymentId = $threedsV2Payment->getPaymentId();
$currency = $threedsV2Payment->getCurrency();
$basketId = $threedsV2Payment->getBasketId();
$conversationId = $threedsV2Payment->getConversationId();
$paidPrice = $threedsV2Payment->getPaidPrice();
$price = $threedsV2Payment->getPrice();
$signature = $threedsV2Payment->getSignature();

$calculatedSignature = calculateHmacSHA256Signature(array($paymentId, $currency, $basketId, $conversationId, $paidPrice, $price));
$verified = $signature == $calculatedSignature;
echo "Signature verified: $verified";
13 changes: 0 additions & 13 deletions src/Iyzipay/HashGenerator.php

This file was deleted.

17 changes: 6 additions & 11 deletions src/Iyzipay/IyziAuthV2Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,28 @@ class IyziAuthV2Generator
public static function generateAuthContent($uri, $apiKey, $secretKey, $randomString, Request $request = null)
{
$hashStr = "apiKey:" . $apiKey . "&randomKey:" . $randomString ."&signature:" . self::getHmacSHA256Signature($uri, $secretKey, $randomString, $request);

$hashStr = base64_encode($hashStr);

return $hashStr;
return base64_encode($hashStr);
}

public static function getHmacSHA256Signature($uri, $secretKey, $randomString, Request $request = null)
{
$dataToEncrypt = $randomString . self::getPayload($uri, $request);

$hash = hash_hmac('sha256', $dataToEncrypt, $secretKey, true);
$token = bin2hex($hash);

return $token;
return bin2hex($hash);
}

public static function getPayload($uri, Request $request = null)
{
$uriPath = $uri;
$startsWithV2 = strpos($uri, '.com/v2');
$startNumber = strpos($uri, '/v2');
$endNumber = strpos($uri, '?');


if ($startNumber) {
if (strpos($uri, "subscription") || strpos($uri, "ucs")) {
if ($startNumber !== false && $startsWithV2) {
if (strpos($uri, "subscription") !== false || strpos($uri, "ucs") !== false) {
$endNumber = strlen($uri);
if (strpos($uri, '?')) {
if (strpos($uri, '?') !== false) {
$endNumber = strpos($uri, '?');
}
}
Expand Down
92 changes: 19 additions & 73 deletions src/Iyzipay/IyzipayResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

namespace Iyzipay;

class IyzipayResource extends ApiResource
{
class IyzipayResource extends ApiResource {
private $status;
private $errorCode;
private $errorMessage;
Expand All @@ -12,132 +11,79 @@ class IyzipayResource extends ApiResource
private $systemTime;
private $conversationId;

protected static function getHttpHeaders(Request $request, Options $options)
{
$header = array(
"Accept: application/json",
"Content-type: application/json",
);

$rnd = uniqid();
array_push($header, "Authorization: " . self::prepareAuthorizationString($request, $options, $rnd));
array_push($header, "x-iyzi-rnd: " . $rnd);
array_push($header, "x-iyzi-client-version: " . "iyzipay-php-2.0.59");

return $header;
}

protected static function getHttpHeadersV2($uri, Request $request = null, Options $options, bool $addRandom = false)
{
protected static function getHttpHeadersV2($uri, Request $request = null, Options $options) {
$header = array(
"Accept: application/json",
"Content-type: application/json",
);

$rnd = uniqid();
array_push($header, "Authorization: " . self::prepareAuthorizationStringV2($uri, $request, $options, $rnd));
$addRandom && array_push($header, "x-iyzi-rnd: " . $rnd);
array_push($header, "AUTHORIZATION_FALLBACK_HEADER: " . self::prepareAuthorizationString($request, $options, $rnd));
array_push($header, "x-iyzi-client-version: " . "iyzipay-php-2.0.59");
$header[] = "Authorization: " . self::prepareAuthorizationStringV2($uri, $request, $options, $rnd);
$header[] = "x-iyzi-client-version: " . "iyzipay-php-2.0.59";

return $header;
}

protected static function getHttpHeadersIsV2($uri, Request $request = null, Options $options, bool $addRandom = false)
{
$header = array(
"Accept: application/json",
"Content-type: application/json",
);

$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.59");

return $header;
}

protected static function prepareAuthorizationString($request, Options $options, $rnd)
{
$authContent = HashGenerator::generateHash($options->getApiKey(), $options->getSecretKey(), $rnd, $request);
return vsprintf("IYZWS %s:%s", array($options->getApiKey(), $authContent));
}

protected static function prepareAuthorizationStringV2($uri, Request $request = null, Options $options, $rnd)
{
protected static function prepareAuthorizationStringV2($uri, Request $request = null, Options $options, $rnd) {
$hash = IyziAuthV2Generator::generateAuthContent($uri, $options->getApiKey(), $options->getSecretKey(), $rnd, $request);

return 'IYZWSv2' . ' ' . $hash;
}

public function getStatus()
{
public function getStatus() {
return $this->status;
}

public function setStatus($status)
{
public function setStatus($status) {
$this->status = $status;
}

public function getErrorCode()
{
public function getErrorCode() {
return $this->errorCode;
}

public function setErrorCode($errorCode)
{
public function setErrorCode($errorCode) {
$this->errorCode = $errorCode;
}

public function getErrorMessage()
{
public function getErrorMessage() {
return $this->errorMessage;
}

public function setErrorMessage($errorMessage)
{
public function setErrorMessage($errorMessage) {
$this->errorMessage = $errorMessage;
}

public function getErrorGroup()
{
public function getErrorGroup() {
return $this->errorGroup;
}

public function setErrorGroup($errorGroup)
{
public function setErrorGroup($errorGroup) {
$this->errorGroup = $errorGroup;
}

public function getLocale()
{
public function getLocale() {
return $this->locale;
}

public function setLocale($locale)
{
public function setLocale($locale) {
$this->locale = $locale;
}

public function getSystemTime()
{
public function getSystemTime() {
return $this->systemTime;
}

public function setSystemTime($systemTime)
{
public function setSystemTime($systemTime) {
$this->systemTime = $systemTime;
}

public function getConversationId()
{
public function getConversationId() {
return $this->conversationId;
}

public function setConversationId($conversationId)
{
public function setConversationId($conversationId) {
$this->conversationId = $conversationId;
}
}
2 changes: 1 addition & 1 deletion src/Iyzipay/Model/AmountBaseRefund.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class AmountBaseRefund extends IyzipayResource
public static function create(AmountBaseRefundRequest $request, Options $options): AmountBaseRefund
{
$uri = '/v2/payment/refund';
$rawResult = parent::httpClient()->post($options->getBaseUrl() . $uri, parent::getHttpHeadersV2($uri, $request, $options, true), $request->toJsonString());
$rawResult = parent::httpClient()->post($options->getBaseUrl() . $uri, parent::getHttpHeadersV2($uri, $request, $options), $request->toJsonString());
return AmountBaseRefundMapper::create($rawResult)->jsonDecode()->mapAmountBaseRefund(new AmountBaseRefund());
}

Expand Down
2 changes: 1 addition & 1 deletion src/Iyzipay/Model/Iyzilink/IyziLinkDeleteProduct.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class IyziLinkDeleteProduct extends IyziLinkDeleteProductResource
public static function create(Request $request, Options $options, $token)
{
$uri = $options->getBaseUrl() . "/v2/iyzilink/products/" . $token . RequestStringBuilder::requestToStringQuery($request, null);
$rawResult = parent::httpClient()->delete($uri, parent::getHttpHeadersIsV2($uri, null, $options));
$rawResult = parent::httpClient()->delete($uri, parent::getHttpHeadersV2($uri, null, $options));
return IyziLinkDeleteProductMapper::create($rawResult)->jsonDecode()->mapIyziLinkDeleteProduct(new IyziLinkDeleteProduct());
}
}
24 changes: 24 additions & 0 deletions src/Iyzipay/Model/Mapper/ThreedsV2PaymentMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Iyzipay\Model\Mapper;

use Iyzipay\Model\ThreedsV2Payment;

class ThreedsV2PaymentMapper extends PaymentResourceMapper
{
public static function create($rawResult = null)
{
return new ThreedsV2PaymentMapper($rawResult);
}

public function mapThreedsV2PaymentFrom(ThreedsV2Payment $auth, $jsonObject)
{
parent::mapPaymentResourceFrom($auth, $jsonObject);
return $auth;
}

public function mapThreedsV2Payment(ThreedsV2Payment $auth)
{
return $this->mapThreedsV2PaymentFrom($auth, $this->jsonObject);
}
}
2 changes: 1 addition & 1 deletion src/Iyzipay/Model/ReportingPaymentDetail.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class ReportingPaymentDetail extends ReportingPaymentDetailResource
public static function create(ReportingPaymentDetailRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/reporting/payment/details" . RequestStringBuilder::requestToStringQuery($request, 'reporting');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersIsV2($uri, null, $options));
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return ReportingPaymentDetailMapper::create($rawResult)->jsonDecode()->mapReportingPaymentDetail(new ReportingPaymentDetail());

}
Expand Down
8 changes: 4 additions & 4 deletions src/Iyzipay/Model/Subscription/RetrieveList.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,29 @@ class RetrieveList extends IyzipayResource
public static function products(SubscriptionListProductsRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/products" . RequestStringBuilder::requestToStringQuery($request, 'subscriptionItems');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersIsV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return RetrieveListMapper::create($rawResult)->jsonDecode()->mapRetrieveList(new RetrieveList());
}

public static function pricingPlan(SubscriptionListPricingPlanRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/products/" . $request->getProductReferenceCode() . "/pricing-plans" . RequestStringBuilder::requestToStringQuery($request, 'subscriptionItems');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersIsV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return RetrieveListMapper::create($rawResult)->jsonDecode()->mapRetrieveList(new RetrieveList());
}

public static function customers(SubscriptionListCustomersRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/customers" . RequestStringBuilder::requestToStringQuery($request, 'subscriptionItems');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersIsV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return RetrieveListMapper::create($rawResult)->jsonDecode()->mapRetrieveList(new RetrieveList());
}


public static function subscriptions(SubscriptionSearchRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/subscriptions" . RequestStringBuilder::requestToStringQuery($request, 'searchSubscription');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersIsV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return RetrieveListMapper::create($rawResult)->jsonDecode()->mapRetrieveList(new RetrieveList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class RetrieveSubscriptionCheckoutForm extends IyzipayResource
public static function retrieve(RetrieveSubscriptionCreateCheckoutFormRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/checkoutform/".$request->getCheckoutFormToken();
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, $request, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, $request, $options));
return RetrieveSubscriptionCheckoutFormMapper::create($rawResult)->jsonDecode()->mapSubscriptionCreateCheckoutForm(new RetrieveSubscriptionCheckoutForm());
}

Expand Down
2 changes: 1 addition & 1 deletion src/Iyzipay/Model/Subscription/SubscriptionCustomer.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public static function create(SubscriptionCreateCustomerRequest $request, Option
public static function retrieve(SubscriptionRetrieveCustomerRequest $request, $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/customers/".$request->getCustomerReferenceCode().RequestStringBuilder::requestToStringQuery($request, 'defaultParams');
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return SubscriptionCustomerMapper::create($rawResult)->jsonDecode()->mapSubscriptionCustomer(new SubscriptionCustomer());
}

Expand Down
2 changes: 1 addition & 1 deletion src/Iyzipay/Model/Subscription/SubscriptionDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class SubscriptionDetails extends IyzipayResource
public static function retrieve(SubscriptionDetailsRequest $request, Options $options)
{
$uri = $options->getBaseUrl() . "/v2/subscription/subscriptions/".$request->getSubscriptionReferenceCode().RequestStringBuilder::requestToStringQuery($request, 'defaultParams');;
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options), $request->toJsonString());
$rawResult = parent::httpClient()->getV2($uri, parent::getHttpHeadersV2($uri, null, $options));
return SubscriptionDetailsMapper::create($rawResult)->jsonDecode()->mapSubscriptionDetails(new SubscriptionDetails());
}

Expand Down
Loading