PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/trave494/outtheboxministry.org/assets/libraries/
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
IP: 209.182.202.254
Choose File :

Url:
Dir : /home/trave494/outtheboxministry.org/assets/libraries/coinpayments.php

<?php
namespace MineSQL;

class CoinPayments
{

	private $secretKey, $merchantId, $formFields;
	// for all available POST fields navigate to: https://www.coinpayments.net/merchant-tools-simple 
	public $requiredFields = ['merchant', 'item_name', 'currency', 'amountf', 'cmd', 'reset'];

	const ENDPOINT = 'https://www.coinpayments.net/index.php';
	
	//Chainable setters
	public function setMerchantId($id)
	{
		$this->merchantId = $id;
		return $this;
	}
	
	//Chainable setters
	public function setSecretKey($secret)
	{
		$this->secretKey = $secret;
		return $this;
	}

	public function setFormElement($name, $value)
	{
		$this->formFields[$name] = $value;
	}

	public function createForm()
	{
	    //Automatically set merchant field
	    $this->setFormElement('merchant', $this->merchantId);
	    $this->setFormElement('cmd', '_pay');
	    $this->setFormElement('reset', 1);
	    
	    $formFields = $this->formFields;
	    
	    // This checks and ensures that the required fields (listed above in the class properties)
	    // is in the payment configuration with CoinPayments::setFormElement()
		foreach($this->requiredFields as $field)
		{
		    // Checks if there is an entry into the given form fields
			if(!array_key_exists($field, $formFields))
			{
				//there is not an entry for a required field. Throw an error.
				throw new Exception($field.' value is required for form creation.');
			}
		}
		
	    // Start the creation of a new form
	    $form = '<form action="'.self::ENDPOINT.'" method="post">';
        
        //Cycle through all the fields given and create hidden post fields.
		foreach($formFields as $name => $value) {
			$form .= '<input type="hidden" name="'.$name.'" value="'.$value.'">';
		}
		
		//create a generic button to forward the user to the coinpayments gateway
		$form .= '<button type="submit" name="coinPaymentsBtn" class="CoinPayments">Pay With CoinPayments</button></form>';

		return $form;
	
	}

    //dependancy injection for $_POST & $_SERVER
	public function listen(array $post, array $server)
	{
	    $merchantId = $this->merchantId;
	    $secretKey = $this->secretKey;
	    
		if(!isset($post['ipn_mode']) || !isset($post['merchant']))
		{
			//$this->callbackError(400, 'Missing POST data from callback.');
			return false;

		}


		if($post['ipn_mode'] == 'httpauth') 
		{
			//Verify that the http authentication checks out with the users supplied information 
			if($server['PHP_AUTH_USER']!=$merchantId || $server['PHP_AUTH_PW']!=$secretKey)
			{				
		        //$this->callbackError(401, 'Unauthorized HTTP Request.');
		        
		        return false;
			}

		}
		elseif($post['ipn_mode'] == 'hmac') 
		{
            // Create the HMAC hash to compare to the recieved one, using the secret key.
			$hmac = hash_hmac("sha512", file_get_contents('php://input'), $secretKey);
	        
			if($hmac != $server['HTTP_HMAC']) {
	
				// $this->callbackError(401, 'Unauthorized HMAC Request.');
		        
		        return false;
			}

		} 
		else 
		{

			//$this->callbackError(402, 'Unknown or Malformed Request.');
		        
		    return false;
		}
		
		// Passed initial security test - now check the status
        $status = intval($post['status']);
        $statusText = $post['status_text'];
        
        if($post['merchant']!=$merchantId)
        {
            //$this->callbackError(403, 'Mismatching merchant ID.');
            
            return false;
        }
        
        if($status < 0 )
        {
            // There has been an error with the payment - throw an error
            //$this->callbackError($status, $statusText);
            return false;
        }
        elseif($status == 0)
        {
            // the payment is pending
            return false;
        }
        elseif($status>=100 || $status == 2)
        {
            // the payment has been successful
            return true;
        }

	}
	
	private function callbackError(int $errorCode, string $errorMessage)
	{
	    //throw new Exception('#'.$errorCode.' There was a problem establishing integrity with the request: '.$errorMessage);
	}


}