package updates
This commit is contained in:
+596
@@ -0,0 +1,596 @@
|
||||
<?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']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user