Add PHPdoc to all methods, minor code reorder

Move some methods around to have them together by call order logic.

Also update current test methods with composer based .env reader.
This commit is contained in:
2022-06-10 14:37:07 +09:00
parent ab95e1c21b
commit b26cc82055
16 changed files with 436 additions and 348 deletions

3
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
test/ export-ignore test/ export-ignore
.gitattributes export-ignore
phpstan.neon export-ignore phpstan.neon export-ignore
phpunit.xml export-ignore
psalm.xml export-ignore psalm.xml export-ignore
.phan/ export-ignore .phan/ export-ignore
.* export-ignore

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
vendor
.phpunit.result.cache
composer.lock

View File

@@ -25,6 +25,7 @@
"exclude": ["/test/", "/test/*", "/phpstan.neon", "/psalm.xml", "/.phan/", "/.vscode/", "/phpunit.xml"] "exclude": ["/test/", "/test/*", "/phpstan.neon", "/psalm.xml", "/.phan/", "/.vscode/", "/phpunit.xml"]
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9" "phpunit/phpunit": "^9",
"gullevek/dotenv": "dev-master"
} }
} }

View File

@@ -7,7 +7,7 @@
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
> >
<projectFiles> <projectFiles>
<directory name="src" /> <directory name="." />
<ignoreFiles> <ignoreFiles>
<directory name="vendor" /> <directory name="vendor" />
<directory name="test" /> <directory name="test" />

View File

