expiration = $expiration ?: $this->createExpirationTimestamp(); $this->signature = $this->generateSignatureString($gatewayId, $gatewayMethod, $donationId, $this->expiration); } /** * @since 2.19.5 * * @param string $gatewayId * @param string $gatewayMethod * @param int $donationId * @param string $expiration * @return string */ private function generateSignatureString($gatewayId, $gatewayMethod, $donationId, $expiration) { return "$gatewayId@$gatewayMethod:$donationId|$expiration"; } /** * @since 2.19.0 * * @return string */ public function toString() { return $this->signature; } /** * @since 2.19.5 * * @return string */ public function toHash() { return wp_hash($this->signature); } /** * Create expiration timestamp * * @since 2.19.5 * * @return string */ public function createExpirationTimestamp() { return (string)current_datetime()->modify('+1 day')->getTimestamp(); } /** * @since 2.19.5 * * @param string $suppliedSignature * @return bool */ public function isValid($suppliedSignature) { $isSignatureValid = hash_equals( $suppliedSignature, $this->toHash() ); $isNotExpired = ((int)$this->expiration) >= current_datetime()->getTimestamp(); return $isSignatureValid && $isNotExpired; } }