Skip to content

Commit

Permalink
Sdk 2357 php failure receipt error details (#355)
Browse files Browse the repository at this point in the history
added failure receipt error details
  • Loading branch information
mehmet-yoti authored Jun 24, 2024
1 parent 47e15f4 commit 80251fd
Show file tree
Hide file tree
Showing 10 changed files with 158 additions and 12 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ coverage
.scannerwork

.DS_Store
.php-cs-fixer.cache
2 changes: 1 addition & 1 deletion .php-cs-fixer.cache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"php":"8.1.29","version":"3.59.3:v3.59.3#30ba9ecc2b0e5205e578fe29973c15653d9bfd29","indent":" ","lineEnding":"\n","rules":{"array_syntax":{"syntax":"short"},"no_unused_imports":true,"ordered_imports":{"imports_order":["const","class","function"]},"php_unit_fqcn_annotation":true,"phpdoc_return_self_reference":true,"phpdoc_scalar":true},"hashes":{"\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder861\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"6df4324fbc01516f544e380a2fcdad1d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder3196\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"81fbf5d555938c2c1693fa70c5d2f06b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder10280\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"6df4324fbc01516f544e380a2fcdad1d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder2372\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"81fbf5d555938c2c1693fa70c5d2f06b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder12059\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"01fd3c6b4102578a5cbe7b9ca5a9620b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder4216\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"2b29b8fd1369f029fdd2626aff9574a1","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7923\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"a92ce4d8cf8cba9fc31b0b862a238e7d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder9888\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"99cf5679ad3fbe693f1318efc4c7562e","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7837\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"29258793b15beceaafceef4b742beca0","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder5368\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"9f3471f97753fd479ff323dbab8f8ff8","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder9615\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"fa7416c72cb9a21e375a580d0711b4a3","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder2220\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"3f1b675e645966f11d6fe283ff3d1a5c","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder10144\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"9f3471f97753fd479ff323dbab8f8ff8","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7956\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"29258793b15beceaafceef4b742beca0"}}
{"php":"8.1.29","version":"3.59.3:v3.59.3#30ba9ecc2b0e5205e578fe29973c15653d9bfd29","indent":" ","lineEnding":"\n","rules":{"array_syntax":{"syntax":"short"},"no_unused_imports":true,"ordered_imports":{"imports_order":["const","class","function"]},"php_unit_fqcn_annotation":true,"phpdoc_return_self_reference":true,"phpdoc_scalar":true},"hashes":{"\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder861\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"6df4324fbc01516f544e380a2fcdad1d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder3196\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"81fbf5d555938c2c1693fa70c5d2f06b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder10280\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"6df4324fbc01516f544e380a2fcdad1d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder2372\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"81fbf5d555938c2c1693fa70c5d2f06b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder12059\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"01fd3c6b4102578a5cbe7b9ca5a9620b","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder4216\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"2b29b8fd1369f029fdd2626aff9574a1","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7923\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"a92ce4d8cf8cba9fc31b0b862a238e7d","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder9888\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"99cf5679ad3fbe693f1318efc4c7562e","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7837\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"29258793b15beceaafceef4b742beca0","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder5368\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"9f3471f97753fd479ff323dbab8f8ff8","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder9615\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"fa7416c72cb9a21e375a580d0711b4a3","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder2220\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"3f1b675e645966f11d6fe283ff3d1a5c","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder10144\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/FailureReasonResponse.php":"9f3471f97753fd479ff323dbab8f8ff8","\/private\/var\/folders\/hs\/kw0d0_0d2kj8xl5yd5_t2rz40000gn\/T\/PHP CS Fixertemp_folder7956\/src\/DocScan\/Session\/Retrieve\/IdentityProfile\/RequirementNotMetDetails.php":"29258793b15beceaafceef4b742beca0"}}
2 changes: 1 addition & 1 deletion examples/doc-scan/app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public function show(Request $request, DocScanClient $client)
->withSources($searchProfileSources)
->withShareUrl(false)
->withRemoveDeceased(true)
->withApiKey('qiKTHG7Mgqj31mK2d21F7QPpaVBp9zKc')
->withApiKey('api-key')
->withClientRef("string")
->withMonitoring(true)
->withTags(['tag1'])
Expand Down
37 changes: 37 additions & 0 deletions src/Identity/ErrorReason.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace Yoti\Identity;