@@ -12,26 +12,40 @@ use gullevek\AmazonIncentives\Response\CreateResponse;
class AWS class AWS
{ {
/** @var string What AWS Service to use: Gift Card on Demand (GCOD) */
public const SERVICE_NAME = 'AGCODService'; public const SERVICE_NAME = 'AGCODService';
/** @var string */
public const ACCEPT_HEADER = 'accept'; public const ACCEPT_HEADER = 'accept';
/** @var string content-type */
public const CONTENT_HEADER = 'content-type'; public const CONTENT_HEADER = 'content-type';
/** @var string */
public const HOST_HEADER = 'host'; public const HOST_HEADER = 'host';
/** @var string */
public const X_AMZ_DATE_HEADER = 'x-amz-date'; public const X_AMZ_DATE_HEADER = 'x-amz-date';
/** @var string */
public const X_AMZ_TARGET_HEADER = 'x-amz-target'; public const X_AMZ_TARGET_HEADER = 'x-amz-target';
/** @var string */
public const AUTHORIZATION_HEADER = 'Authorization'; public const AUTHORIZATION_HEADER = 'Authorization';
/** @var string type of encryption type */
public const AWS_SHA256_ALGORITHM = 'AWS4-HMAC-SHA256'; public const AWS_SHA256_ALGORITHM = 'AWS4-HMAC-SHA256';
/** @var string key type to use */
public const KEY_QUALIFIER = 'AWS4'; public const KEY_QUALIFIER = 'AWS4';
/** @var string */
public const TERMINATION_STRING = 'aws4_request'; public const TERMINATION_STRING = 'aws4_request';
/** @var string Service to use: Create Gift Card */
public const CREATE_GIFT_CARD_SERVICE = 'CreateGiftCard'; public const CREATE_GIFT_CARD_SERVICE = 'CreateGiftCard';
/** @var string Service to use: Cancle Gift Card */
public const CANCEL_GIFT_CARD_SERVICE = 'CancelGiftCard'; public const CANCEL_GIFT_CARD_SERVICE = 'CancelGiftCard';
/** @var string Service to use: Get Available Funds */
public const GET_AVAILABLE_FUNDS_SERVICE = 'GetAvailableFunds'; public const GET_AVAILABLE_FUNDS_SERVICE = 'GetAvailableFunds';
/** /** @var Config Configuration class with all settings */
* @var Config
*/
private $config; private $config;
/** /**
* Initialize the main AWS class. This class prepares and sends all the actions
* and returns reponses as defined in in the CreateResponse class
*
* @param Config $config * @param Config $config
*/ */
public function __construct(Config $config) public function __construct(Config $config)
@@ -41,9 +55,13 @@ class AWS
} }
/** /**
* @param float $amount * Bug a gift card
* @param string|null $creation_id *
* @return CreateResponse * @param float $amount Amount to buy a gifr card in set currencty
* @param string|null $creation_id Override creation id, if not set will
* be created automatically. If not valid error
* will be thrown
* @return CreateResponse Object with AWS response data
* *
* @throws AmazonErrors * @throws AmazonErrors
*/ */
@@ -64,9 +82,11 @@ class AWS
} }
/** /**
* @param string $creation_request_id * Cancle an ordered gift card, only possible within the the time limit
* @param string $gift_card_id *
* @return CancelResponse * @param string $creation_request_id Previously created creation request id
* @param string $gift_card_id Previously created gift card id
* @return CancelResponse Object with AWS response data
* *
* @throws AmazonErrors * @throws AmazonErrors
*/ */
@@ -87,7 +107,9 @@ class AWS
} }
/** /**
* @return CreateBalanceResponse * Get current account funds
*
* @return CreateBalanceResponse Object with AWS response data
* *
* @throws AmazonErrors * @throws AmazonErrors
*/ */
@@ -108,11 +130,17 @@ class AWS
} }
/** /**
* @param string $payload * General request method for all actions
* @param string $canonical_request * Calls the Client class that actually runs the json request
* @param string $service_operation * For service_operation valid data see AWS GCOD documentation
* @param string $date_time_string *
* @return string * @param string $payload The data needed for this request
* @param string $canonical_request Header data to send for this request
* @param string $service_operation Service operation. CREATE_GIFT_CARD_SERVICE,
* CANCEL_GIFT_CARD_SERVICE or
* GET_AVAILABLE_FUNDS_SERVICE constant values
* @param string $date_time_string Ymd\THis\Z encoded timestamp, getTimestamp()
* @return string Request result as string, json data
*/ */
public function makeRequest( public function makeRequest(
string $payload, string $payload,
@@ -156,16 +184,25 @@ class AWS
]]); ]]);
$url = 'https://' . $endpoint . '/' . $service_operation; $url = 'https://' . $endpoint . '/' . $service_operation;
$headers = $this->buildHeaders($payload, $authorization_value, $date_time_string, $service_target); $headers = $this->buildHeaders(
$payload,
$authorization_value,
$date_time_string,
$service_target
);
return (new Client())->request($url, $headers, $payload); return (new Client())->request($url, $headers, $payload);
} }
/** /**
* @param string $payload * Build the headers used in the makeRequest method.
* @param string $authorization_value * These are the HTML headers used with curl
* @param string $date_time_string *
* @param string $service_target * @param string $payload Paylout to create this header for
* @return array<mixed> * @param string $authorization_value Auth string
* @param string $date_time_string Ymd\THis\Z encoded timestamp, getTimestamp()
* @param string $service_target Target service in the agcod string:
* Value like com.amazonaws.agcod.<sn>.<so>
* @return array<mixed> Header data as array for curl request
*/ */
public function buildHeaders( public function buildHeaders(
string $payload, string $payload,
@@ -188,8 +225,33 @@ class AWS
} }
/** /**
* @param string $string_to_sign * The request string build with the actauly request data created by
* @return string * getCanonicalRequest(). This string is used in the auth signature call
*
* @param string $canonical_request_hash sha256 hash to build from
* @return string String to send to buildAuthSignature()
*/
public function buildStringToSign($canonical_request_hash): string
{
$AWS_SHA256_ALGORITHM = self::AWS_SHA256_ALGORITHM;
$TERMINATION_STRING = self::TERMINATION_STRING;
$SERVICE_NAME = self::SERVICE_NAME;
$region_name = $this->getRegion();
$date_time_string = $this->getTimestamp();
$date_string = $this->getDateString();
$string_to_sign = "$AWS_SHA256_ALGORITHM\n"
. "$date_time_string\n"
. "$date_string/$region_name/$SERVICE_NAME/$TERMINATION_STRING\n"
. "$canonical_request_hash";
return $string_to_sign;
}
/**
* Build the authentication signature used in the buildHeaders method
*
* @param string $string_to_sign Data to sign, buildStringToSign()
* @return string Authorized value as string
*/ */
public function buildAuthSignature(string $string_to_sign): string public function buildAuthSignature(string $string_to_sign): string
{ {
@@ -224,28 +286,12 @@ class AWS
} }
/** /**
* @param string $canonical_request_hash * Build the derived key to build the final hmac signature string
* @return string *
*/ * @param bool $rawOutput Set to true to create the hash based message
public function buildStringToSign($canonical_request_hash): string * authenticator string as normal text string or
{ * lowercase hexbits
$AWS_SHA256_ALGORITHM = self::AWS_SHA256_ALGORITHM; * @return string Derived key (hmac type)
$TERMINATION_STRING = self::TERMINATION_STRING;
$SERVICE_NAME = self::SERVICE_NAME;
$region_name = $this->getRegion();
$date_time_string = $this->getTimestamp();
$date_string = $this->getDateString();
$string_to_sign = "$AWS_SHA256_ALGORITHM\n"
. "$date_time_string\n"
. "$date_string/$region_name/$SERVICE_NAME/$TERMINATION_STRING\n"
. "$canonical_request_hash";
return $string_to_sign;
}
/**
* @param bool $rawOutput
* @return string
*/ */
public function buildDerivedKey(bool $rawOutput = true): string public function buildDerivedKey(bool $rawOutput = true): string
{ {
@@ -293,7 +339,7 @@ class AWS
* MXN for MX * MXN for MX
* GBP for UK * GBP for UK
* *
* @return string * @return string Region string depending on given endpoint url
*/ */
public function getRegion(): string public function getRegion(): string
{ {
@@ -320,9 +366,15 @@ class AWS
/** /**
* @param float $amount * The actual data to send as json encoded string for creating a gift card.
* @param string|null $creation_id * The creation request id must be in the format:
* @return string * <partner_id>_<unique id 13 characters>
*
* @param float $amount Amount of currencty to create the gift card
* request for
* @param string|null $creation_id The creation id, if not set will be created here
* @return string JSON encoded array to be used as payload
* in get gift card call
*/ */
public function getGiftCardPayload(float $amount, ?string $creation_id = null): string public function getGiftCardPayload(float $amount, ?string $creation_id = null): string
{ {
@@ -339,9 +391,12 @@ class AWS
} }
/** /**
* @param string $creation_request_id * The actual data to send as json encoded string to cancel a created gift card
* @param string $gift_card_id *
* @return string * @param string $creation_request_id Creation request id from previous get gift card
* @param string $gift_card_id Gift card id from previous get gift card
* @return string JSON encoded array to be used as payload
* in cancle gift card call
*/ */
public function getCancelGiftCardPayload(string $creation_request_id, string $gift_card_id): string public function getCancelGiftCardPayload(string $creation_request_id, string $gift_card_id): string
{ {
@@ -354,7 +409,10 @@ class AWS
} }
/** /**
* @return string * The actualy data to send as json encoded string for getting the current
* account funds
*
* @return string JSON encoded array to be used as payload in funds call
*/ */
public function getAvailableFundsPayload(): string public function getAvailableFundsPayload(): string
{ {
@@ -365,9 +423,34 @@ class AWS
} }
/** /**
* @param string $service_operation * Heeders used in the getCanonicalRequest()
* @param string $payload *
* @return string * @param string $service_operation Service operation code in the service string request
* Value is: com.amazonaws.agcod.AGCODService.<so>
* @return string Header string to be used
*/
public function buildCanonicalHeaders(string $service_operation): string
{
$ACCEPT_HEADER = self::ACCEPT_HEADER;
$HOST_HEADER = self::HOST_HEADER;
$X_AMZ_DATE_HEADER = self::X_AMZ_DATE_HEADER;
$X_AMZ_TARGET_HEADER = self::X_AMZ_TARGET_HEADER;
$date_time_string = $this->getTimestamp();
$endpoint = $this->config->getEndpoint();
$content_type = $this->getContentType();
return "$ACCEPT_HEADER:$content_type\n"
. "$HOST_HEADER:$endpoint\n"
. "$X_AMZ_DATE_HEADER:$date_time_string\n"
. "$X_AMZ_TARGET_HEADER:com.amazonaws.agcod.AGCODService.$service_operation";
}
/**
* Headers used in the get/cancel/funds requests
*
* @param string $service_operation Service operation code to be used in header request
* and main request call
* @param string $payload Payload from get/cancle Code or funds call
* @return string Full POST service request code
*/ */
public function getCanonicalRequest(string $service_operation, string $payload): string public function getCanonicalRequest(string $service_operation, string $payload): string
{ {
@@ -386,8 +469,10 @@ class AWS
} }
/** /**
* @param string $data * Build sha256 hash from given data
* @return string *
* @param string $data Data to be hashed with sha256
* @return string sha256 hash
*/ */
public function buildHash(string $data): string public function buildHash(string $data): string
{ {
@@ -395,18 +480,13 @@ class AWS
} }
/** /**
* @return string * Create a sha256 based Hash-Based Message Authentication Code
*/ * with the given key and data
public function getTimestamp() *
{ * @param string $data Data to be hashed with key below
return gmdate('Ymd\THis\Z'); * @param string $key Key to be used for creating the hash
} * @param bool $raw Returning data as ascii string or hexibits
* @return string Hash-Based Message Authentication Code
/**
* @param string $data
* @param string $key
* @param bool $raw
* @return string
*/ */
public function hmac(string $data, string $key, bool $raw = true): string public function hmac(string $data, string $key, bool $raw = true): string
{ {
@@ -414,7 +494,21 @@ class AWS
} }
/** /**
* @return string * Build timestamp in the format used by AWS services
* eg 20211009\T102030\Z
*
* @return string date string based on current time. Ymd\THis\Z
*/
public function getTimestamp()
{
return gmdate('Ymd\THis\Z');
}
/**
* Get only the date string from the getTimestamp
* eg 20211009
*
* @return string Date string YYYYmmdd extracted from getTimestamp()
*/ */
public function getDateString() public function getDateString()
{ {
@@ -422,31 +516,14 @@ class AWS
} }
/** /**
* @return string * Fixed content type for submission, is json
*
* @return string 'application/json' string
*/ */
public function getContentType(): string public function getContentType(): string
{ {
return 'application/json'; return 'application/json';
} }
/**
* @param string $service_operation
* @return string
*/
public function buildCanonicalHeaders(string $service_operation): string
{
$ACCEPT_HEADER = self::ACCEPT_HEADER;
$HOST_HEADER = self::HOST_HEADER;
$X_AMZ_DATE_HEADER = self::X_AMZ_DATE_HEADER;
$X_AMZ_TARGET_HEADER = self::X_AMZ_TARGET_HEADER;
$date_time_string = $this->getTimestamp();
$endpoint = $this->config->getEndpoint();
$content_type = $this->getContentType();
return "$ACCEPT_HEADER:$content_type\n"
. "$HOST_HEADER:$endpoint\n"
. "$X_AMZ_DATE_HEADER:$date_time_string\n"
. "$X_AMZ_TARGET_HEADER:com.amazonaws.agcod.AGCODService.$service_operation";
}
} }
// __END__ // __END__

View File

@@ -22,12 +22,12 @@ final class AmazonIncentives
/** /**
* AmazonGiftCode constructor. * AmazonGiftCode constructor.
* *
* @param string|null $key * @param string|null $key Account key
* @param string|null $secret * @param string|null $secret Secret key
* @param string|null $partner * @param string|null $partner Partner ID
* @param string|null $endpoint * @param string|null $endpoint Endpoint URL including https://
* @param string|null $currency * @param string|null $currency Currency type. Eg USD, JPY, etc
* @param bool|null $debug * @param bool|null $debug Debug flag
*/ */
public function __construct( public function __construct(
string $key = null, string $key = null,
@@ -53,9 +53,15 @@ final class AmazonIncentives
// ********************************************************************* // *********************************************************************
/** /**
* @param float $value * Buy a gift card
* @param string|null $creation_request_id AWS creationRequestId *
* @return Response\CreateResponse * @param float $value Amount to purchase a gift card
* in currency value
* @param string|null $creation_request_id Override automatically created request id
* If not set will create a new one, or
* return data for created one
* @return Response\CreateResponse Returns new created response object or
* previous created if creation_request_id was used
* *
* @throws AmazonErrors * @throws AmazonErrors
*/ */
@@ -66,9 +72,13 @@ final class AmazonIncentives
/** /**
* @param string $creation_request_id AWS creationRequestId * Cancel a previous created gift card, if within the time frame
* @param string $gift_card_id AWS gcId *
* @return Response\CancelResponse * @param string $creation_request_id Previous created request id from buyGiftCard
* @param string $gift_card_id Previous gift card id from buyGiftCard (gcId)
* @return Response\CancelResponse Returns the cancled request object
*
* @throws AmazonErrors
*/ */
public function cancelGiftCard(string $creation_request_id, string $gift_card_id): Response\CancelResponse public function cancelGiftCard(string $creation_request_id, string $gift_card_id): Response\CancelResponse
{ {
@@ -76,7 +86,9 @@ final class AmazonIncentives
} }
/** /**
* @return Response\CreateBalanceResponse * Gets the current funds in this account
*
* @return Response\CreateBalanceResponse Returns the account funds object
* *
* @throws AmazonErrors * @throws AmazonErrors
*/ */
@@ -86,15 +98,15 @@ final class AmazonIncentives
} }
/** /**
* AmazonIncentives make own client. * AmazonIncentives creates own client and returns it as static object
* *
* @param string|null $key * @param string|null $key Account key
* @param string|null $secret * @param string|null $secret Secret key
* @param string|null $partner * @param string|null $partner Partner ID
* @param string|null $endpoint * @param string|null $endpoint Endpoint URL including https://
* @param string|null $currency * @param string|null $currency Currency type. Eg USD, JPY, etc
* @param bool|null $debug * @param bool|null $debug Debug flag
* @return AmazonIncentives * @return AmazonIncentives self class
*/ */
public static function make( public static function make(
string $key = null, string $key = null,
@@ -137,6 +149,10 @@ final class AmazonIncentives
// ********************************************************************* // *********************************************************************
/** /**
* Prints out ENV, CONFIG and KEY data
* This is for debug only, this will print out secrets.
* Use with care
*
* @return array<mixed> * @return array<mixed>
*/ */
public function checkMe(): array public function checkMe(): array

View File

@@ -7,17 +7,18 @@ use gullevek\AmazonIncentives\Debug\AmazonDebug;
class Client implements ClientInterface class Client implements ClientInterface
{ {
// instead of JsonResponse::HTTP_OK /** @var int instead of JsonResponse::HTTP_OK */
private const HTTP_OK = 200; private const HTTP_OK = 200;
/** /**
* Makes an request to the target url via curl
* Returns result as string (json)
* *
* @param string $url The URL being requested, including domain and protocol * @param string $url The URL being requested,
* including domain and protocol
* @param array<mixed> $headers Headers to be used in the request * @param array<mixed> $headers Headers to be used in the request
* @param array<mixed>|string $params Can be nested for arrays and hashes * @param array<mixed>|string $params Can be nested for arrays and hashes
* * @return string Result as json string
*
* @return string
*/ */
public function request(string $url, array $headers, $params): string public function request(string $url, array $headers, $params): string
{ {
@@ -76,11 +77,12 @@ class Client implements ClientInterface
} }
/** /**
* Undocumented function * handles any CURL errors and throws an error with the correct
* error message
* *
* @param string $url * @param string $url The url that was originaly used
* @param int $errno * @param int $errno Error number from curl handler
* @param string $message * @param string $message The error message string from curl
* @return void * @return void
*/ */
private function handleCurlError(string $url, int $errno, string $message): void private function handleCurlError(string $url, int $errno, string $message): void

View File

@@ -4,37 +4,27 @@ namespace gullevek\AmazonIncentives\Config;
class Config implements ConfigInterface class Config implements ConfigInterface
{ {
/** /** @var string Endpoint URL without https:// */
* @var string
*/
private $endpoint = ''; private $endpoint = '';
/** /** @var string Access Key */
* @var string
*/
private $access_key = ''; private $access_key = '';
/** /** @var string Secret Key */
* @var string
*/
private $secret_key = ''; private $secret_key = '';
/** /** @var string Partner ID */
* @var string
*/
private $partner_id = ''; private $partner_id = '';
/** /** @var string Currency type as USD, JPY, etc */
* @var string
*/
private $currency = ''; private $currency = '';
/** /** @var bool Debug flag on or off */
* @var bool
*/
private $debug = false; private $debug = false;
/** /**
* @param string|null $key * @param string|null $key Access key
* @param string|null $secret * @param string|null $secret Secret Key
* @param string|null $partner * @param string|null $partner Partner ID
* @param string|null $endpoint * @param string|null $endpoint Endpoing URL including https://
* @param string|null $currency * @param string|null $currency Currency to use, see valid list on AWS documentation.
* valid names are like USD, JPY, etc
* @param bool|null $debug Debug flag
*/ */
public function __construct( public function __construct(
?string $key, ?string $key,
@@ -104,7 +94,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return string * @return string Returns current set endpoint, without https://
*/ */
public function getEndpoint(): string public function getEndpoint(): string
{ {
@@ -112,8 +102,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param string $endpoint * @param string $endpoint Full endpoint url with https://
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setEndpoint(string $endpoint): ConfigInterface public function setEndpoint(string $endpoint): ConfigInterface
{ {
@@ -124,7 +114,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return string * @return string Current access key
*/ */
public function getAccessKey(): string public function getAccessKey(): string
{ {
@@ -132,8 +122,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param string $key * @param string $key Access Key to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setAccessKey(string $key): ConfigInterface public function setAccessKey(string $key): ConfigInterface
{ {
@@ -143,7 +133,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return string * @return string Current secret key
*/ */
public function getSecret(): string public function getSecret(): string
{ {
@@ -151,8 +141,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param string $secret * @param string $secret Secret key to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setSecret(string $secret): ConfigInterface public function setSecret(string $secret): ConfigInterface
{ {
@@ -162,7 +152,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return string * @return string Current set currency
*/ */
public function getCurrency(): string public function getCurrency(): string
{ {
@@ -170,8 +160,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param string $currency * @param string $currency Currency to set (eg USD, JPY, etc)
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setCurrency(string $currency): ConfigInterface public function setCurrency(string $currency): ConfigInterface
{ {
@@ -182,7 +172,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return string * @return string Current set partner id
*/ */
public function getPartner(): string public function getPartner(): string
{ {
@@ -190,8 +180,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param string $partner * @param string $partner Partner id to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setPartner(string $partner): ConfigInterface public function setPartner(string $partner): ConfigInterface
{ {
@@ -201,7 +191,7 @@ class Config implements ConfigInterface
} }
/** /**
* @return bool * @return bool Current set debug flag as bool
*/ */
public function getDebug(): bool public function getDebug(): bool
{ {
@@ -209,8 +199,8 @@ class Config implements ConfigInterface
} }
/** /**
* @param bool $debug * @param bool $debug Set debug flag as bool
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setDebug(bool $debug): ConfigInterface public function setDebug(bool $debug): ConfigInterface
{ {

View File

@@ -5,68 +5,68 @@ namespace gullevek\AmazonIncentives\Config;
interface ConfigInterface interface ConfigInterface
{ {
/** /**
* @return string * @return string Returns current set endpoint, without https://
*/ */
public function getEndpoint(): string; public function getEndpoint(): string;
/** /**
* @param string $endpoint * @param string $endpoint Full endpoint url with https://
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setEndpoint(string $endpoint): ConfigInterface; public function setEndpoint(string $endpoint): ConfigInterface;
/** /**
* @return string * @return string Current access key
*/ */
public function getAccessKey(): string; public function getAccessKey(): string;
/** /**
* @param string $key * @param string $key Access Key to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setAccessKey(string $key): ConfigInterface; public function setAccessKey(string $key): ConfigInterface;
/** /**
* @return string * @return string Current secret key
*/ */
public function getSecret(): string; public function getSecret(): string;
/** /**
* @param string $secret * @param string $secret Secret key to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setSecret(string $secret): ConfigInterface; public function setSecret(string $secret): ConfigInterface;
/** /**
* @return string * @return string Current set currency
*/ */
public function getCurrency(): string; public function getCurrency(): string;
/** /**
* @param string $currency * @param string $currency Currency to set (eg USD, JPY, etc)
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setCurrency(string $currency): ConfigInterface; public function setCurrency(string $currency): ConfigInterface;
/** /**
* @return string * @return string Current set partner id
*/ */
public function getPartner(): string; public function getPartner(): string;
/** /**
* @param string $partner * @param string $partner Partner id to set
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setPartner(string $partner): ConfigInterface; public function setPartner(string $partner): ConfigInterface;
/** /**
* @return bool * @return bool Current set debug flag as bool
*/ */
public function getDebug(): bool; public function getDebug(): bool;
/** /**
* @param bool $debug * @param bool $debug Set debug flag as bool
* @return ConfigInterface * @return ConfigInterface Class interface (self)
*/ */
public function setDebug(bool $debug): ConfigInterface; public function setDebug(bool $debug): ConfigInterface;
} }

View File

@@ -7,17 +7,11 @@ namespace gullevek\AmazonIncentives\Debug;
class AmazonDebug class AmazonDebug
{ {
/** /** @var array<mixed> Log data array log id -> array of log entries */
* @var array<mixed>
*/
private static $log = []; private static $log = [];
/** /** @var bool debug flag */
* @var bool
*/
private static $debug = false; private static $debug = false;
/** /** @var string|null Last set internal log array id */
* @var string|null
*/
private static $id = null; private static $id = null;
/** /**

View File

@@ -8,12 +8,15 @@ use gullevek\AmazonIncentives\Debug\AmazonDebug;
final class AmazonErrors extends RuntimeException final class AmazonErrors extends RuntimeException
{ {
/** /**
* Returns an Runtime exception including a json encoded string with all
* parameters including last log id and log
*
* @param string $error_status agcodResponse->status from Amazon * @param string $error_status agcodResponse->status from Amazon
* @param string $error_code errorCode from Amazon * @param string $error_code errorCode from Amazon
* @param string $error_type errorType from Amazon * @param string $error_type errorType from Amazon
* @param string $message * @param string $message Message string to ad
* @param int $_error_code * @param int $_error_code Error code to set
* @return AmazonErrors * @return AmazonErrors Exception Class
*/ */
public static function getError( public static function getError(
string $error_status, string $error_status,

View File

@@ -6,34 +6,19 @@ use gullevek\AmazonIncentives\Debug\AmazonDebug;
class CancelResponse class CancelResponse
{ {
/** /** @var string Amazon Gift Card gcId (gift card id). */
* Amazon Gift Card gcId.
*
* @var string
*/
protected $id = ''; protected $id = '';
/** /** @var string Amazon Gift Card creationRequestId (creation request id) */
* Amazon Gift Card creationRequestId
*
* @var string
*/
protected $creation_request_id = ''; protected $creation_request_id = '';
/** /** @var string Amazon Gift Card status */
* Amazon Gift Card status
*
* @var string
*/
protected $status = ''; protected $status = '';
/** /** @var array<mixed> Amazon Gift Card Raw JSON */
* Amazon Gift Card Raw JSON
*
* @var array<mixed>
*/
protected $raw_json = []; protected $raw_json = [];
/** /**
* Response constructor. * Response constructor for canceling gitf cards
* @param array<mixed> $json_response *
* @param array<mixed> $json_response JSON response from web request to AWS
*/ */
public function __construct(array $json_response) public function __construct(array $json_response)
{ {
@@ -42,7 +27,9 @@ class CancelResponse
} }
/** /**
* @return array<mixed> * Get log entry with current set log id
*
* @return array<mixed> Log array
*/ */
public function getLog(): array public function getLog(): array
{ {
@@ -50,7 +37,9 @@ class CancelResponse
} }
/** /**
* @return string * The gift card id as created by the previous get code call
*
* @return string Gift card id
*/ */
public function getId(): string public function getId(): string
{ {
@@ -58,7 +47,9 @@ class CancelResponse
} }
/** /**
* @return string * Creation Request id from original get code call
*
* @return string Creation request id
*/ */
public function getCreationRequestId(): string public function getCreationRequestId(): string
{ {
@@ -66,7 +57,9 @@ class CancelResponse
} }
/** /**
* @return string * Request status
*
* @return string Request status as string: SUCCESS, FAILURE, RESEND
*/ */
public function getStatus(): string public function getStatus(): string
{ {
@@ -74,7 +67,10 @@ class CancelResponse
} }
/** /**
* @return string * Returns the request data as json string. This is a re-encode from decoded
* makeRequest call
*
* @return string JSON encoded string from the return values
*/ */
public function getRawJson(): string public function getRawJson(): string
{ {
@@ -82,8 +78,10 @@ class CancelResponse
} }
/** /**
* @param array<mixed> $json_response * Set class variables with response data from makeRequest and return self
* @return CancelResponse *
* @param array<mixed> $json_response JSON response as array
* @return CancelResponse Return self object
*/ */
public function parseJsonResponse(array $json_response): self public function parseJsonResponse(array $json_response): self
{ {

View File

@@ -6,41 +6,21 @@ use gullevek\AmazonIncentives\Debug\AmazonDebug;
class CreateBalanceResponse class CreateBalanceResponse
{ {
/** /** @var string Amazon Gift Card Balance Amount */
* Amazon Gift Card Balance Amount
*
* @var string
*/
protected $amount = ''; protected $amount = '';
/** /** @var string Amazon Gift Card Balance Currency */
* Amazon Gift Card Balance Currency
*
* @var string
*/
protected $currency = ''; protected $currency = '';
/** /** @var string Amazon Gift Card Balance Status */
* Amazon Gift Card Balance Status
*
* @var string
*/
protected $status = ''; protected $status = '';
/** /** @var string Amazon Gift Card Balance Timestamp */
* Amazon Gift Card Balance Timestamp
*
* @var string
*/
protected $timestamp = ''; protected $timestamp = '';
/** /** @var array<mixed> Amazon Gift Card Raw JSON */
* Amazon Gift Card Raw JSON
*
* @var array<mixed>
*/
protected $raw_json = []; protected $raw_json = [];
/** /**
* Response constructor. * Response constructor for requesting account funds status
* *
* @param array<mixed> $json_response * @param array<mixed> $json_response JSON response from web request to AWS
*/ */
public function __construct(array $json_response) public function __construct(array $json_response)
{ {
@@ -49,7 +29,9 @@ class CreateBalanceResponse
} }
/** /**
* @return array<mixed> * Get log entry with current set log id
*
* @return array<mixed> Log array
*/ */
public function getLog(): array public function getLog(): array
{ {
@@ -57,7 +39,9 @@ class CreateBalanceResponse
} }
/** /**
* @return string * Return the current available funds amount
*
* @return string Funds amount in set currency
*/ */
public function getAmount(): string public function getAmount(): string
{ {
@@ -65,7 +49,9 @@ class CreateBalanceResponse
} }
/** /**
* @return string * Get the set currency type
*
* @return string Currency type. Eg USD, JPY, etc
*/ */
public function getCurrency(): string public function getCurrency(): string
{ {
@@ -73,15 +59,10 @@ class CreateBalanceResponse
} }
/** /**
* @return string * Get timestamp as set.
*/ * eg 20220609T061446Z
public function getStatus(): string *
{ * @return string Timestamp string. Ymd\THis\Z
return $this->status;
}
/**
* @return string
*/ */
public function getTimestamp(): string public function getTimestamp(): string
{ {
@@ -89,7 +70,20 @@ class CreateBalanceResponse
} }
/** /**
* @return string * Request status
*
* @return string Request status as string: SUCCESS, FAILURE, RESEND
*/
public function getStatus(): string
{
return $this->status;
}
/**
* Returns the request data as json string. This is a re-encode from decoded
* makeRequest call
*
* @return string JSON encoded string from the return values
*/ */
public function getRawJson(): string public function getRawJson(): string
{ {
@@ -97,10 +91,10 @@ class CreateBalanceResponse
} }
/** /**
* Undocumented function * Set class variables with response data from makeRequest and return self
* *
* @param array<mixed> $json_response * @param array<mixed> $json_response JSON response as array
* @return CreateBalanceResponse * @return CreateBalanceResponse Return self object
*/ */
public function parseJsonResponse(array $json_response): self public function parseJsonResponse(array $json_response): self
{ {

View File

@@ -6,68 +6,29 @@ use gullevek\AmazonIncentives\Debug\AmazonDebug;
class CreateResponse class CreateResponse
{ {
/** /** @var string Amazon Gift Card gcId */
* Amazon Gift Card gcId.
*
* @var string
*/
protected $id = ''; protected $id = '';
/** @var string Amazon Gift Card creationRequestId */
/**
* Amazon Gift Card creationRequestId
*
* @var string
*/
protected $creation_request_id = ''; protected $creation_request_id = '';
/** @var string Amazon Gift Card gcClaimCode */
/**
* Amazon Gift Card gcClaimCode
*
* @var string
*/
protected $claim_code = ''; protected $claim_code = '';
/** @var float Amazon Gift Card amount */
/**
* Amazon Gift Card amount
*
* @var float
*/
protected $value = 0; protected $value = 0;
/** @var string Amazon Gift Card currency */
/**
* Amazon Gift Card currency
*
* @var string
*/
protected $currency = ''; protected $currency = '';
/** /** @var string Amazon Gift Card status */
* Amazon Gift Card status
*
* @var string
*/
protected $status = ''; protected $status = '';
/** /** @var string Amazon Gift Card Expiration Date */
* Amazon Gift Card Expiration Date
*
* @var string
*/
protected $expiration_date = ''; protected $expiration_date = '';
/** /** @var string Amazon Gift Card Expiration Date */
* Amazon Gift Card Expiration Date
*
* @var string
*/
protected $card_status = ''; protected $card_status = '';
/** /** @var array<mixed> Amazon Gift Card Raw JSON as array */
* Amazon Gift Card Raw JSON
*
* @var array<mixed>
*/
protected $raw_json = []; protected $raw_json = [];
/** /**
* Response constructor. * Response constructor for creating gift cards
* @param array<mixed> $json_response *
* @param array<mixed> $json_response JSON response from web request to AWS
*/ */
public function __construct(array $json_response) public function __construct(array $json_response)
{ {
@@ -76,7 +37,9 @@ class CreateResponse
} }
/** /**
* @return array<mixed> * Get log entry with current set log id
*
* @return array<mixed> Log array
*/ */
public function getLog(): array public function getLog(): array
{ {
@@ -84,7 +47,9 @@ class CreateResponse
} }
/** /**
* @return string * Gift Card ID returned from AWS. Can be used in the cancel request
*
* @return string Gift card id
*/ */
public function getId(): string public function getId(): string
{ {
@@ -92,7 +57,10 @@ class CreateResponse
} }
/** /**
* @return string * Either the one set with the method parameter, or automatically created
* during get code request
*
* @return string Creation request id
*/ */
public function getCreationRequestId(): string public function getCreationRequestId(): string
{ {
@@ -100,7 +68,10 @@ class CreateResponse
} }
/** /**
* @return string * The actual gift code, recommended not to be stored anywhere and only shown
* to user
*
* @return string Gift order claim code on AWS
*/ */
public function getClaimCode(): string public function getClaimCode(): string
{ {
@@ -108,7 +79,9 @@ class CreateResponse
} }
/** /**
* @return float * The ordered gift code value in given currency
*
* @return float Gift order value in currency
*/ */
public function getValue(): float public function getValue(): float
{ {
@@ -116,7 +89,9 @@ class CreateResponse
} }
/** /**
* @return string * The currently set currency
*
* @return string Currency type. Eg USD, JPY, etc
*/ */
public function getCurrency(): string public function getCurrency(): string
{ {
@@ -124,15 +99,10 @@ class CreateResponse
} }
/** /**
* @return string * Expiration date for the ordered gift code.
*/ * eg 20220609T061446Z
public function getStatus(): string *
{ * @return string Timestamp until when the gift code is valid. Ymd\THis\Z
return $this->status;
}
/**
* @return string
*/ */
public function getExpirationDate(): string public function getExpirationDate(): string
{ {
@@ -140,16 +110,31 @@ class CreateResponse
} }
/** /**
* @return string * Gift card status. If the same creation request id is sent again and the
* gift card got cancled, this is reflected here
*
* @return string Gift card status
*/ */
public function getCardStatus(): string public function getCardStatus(): string
{ {
return $this->card_status; return $this->card_status;
} }
/**
* Request status
*
* @return string Request status as string: SUCCESS, FAILURE, RESEND
*/
public function getStatus(): string
{
return $this->status;
}
/** /**
* @return string * @Returns the request data as json string. This is a re-encode from decoded
* makeRequest call
*
* @return string JSON encoded string from the return values
*/ */
public function getRawJson(): string public function getRawJson(): string
{ {
@@ -157,8 +142,10 @@ class CreateResponse
} }
/** /**
* @param array<array-key,mixed|array> $json_response * Set class variables with response data from makeRequest and return self
* @return CreateResponse *
* @param array<mixed> $json_response JSON response as array
* @return CreateResponse Return self object
*/ */
public function parseJsonResponse(array $json_response): self public function parseJsonResponse(array $json_response): self
{ {

View File

@@ -57,8 +57,6 @@ $loader = require '../vendor/autoload.php';
// need to add this or it will not load here // need to add this or it will not load here
$loader->addPsr4('gullevek\\', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src'); $loader->addPsr4('gullevek\\', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src');
// print "LOADER: <pre>" . print_r($loader, true) . "</pre>"; // print "LOADER: <pre>" . print_r($loader, true) . "</pre>";
// env file loader (simple)
require 'read_env_file.php';
use gullevek\AmazonIncentives\AmazonIncentives; use gullevek\AmazonIncentives\AmazonIncentives;
use gullevek\dotEnv\DotEnv; use gullevek\dotEnv\DotEnv;
@@ -103,8 +101,9 @@ $mock_wait = 2;
if ($run_info_test === true) { if ($run_info_test === true) {
$aws = new AmazonIncentives(); $aws = new AmazonIncentives();
print "checkMe: <pre>" . print_r($aws->checkMe(), true) . "</pre>"; $aws_check_me = $aws->checkMe();
fwrite($fp, writeLog($aws->checkMe())); print "checkMe: <pre>" . print_r($aws_check_me, true) . "</pre>";
fwrite($fp, writeLog($aws_check_me));
print "<hr>"; print "<hr>";
} }

View File

@@ -0,0 +1,23 @@
<?php
// just print out env data nd connect data
// checkMe from AmazonIntentives call is requal to
// run_info_test === true in aws_gift_card_tests.php
$loader = require '../vendor/autoload.php';
// need to add this or it will not load here
$loader->addPsr4('gullevek\\', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src');
// print "LOADER: <pre>" . print_r($loader, true) . "</pre>";
use gullevek\AmazonIncentives\AmazonIncentives;
use gullevek\dotEnv\DotEnv;
// load env data with dotenv
DotEnv::readEnvFile(__DIR__);
print "_ENV: <pre>" . print_r($_ENV, true) . "</pre>";
$aws = new AmazonIncentives();
print "checkMe: <pre>" . print_r($aws->checkMe(), true) . "</pre>";
// __END__