/home/kueuepay/public_html/vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php
<?php

/*
 Copyright (c) 2009 hamcrest.org
 */

/**
 * Represents a single static factory method from a {@link Matcher} class.
 *
 * @todo Search method in file contents for func_get_args() to replace factoryVarArgs.
 */
class FactoryMethod
{
    /**
     * @var FactoryClass
     */
    private $class;

    /**
     * @var ReflectionMethod
     */
    private $reflector;

    /**
     * @var array of string
     */
    private $comment;

    /**
     * @var bool
     */
    private $isVarArgs;

    /**
     * @var array of FactoryCall
     */
    private $calls;

    /**
     * @var array FactoryParameter
     */
    private $parameters;

    public function __construct(FactoryClass $class, ReflectionMethod $reflector)
    {
        $this->class = $class;
        $this->reflector = $reflector;
        $this->extractCommentWithoutLeadingShashesAndStars();
        $this->extractFactoryNamesFromComment();
        $this->extractParameters();
    }

    public function extractCommentWithoutLeadingShashesAndStars()
    {
        $this->comment = explode("\n", $this->reflector->getDocComment());
        foreach ($this->comment as &$line) {
            $line = preg_replace('#^\s*(/\\*+|\\*+/|\\*)\s?#', '', $line);
        }
        $this->trimLeadingBlankLinesFromComment();
        $this->trimTrailingBlankLinesFromComment();
    }

    public function trimLeadingBlankLinesFromComment()
    {
        while (count($this->comment) > 0) {
            $line = array_shift($this->comment);
            if (trim($line) != '') {
                array_unshift($this->comment, $line);
                break;
            }
        }
    }

    public function trimTrailingBlankLinesFromComment()
    {
        while (count($this->comment) > 0) {
            $line = array_pop($this->comment);
            if (trim($line) != '') {
                array_push($this->comment, $line);
                break;
            }
        }
    }

    public function extractFactoryNamesFromComment()
    {
        $this->calls = array();
        for ($i = 0; $i < count($this->comment); $i++) {
            if ($this->extractFactoryNamesFromLine($this->comment[$i])) {
                unset($this->comment[$i]);
            }
        }
        $this->trimTrailingBlankLinesFromComment();
    }

    public function extractFactoryNamesFromLine($line)
    {
        if (preg_match('/^\s*@factory(\s+(.+))?$/', $line, $match)) {
            $this->createCalls(
                $this->extractFactoryNamesFromAnnotation(
                    isset($match[2]) ? trim($match[2]) : null
                )
            );
            return true;
        }
        return false;
    }

    public function extractFactoryNamesFromAnnotation($value)
    {
        $primaryName = $this->reflector->getName();
        if (empty($value)) {
            return array($primaryName);
        }
        preg_match_all('/(\.{3}|-|[a-zA-Z_][a-zA-Z_0-9]*)/', $value, $match);
        $names = $match[0];
        if (in_array('...', $names)) {
            $this->isVarArgs = true;
        }
        if (!in_array('-', $names) && !in_array($primaryName, $names)) {
            array_unshift($names, $primaryName);
        }
        return $names;
    }

    public function createCalls(array $names)
    {
        $names = array_unique($names);
        foreach ($names as $name) {
            if ($name != '-' && $name != '...') {
                $this->calls[] = new FactoryCall($this, $name);
            }
        }
    }

    public function extractParameters()
    {
        $this->parameters = array();
        if (!$this->isVarArgs) {
            foreach ($this->reflector->getParameters() as $parameter) {
                $this->parameters[] = new FactoryParameter($this, $parameter);
            }
        }
    }

    public function getParameterDeclarations()
    {
        if ($this->isVarArgs || !$this->hasParameters()) {
            return '';
        }
        $params = array();
        foreach ($this->parameters as /** @var $parameter FactoryParameter */
                 $parameter) {
            $params[] = $parameter->getDeclaration();
        }
        return implode(', ', $params);
    }

    public function getParameterInvocations()
    {
        if ($this->isVarArgs) {
            return '';
        }
        $params = array();
        foreach ($this->parameters as $parameter) {
            $params[] = $parameter->getInvocation();
        }
        return implode(', ', $params);
    }


    public function getClass()
    {
        return $this->class;
    }

    public function getClassName()
    {
        return $this->class->getName();
    }

    public function getName()
    {
        return $this->reflector->name;
    }

    public function isFactory()
    {
        return count($this->calls) > 0;
    }

    public function getCalls()
    {
        return $this->calls;
    }

    public function acceptsVariableArguments()
    {
        return $this->isVarArgs;
    }

    public function hasParameters()
    {
        return !empty($this->parameters);
    }

    public function getParameters()
    {
        return $this->parameters;
    }

    public function getFullName()
    {
        return $this->getClassName() . '::' . $this->getName();
    }

    public function getCommentText()
    {
        return implode("\n", $this->comment);
    }

    public function getComment($indent = '')
    {
        $comment = $indent . '/**';
        foreach ($this->comment as $line) {
            $comment .= "\n" . rtrim($indent . ' * ' . $line);
        }
        $comment .= "\n" . $indent . ' */';
        return $comment;
    }
}
Initiate Payment

Initiate Payment

Initiates a new payment transaction.

Endpoint: POST create-order
Parameter Type Details
amount decimal Your Amount , Must be rounded at 2 precision.
currency string Currency Code, Must be in Upper Case (Alpha-3 code)
success_url string Enter your return or success URL
cancel_url string (optional) Enter your cancel or failed URL
                    
                        Request Example (guzzle)
                        

<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $base_url.'create-order', [
'headers' => [
  'Authorization' => 'Bearer '. $authorizationToken,
  'accept' => 'application/json',
  'content-type' => 'application/json',
 ],
'form_params' => [
  'amount' => '$amount',
  'currency' => 'currency',
  'success_url' => 'success_url',
  'cancel_url' => 'cancel_url',
 ],
]);
echo $response->getBody();
                    
                        
**Response: SUCCESS (200 OK)**
{
 "message": {
 "success": [
  "Order created successfully."
 ]
},
"data": {
 "redirect_url":"https://example.com/login/OISADFDFSDFSF",
 "order_details":{
 "amount" : "10",
 "fixed_charge" : 2,
 "percent_charge" : 1,
 "total_charge" : 3,
 "total_payable" : 13,
 "currency" : "USD",
 "expiry_time": "2024-04-25T06:48:35.984285Z",
 "success_url": "http://127.0.0.1/nfcpay/user/transaction/success",
 "cancel_url": "http://127.0.0.1/nfcpay/user/transaction/cancel"
}
},
"type": "success"
}
                    
                        
**Response: ERROR (400 FAILED)**
{
 "message": {
 "error": [
  "Invalid token."
 ]
},
"data": null,
"type": "error"
}