Вход Регистрация
Файл: Main Website Files/application/libraries/paypal/Paypal_payflow.php
Строк: 172
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
/**
 *     Angell EYE PayPal PayFlow CodeIgniter Library
 *    An open source PHP library written to easily work with PayPal's PayFlow API's
 *
 *  Copyright © 2014  Andrew K. Angell
 *    Email:  andrew@angelleye.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>
 *
 * @package            Angell_EYE_PayPal_PayFlow_Class_Library
 * @author            Andrew K. Angell
 * @copyright        Copyright © 2014 Angell EYE, LLC
 * @link            http://www.angelleye.com
 * @since            Version 2.42
 * @updated            01.19.2014
 * @filesource
 */

require_once('Paypal_pro.php');
class 
PayPal_PayFlow extends PayPal_Pro
{
    
/**
     * Constructor
     *
     * @access    public
     * @param    array    config preferences
     * @return    void
     */
    
function __construct($DataArray)
    {
        
parent::__construct($DataArray);
    
        
$this->APIVendor = isset($DataArray['APIVendor']) ? $DataArray['APIVendor'] : '';
        
$this->APIPartner = isset($DataArray['APIPartner']) ? $DataArray['APIPartner'] : '';
        
$this->Verbosity = isset($DataArray['Verbosity']) ? $DataArray['Verbosity'] : 'HIGH';
    
        if(
$this->Sandbox)
        {
            
$this->APIEndPoint 'https://pilot-payflowpro.paypal.com';
        }
        else
        {
            
$this->APIEndPoint 'https://payflowpro.paypal.com';
        }
    
        
$this->NVPCredentials 'BUTTONSOURCE['.strlen($this->APIButtonSource).']='.$this->APIButtonSource.'&VERBOSITY['.strlen($this->Verbosity).']='.$this->Verbosity.'&USER['.strlen($this->APIUsername).']='.$this->APIUsername.'&VENDOR['.strlen($this->APIVendor).']='.$this->APIVendor.'&PARTNER['.strlen($this->APIPartner).']='.$this->APIPartner.'&PWD['.strlen($this->APIPassword).']='.$this->APIPassword;
    
        
$this->TransactionStateCodes = array(
                
'1' => 'Error',
                
'6' => 'Settlement Pending',
                
'7' => 'Settlement in Progress',
                
'8' => 'Settlement Completed Successfully',
                
'11' => 'Settlement Failed',
                
'14' => 'Settlement Incomplete'
        
);
    }
    
    
/*
     * GetTransactionStateCodeMessage
    *
    * @access public
    * @param number
    * @return string
    */
    
function GetTransactionStateCodeMessage($Code)
    {
        return 
$this -> TransactionStateCodes[$Code];
    }
    
    
/*
     * CURLRequest
    *
    * @access public
    * @param string Request
    * @return string
    */
    
function CURLRequest($Request ""$APIName ""$APIOperation "")
    {
    
        
$unique_id date('ymd-H').rand(1000,9999);
    
        
$headers[] = "Content-Type: text/namevalue"//or text/xml if using XMLPay.
        
$headers[] = "Content-Length : " strlen ($Request);  // Length of data to be passed
        
$headers[] = "X-VPS-Timeout: 45";
        
$headers[] = "X-VPS-Request-ID:" $unique_id;
    
        
$curl curl_init();
        
curl_setopt($curlCURLOPT_HTTPHEADER$headers);
        
curl_setopt($curlCURLOPT_HEADER1);
        
curl_setopt($curlCURLOPT_VERBOSE1);
        
curl_setopt($curlCURLOPT_FOLLOWLOCATION0);
        
curl_setopt($curlCURLOPT_SSL_VERIFYHOST2);
        
curl_setopt($curlCURLOPT_SSL_VERIFYPEERFALSE);
        
curl_setopt($curlCURLOPT_FORBID_REUSEtrue);
        
curl_setopt($curlCURLOPT_TIMEOUT90);
        
curl_setopt($curlCURLOPT_URL$this->APIEndPoint);
        
curl_setopt($curlCURLOPT_RETURNTRANSFER1);
        
curl_setopt($curlCURLOPT_POST1);
        
curl_setopt($curlCURLOPT_POSTFIELDS$Request);
    
        
// Try to submit the transaction up to 3 times with 5 second delay.  This can be used
        // in case of network issues.  The idea here is since you are posting via HTTPS there
        // could be general network issues, so try a few times before you tell customer there
        // is an issue.
        
$i=1;
        while (
$i++ <= 3)
        {
            
$Response curl_exec($curl);
            
$headers curl_getinfo($curl);
    
            if (
$headers['http_code'] != 200) {
                
sleep(5);  // Let's wait 5 seconds to see if its a temporary network issue.
            
}
            else if (
$headers['http_code'] == 200)
            {
                
// we got a good response, drop out of loop.
                
break;
            }
        }
    
        
curl_close($curl);
    
        return 
$Response;
    }
    
    
    
/**
     * Convert an NVP string to an array with URL decoded values
     *
     * @access    public
     * @param    string    NVP string
     * @return    array
     */
    
function NVPToArray($NVPString)
    {
        
$proArray = array();
        
parse_str($NVPString,$proArray);
        return 
$proArray;
    }
    
    
/*
     * ProcessTransaction
    *
    * @access public
    * @param array request parameters
    * @return array
    */
    
function ProcessTransaction($DataArray)
    {
        
$NVPRequest $this->NVPCredentials;
    
        foreach(
$DataArray as $DataArrayVar => $DataArrayVal)
        {
            if(
$DataArrayVal != '')
            {
                
$NVPRequest .= '&'.strtoupper($DataArrayVar).'['.strlen($DataArrayVal).']='.$DataArrayVal;
            }
        }
    
        
$NVPResponse $this->CURLRequest($NVPRequest);
        
$NVPResponse strstr($NVPResponse,"RESULT");
        
$NVPResponseArray $this->NVPToArray($NVPResponse);
    
        
$NVPResponseArray['RAWREQUEST'] = $NVPRequest;
        
$NVPResponseArray['RAWRESPONSE'] = $NVPResponse;
    
        return 
$NVPResponseArray;
    }
}
Онлайн: 1
Реклама