sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
596 lines
16 KiB
596 lines
16 KiB
<?php
|
|
/**
|
|
* Nexmo Client Library for PHP
|
|
*
|
|
* @copyright Copyright (c) 2016 Nexmo, Inc. (http://nexmo.com)
|
|
* @license https://github.com/Nexmo/nexmo-php/blob/master/LICENSE.txt MIT License
|
|
*/
|
|
|
|
namespace Nexmo\Verify;
|
|
|
|
use Nexmo\Client\Exception\Request as RequestException;
|
|
use Nexmo\Entity\JsonResponseTrait;
|
|
use Nexmo\Entity\Psr7Trait;
|
|
use Nexmo\Entity\RequestArrayTrait;
|
|
|
|
class Verification implements VerificationInterface, \ArrayAccess, \Serializable
|
|
{
|
|
use Psr7Trait;
|
|
use RequestArrayTrait;
|
|
use JsonResponseTrait;
|
|
|
|
/**
|
|
* Possible verification statuses.
|
|
*/
|
|
const FAILED = 'FAILED';
|
|
const SUCCESSFUL = 'SUCCESSFUL';
|
|
const EXPIRED = 'EXPIRED';
|
|
const IN_PROGRESS = 'IN PROGRESS';
|
|
|
|
protected $dirty = true;
|
|
|
|
/**
|
|
* @var Client;
|
|
*/
|
|
protected $client;
|
|
|
|
/**
|
|
* Create a verification with a number and brand, or the `request_id` of an existing verification.
|
|
*
|
|
* @param string $idOrNumber The number to verify, or the `request_id` of an existing verification.
|
|
* @param null|string $brand The brand that identifies your application to the user.
|
|
* @param array $additional Additional parameters can be set as keys / values.
|
|
*/
|
|
public function __construct($idOrNumber, $brand = null, $additional = [])
|
|
{
|
|
if(is_null($brand)){
|
|
$this->dirty = false;
|
|
$this->requestData['request_id'] = $idOrNumber;
|
|
} else {
|
|
$this->dirty = true;
|
|
$this->requestData['number'] = $idOrNumber;
|
|
$this->requestData['brand'] = $brand;
|
|
$this->requestData = array_merge($this->requestData, $additional);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow Verification to have actions.
|
|
*
|
|
* @param Client $client Verify Client
|
|
* @return $this
|
|
*/
|
|
public function setClient(Client $client)
|
|
{
|
|
$this->client = $client;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return Client
|
|
*/
|
|
protected function useClient()
|
|
{
|
|
if(isset($this->client)){
|
|
return $this->client;
|
|
}
|
|
|
|
throw new \RuntimeException('can not act on the verification directly unless a verify client has been set');
|
|
}
|
|
|
|
/**
|
|
* Check if the code is correct. Unlike the method it proxies, an invalid code does not throw an exception.
|
|
*
|
|
* @uses \Nexmo\Verify\Client::check()
|
|
* @param string $code Numeric code provided by the user.
|
|
* @param null|string $ip IP address to be used for the verification.
|
|
* @return bool Code is valid.
|
|
* @throws RequestException
|
|
*/
|
|
public function check($code, $ip = null)
|
|
{
|
|
try {
|
|
$this->useClient()->check($this, $code, $ip);
|
|
return true;
|
|
} catch(RequestException $e) {
|
|
if($e->getCode() == 16 || $e->getCode() == 17){
|
|
return false;
|
|
}
|
|
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Cancel the verification.
|
|
*
|
|
* @uses \Nexmo\Verify\Client::cancel()
|
|
*/
|
|
public function cancel()
|
|
{
|
|
$this->useClient()->cancel($this);
|
|
}
|
|
|
|
/**
|
|
* Trigger the next verification.
|
|
*
|
|
* @uses \Nexmo\Verify\Client::trigger()
|
|
*/
|
|
public function trigger()
|
|
{
|
|
$this->useClient()->trigger($this);
|
|
}
|
|
|
|
/**
|
|
* Update Verification from the API.
|
|
*
|
|
* @uses \Nexmo\Verify\Client::search()
|
|
*/
|
|
public function sync()
|
|
{
|
|
$this->useClient()->search($this);
|
|
}
|
|
|
|
/**
|
|
* Check if the user provided data has sent to the API yet.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isDirty()
|
|
{
|
|
return $this->dirty;
|
|
}
|
|
|
|
/**
|
|
* If do not set number in international format or you are not sure if number is correctly formatted, set country
|
|
* with the two-character country code. For example, GB, US. Verify works out the international phone number for
|
|
* you.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $country
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setCountry($country)
|
|
{
|
|
return $this->setRequestData('country', $country);
|
|
}
|
|
|
|
/**
|
|
* An 11 character alphanumeric string to specify the SenderID for SMS sent by Verify. Depending on the destination
|
|
* of the phone number you are applying, restrictions may apply. By default, sender_id is VERIFY.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $id
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setSenderId($id)
|
|
{
|
|
return $this->setRequestData('sender_id', $id);
|
|
}
|
|
|
|
/**
|
|
* The length of the PIN. Possible values are 6 or 4 characters. The default value is 4.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $length
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setCodeLength($length)
|
|
{
|
|
return $this->setRequestData('code_length', $length);
|
|
}
|
|
|
|
/**
|
|
* By default, TTS are generated in the locale that matches number. For example, the TTS for a 33* number is sent in
|
|
* French. Use this parameter to explicitly control the language, accent and gender used for the Verify request. The
|
|
* default language is en-us.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $language
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setLanguage($language)
|
|
{
|
|
return $this->setRequestData('lg', $language);
|
|
}
|
|
|
|
/**
|
|
* Restrict verification to a certain network type. Possible values are:
|
|
* - All (Default)
|
|
* - Mobile
|
|
* - Landline
|
|
*
|
|
* Note: contact support@nexmo.com to enable this feature.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $type
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setRequireType($type)
|
|
{
|
|
return $this->setRequestData('require_type', $type);
|
|
}
|
|
|
|
/**
|
|
* The PIN validity time from generation. This is an integer value between 30 and 3600 seconds. The default is 300
|
|
* seconds. When specified together, pin_expiry must be an integer multiple of next_event_wait. Otherwise,
|
|
* pin_expiry is set to next_event_wait.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $time
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setPinExpiry($time)
|
|
{
|
|
return $this->setRequestData('pin_expiry', $time);
|
|
}
|
|
|
|
/**
|
|
* An integer value between 60 and 900 seconds inclusive that specifies the wait time between attempts to deliver
|
|
* the PIN. Verify calculates the default value based on the average time taken by users to complete verification.
|
|
* @link https://docs.nexmo.com/verify/api-reference/api-reference#vrequest
|
|
*
|
|
* Can only be set before the verification is created.
|
|
* @uses \Nexmo\Entity\RequestArrayTrait::setRequestData
|
|
*
|
|
* @param $time
|
|
* @return $this
|
|
* @throws \Exception
|
|
*/
|
|
public function setWaitTime($time)
|
|
{
|
|
return $this->setRequestData('next_event_wait', $time);
|
|
}
|
|
|
|
/**
|
|
* Get the verification request id, if available.
|
|
*
|
|
* @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getRequestId()
|
|
{
|
|
return $this->proxyArrayAccess('request_id');
|
|
}
|
|
|
|
/**
|
|
* Get the number verified / to be verified.
|
|
*
|
|
* @see \Nexmo\Verify\Verification::__construct()
|
|
* @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getNumber()
|
|
{
|
|
return $this->proxyArrayAccess('number');
|
|
}
|
|
|
|
/**
|
|
* Get the account id, if available.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getAccountId()
|
|
{
|
|
return $this->proxyArrayAccess('account_id');
|
|
}
|
|
|
|
/**
|
|
* Get the sender id, if available.
|
|
*
|
|
* @see \Nexmo\Verify\Verification::setSenderId();
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getSenderId()
|
|
{
|
|
return $this->proxyArrayAccess('sender_id');
|
|
}
|
|
|
|
/**
|
|
* Get the price of the verification, if available.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getPrice()
|
|
{
|
|
return $this->proxyArrayAccess('price');
|
|
}
|
|
|
|
/**
|
|
* Get the currency used to price the verification, if available.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getCurrency()
|
|
{
|
|
return $this->proxyArrayAccess('currency');
|
|
}
|
|
|
|
/**
|
|
* Get the status of the verification, if available.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function getStatus()
|
|
{
|
|
return $this->proxyArrayAccess('status');
|
|
}
|
|
|
|
/**
|
|
* Get an array of verification checks, if available. Will return an empty array if no check have been made, or if
|
|
* the data is not available.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @return \Nexmo\Verify\Check[]|\Nexmo\Verify\Check
|
|
*/
|
|
public function getChecks()
|
|
{
|
|
$checks = $this->proxyArrayAccess('checks');
|
|
if(!$checks){
|
|
return [];
|
|
}
|
|
|
|
foreach($checks as $i => $check) {
|
|
$checks[$i] = new Check($check);
|
|
}
|
|
|
|
return $checks;
|
|
}
|
|
|
|
/**
|
|
* Get the date the verification started.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccessDate()
|
|
*
|
|
* @return \DateTime|null
|
|
*/
|
|
public function getSubmitted()
|
|
{
|
|
return $this->proxyArrayAccessDate('date_submitted');
|
|
}
|
|
|
|
/**
|
|
* Get the date the verification stopped.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccessDate()
|
|
*
|
|
* @return \DateTime|null
|
|
*/
|
|
public function getFinalized()
|
|
{
|
|
return $this->proxyArrayAccessDate('date_finalized');
|
|
}
|
|
|
|
/**
|
|
* Get the date of the first verification event.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccessDate()
|
|
*
|
|
* @return \DateTime|null
|
|
*/
|
|
public function getFirstEvent()
|
|
{
|
|
return $this->proxyArrayAccessDate('first_event_date');
|
|
}
|
|
|
|
/**
|
|
* Get the date of the last verification event.
|
|
*
|
|
* Only available after a searching for a verification.
|
|
* @see \Nexmo\Verify\Client::search();
|
|
*
|
|
* However still @uses \Nexmo\Verify\Verification::proxyArrayAccessDate()
|
|
*
|
|
* @return \DateTime|null
|
|
*/
|
|
public function getLastEvent()
|
|
{
|
|
return $this->proxyArrayAccessDate('last_event_date');
|
|
}
|
|
|
|
/**
|
|
* Proxies `proxyArrayAccess()` and returns a DateTime if the parameter is found.
|
|
* @uses \Nexmo\Verify\Verification::proxyArrayAccess()
|
|
*
|
|
* @param string $param Parameter to look for.
|
|
* @return \DateTime
|
|
*/
|
|
protected function proxyArrayAccessDate($param)
|
|
{
|
|
$date = $this->proxyArrayAccess($param);
|
|
if($date) {
|
|
return new \DateTime($date);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Simply proxies array access to check for a parameter in the response, request, or user provided data.
|
|
*
|
|
* @uses \Nexmo\Verify\Verification::offsetGet();
|
|
* @uses \Nexmo\Verify\Verification::offsetExists();
|
|
*
|
|
* @param string $param Parameter to look for.
|
|
* @return mixed
|
|
*/
|
|
protected function proxyArrayAccess($param)
|
|
{
|
|
if(isset($this[$param])){
|
|
return $this[$param];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allow the object to access the data from the API response, a sent API request, or the user set data that the
|
|
* request will be created from - in that order.
|
|
*
|
|
* @param mixed $offset
|
|
* @return bool
|
|
* @throws \Exception
|
|
*/
|
|
public function offsetExists($offset)
|
|
{
|
|
$response = $this->getResponseData();
|
|
$request = $this->getRequestData();
|
|
$dirty = $this->requestData;
|
|
return isset($response[$offset]) || isset($request[$offset]) || isset($dirty[$offset]);
|
|
}
|
|
|
|
/**
|
|
* Allow the object to access the data from the API response, a sent API request, or the user set data that the
|
|
* request will be created from - in that order.
|
|
*
|
|
* @param mixed $offset
|
|
* @return mixed
|
|
* @throws \Exception
|
|
*/
|
|
public function offsetGet($offset)
|
|
{
|
|
$response = $this->getResponseData();
|
|
$request = $this->getRequestData();
|
|
$dirty = $this->requestData;
|
|
|
|
if(isset($response[$offset])){
|
|
return $response[$offset];
|
|
}
|
|
|
|
if(isset($request[$offset])){
|
|
return $request[$offset];
|
|
}
|
|
|
|
if(isset($dirty[$offset])){
|
|
return $dirty[$offset];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* All properties are read only.
|
|
*
|
|
* @param mixed $offset
|
|
* @param mixed $value
|
|
*/
|
|
public function offsetSet($offset, $value)
|
|
{
|
|
throw $this->getReadOnlyException($offset);
|
|
}
|
|
|
|
/**
|
|
* All properties are read only.
|
|
*
|
|
* @param mixed $offset
|
|
*/
|
|
public function offsetUnset($offset)
|
|
{
|
|
throw $this->getReadOnlyException($offset);
|
|
}
|
|
|
|
/**
|
|
* All properties are read only.
|
|
*
|
|
* @param $offset
|
|
* @return \RuntimeException
|
|
*/
|
|
protected function getReadOnlyException($offset)
|
|
{
|
|
return new \RuntimeException(sprintf(
|
|
'can not modify `%s` using array access',
|
|
$offset
|
|
));
|
|
}
|
|
|
|
public function serialize()
|
|
{
|
|
$data = [
|
|
'requestData' => $this->requestData
|
|
];
|
|
|
|
if($request = $this->getRequest()){
|
|
$data['request'] = \Zend\Diactoros\Request\Serializer::toString($request);
|
|
}
|
|
|
|
if($response = $this->getResponse()){
|
|
$data['response'] = \Zend\Diactoros\Response\Serializer::toString($response);
|
|
}
|
|
|
|
return serialize($data);
|
|
}
|
|
|
|
public function unserialize($serialized)
|
|
{
|
|
$data = unserialize($serialized);
|
|
|
|
$this->requestData = $data['requestData'];
|
|
|
|
if(isset($data['request'])){
|
|
$this->request = \Zend\Diactoros\Request\Serializer::fromString($data['request']);
|
|
}
|
|
|
|
if(isset($data['response'])){
|
|
$this->response = \Zend\Diactoros\Response\Serializer::fromString($data['response']);
|
|
}
|
|
}
|
|
|
|
|
|
}
|