class ErrorReason
{
/**
* @var RequirementNotMetDetails
*/
private $requirementNotMetDetails;

/**
* @param array<int, array<string, string>> $data
*/
public function __construct(array $data)
{
if (isset($data[0])) {
$this->requirementNotMetDetails = new RequirementNotMetDetails($data);
} else {
$this->requirementNotMetDetails = new RequirementNotMetDetails([[
"failure_type" => '',
"details" => '',
"audit_id" => '',
"document_country_iso_code" => '',
"document_type" => ''
]]);
}
}

/**
* @return RequirementNotMetDetails
*/
public function getRequirementNotMetDetails(): RequirementNotMetDetails
{
return $this->requirementNotMetDetails;
}
}
17 changes: 9 additions & 8 deletions src/Identity/Receipt.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,14 @@
class Receipt
{
private string $id;

private string $sessionId;

private \DateTime $timestamp;

private ApplicationContent $applicationContent;

private UserContent $userContent;

private ?string $rememberMeId;

private ?string $parentRememberMeId;

private ?string $error;
private ?ErrorReason $errorReason;

public function __construct(
string $id,
Expand All @@ -33,7 +27,8 @@ public function __construct(
UserContent $userContent,
?string $rememberMeId,
?string $parentRememberMeId,
?string $error
?string $error,
?ErrorReason $errorReason
) {
$this->id = $id;
$this->sessionId = $sessionId;
Expand All @@ -43,6 +38,7 @@ public function __construct(
$this->rememberMeId = $rememberMeId;
$this->parentRememberMeId = $parentRememberMeId;
$this->error = $error;
$this->errorReason = $errorReason;
}

public function getId(): string
Expand Down Expand Up @@ -94,4 +90,9 @@ public function getError(): ?string
{
return $this->error;
}

public function getErrorReason(): ?ErrorReason
{
return $this->errorReason;
}
}
10 changes: 10 additions & 0 deletions src/Identity/ReceiptBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class ReceiptBuilder
private ?string $parentRememberMeId = null;

private ?string $error = null;
private ?ErrorReason $errorReason = null;


public function withId(string $id): self
{
Expand Down Expand Up @@ -82,6 +84,13 @@ public function withError(string $error = null): self
return $this;
}

public function withErrorReason(ErrorReason $errorReason = null): self
{
$this->errorReason = $errorReason;

return $this;
}

public function build(): Receipt
{
return new Receipt(
Expand All @@ -93,6 +102,7 @@ public function build(): Receipt
$this->rememberMeId,
$this->parentRememberMeId,
$this->error,
$this->errorReason
);
}
}
1 change: 1 addition & 0 deletions src/Identity/ReceiptParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public function createFailure(WrappedReceipt $wrappedReceipt): Receipt
->withSessionId($wrappedReceipt->getSessionId())
->withTimestamp($wrappedReceipt->getTimestamp())
->withError($wrappedReceipt->getError())
->withErrorReason($wrappedReceipt->getErrorReason())
->build();
}

Expand Down
75 changes: 75 additions & 0 deletions src/Identity/RequirementNotMetDetails.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php

namespace Yoti\Identity;

class RequirementNotMetDetails
{
/**
* @var string
*/
private $failureType;
/**
* @var string
*/
private $documentType;
/**
* @var string
*/
private $documentCountryIsoCode;
/**
* @var string
*/
private $auditId;
/**
* @var string
*/
private $details;

/**
* @param array<int, array<string, string>> $data
*/
public function __construct(array $data)
{
$this->failureType = $data[0]["failure_type"] ?? '';
$this->details = $data[0]["details"] ?? '';
$this->auditId = $data[0]["audit_id"] ?? '';
$this->documentCountryIsoCode = $data[0]["document_country_iso_code"] ?? '';
$this->documentType = $data[0]["document_type"] ?? '';
}

/**
* @return string
*/
public function getFailureType(): string
{
return $this->failureType;
}
/**
* @return string
*/
public function getDetails(): string
{
return $this->details;
}
/**
* @return string
*/
public function getAuditId(): string
{
return $this->auditId;
}
/**
* @return string
*/
public function getDocumentCountryIsoCode(): string
{
return $this->documentCountryIsoCode;
}
/**
* @return string
*/
public function getDocumentType(): string
{
return $this->documentType;
}
}
13 changes: 13 additions & 0 deletions src/Identity/WrappedReceipt.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class WrappedReceipt
private ?string $parentRememberMeId = null;

