Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sdk 2357 php failure receipt error details #355

Merged
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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the fields might not always be present in the $data array. Perhaps better to set these initially as null.

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());
}
}
Loading