private ?string $error = null;
private ?ErrorReason $errorReason = null;

/**
* @param array<string, mixed> $sessionData
Expand Down Expand Up @@ -62,6 +63,13 @@ public function __construct(array $sessionData)
if (isset($sessionData['error'])) {
$this->error = $sessionData['error'];
}
if (isset($sessionData['errorDetails'])) {
if (isset($sessionData["error_details"]["error_reason"]["requirements_not_met_details"])) {
$this->errorReason = new ErrorReason(
$sessionData['errorDetails']['error_reason']['requirements_not_met_details']
);
}
}
}

public function getId(): string
Expand Down Expand Up @@ -132,6 +140,11 @@ public function getError(): ?string
return $this->error;
}

public function getErrorReason(): ?ErrorReason
{
return $this->errorReason;
}

private function base64decode(string $encoded): string
{
$decoded = base64_decode($encoded, true);
Expand Down
12 changes: 10 additions & 2 deletions tests/Identity/ReceiptTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Yoti\Identity\Content\ApplicationContent;
use Yoti\Identity\Content\UserContent;
use Yoti\Identity\ErrorReason;
use Yoti\Identity\Receipt;
use Yoti\Identity\ReceiptBuilder;
use Yoti\Profile\ApplicationProfile;
Expand All @@ -20,6 +21,7 @@ class ReceiptTest extends TestCase
* @covers ::getProfile
* @covers ::getId
* @covers ::getError
* @covers ::getErrorReason
* @covers ::getApplicationContent
* @covers ::getTimestamp
* @covers ::getParentRememberMeId
Expand All @@ -38,6 +40,7 @@ public function testShouldBuildCorrectly()
$rememberId = 'SOME_REMEMBER_ID';
$parentRememberId = 'SOME_PARENT_REMEMBER_ID';
$someError = 'SOME_ERROR';
$someErrorReason = $this->createMock(ErrorReason::class);

$receipt = new Receipt(
$someId,
Expand All @@ -47,7 +50,8 @@ public function testShouldBuildCorrectly()
$userContent,
$rememberId,
$parentRememberId,
$someError
$someError,
$someErrorReason
);

$this->assertEquals($someId, $receipt->getId());
Expand All @@ -58,10 +62,12 @@ public function testShouldBuildCorrectly()
$this->assertEquals($rememberId, $receipt->getRememberMeId());
$this->assertEquals($parentRememberId, $receipt->getParentRememberMeId());
$this->assertEquals($someError, $receipt->getError());
$this->assertEquals($someErrorReason, $receipt->getErrorReason());
}

/**
* @covers \Yoti\Identity\ReceiptBuilder::withError
* @covers \Yoti\Identity\ReceiptBuilder::withErrorReason
* @covers \Yoti\Identity\ReceiptBuilder::withApplicationContent
* @covers \Yoti\Identity\ReceiptBuilder::withId
* @covers \Yoti\Identity\ReceiptBuilder::withTimestamp
Expand All @@ -81,6 +87,7 @@ public function testShouldBuildCorrectlyThroughBuilder()
$rememberId = 'SOME_REMEMBER_ID';
$parentRememberId = 'SOME_PARENT_REMEMBER_ID';
$someError = 'SOME_ERROR';
$someErrorReason = $this->createMock(ErrorReason::class);

$receipt = (new ReceiptBuilder())
->withId($someId)
Expand All @@ -91,9 +98,9 @@ public function testShouldBuildCorrectlyThroughBuilder()
->withRememberMeId($rememberId)
->withParentRememberMeId($parentRememberId)
->withError($someError)
->withErrorReason($someErrorReason)
->build();


$this->assertEquals($someId, $receipt->getId());
$this->assertEquals($sessionId, $receipt->getSessionId());
$this->assertEquals($someTime, $receipt->getTimestamp());
Expand All @@ -102,5 +109,6 @@ public function testShouldBuildCorrectlyThroughBuilder()
$this->assertEquals($rememberId, $receipt->getRememberMeId());
$this->assertEquals($parentRememberId, $receipt->getParentRememberMeId());
$this->assertEquals($someError, $receipt->getError());
$this->assertEquals($someErrorReason, $receipt->getErrorReason());
}
}

0 comments on commit 80251fd

Please sign in to comment.