• require_once ("paypalfunctions.php");
    
    $PaymentOption = "PayPal";
    if ( $PaymentOption == "PayPal")
    {
            // ==================================
            // PayPal Express Checkout Module
            // ==================================
    
            //'------------------------------------
            //' The paymentAmount is the total value of
            //' the purchase.
            //'
            //' TODO: Enter the total Payment Amount within the quotes.
            //' example : $paymentAmount = "15.00";
            //'------------------------------------
            $paymentAmount = "99";
    
            //'------------------------------------
            //' The currencyCodeType
            //' is set to the selections made on the Integration Assistant
            //'------------------------------------
            $currencyCodeType = "USD";
            $paymentType = "Sale";
    
            //'------------------------------------
            //' The returnURL is the location where buyers return to when a
            //' payment has been succesfully authorized.
            //'
            //' This is set to the value entered on the Integration Assistant
            //'------------------------------------
            $returnURL = "http://127.0.0.1/digitalgoodsexample/orderconfirm.php";
    
            //'------------------------------------
            //' The cancelURL is the location buyers are sent to when they hit the
            //' cancel button during authorization of payment during the PayPal flow
            //'
            //' This is set to the value entered on the Integration Assistant
            //'------------------------------------
            $cancelURL = "http://127.0.0.1/digitalgoodsexample/cancel.php";
    
            //'------------------------------------
            //' Calls the SetExpressCheckout API call
            //'
            //' The CallSetExpressCheckout function is defined in the file PayPalFunctions.php,
            //' it is included at the top of this file.
            //'-------------------------------------------------
    
    		$items = array();
    		$items[] = array('name' => 'PayPal Digital Goods Integration Guide', 'amt' => $paymentAmount, 'qty' => 1);
    
    		//::ITEMS::
    
    		// to add anothe item, uncomment the lines below and comment the line above
    		// $items[] = array('name' => 'Item Name1', 'amt' => $itemAmount1, 'qty' => 1);
    		// $items[] = array('name' => 'Item Name2', 'amt' => $itemAmount2, 'qty' => 1);
    		// $paymentAmount = $itemAmount1 + $itemAmount2;
    
    		// assign corresponding item amounts to "$itemAmount1" and "$itemAmount2"
    		// NOTE : sum of all the item amounts should be equal to payment  amount 
    
    		$resArray = SetExpressCheckoutDG( $paymentAmount, $currencyCodeType, $paymentType,
    												$returnURL, $cancelURL, $items );
    
            $ack = strtoupper($resArray["ACK"]);
            if($ack == "SUCCESS" || $ack == "SUCCESSWITHWARNING")
            {
                    $token = urldecode($resArray["TOKEN"]);
                     RedirectToPayPalDG( $token );
            }
            else
            {
                    //Display a user friendly Error on the page using any of the following error information returned by PayPal
                    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
                    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
                    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
                    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);
    
                    echo "SetExpressCheckout API call failed. ";
                    echo "Detailed Error Message: " . $ErrorLongMsg;
                    echo "Short Error Message: " . $ErrorShortMsg;
                    echo "Error Code: " . $ErrorCode;
                    echo "Error Severity Code: " . $ErrorSeverityCode;
            }
    }

    I am using the above paypal function to send users to paypal for payment. However, I would like to automatically insert the product price on the line:
    $paymentAmount = "99";
    instead of numeric value using a meta value that is:
    echo get_post_meta($post->ID, 'download_info_price', true)
    I am have been perfectly able to make the paypal functions work, but only with numeric value by using it as a template page for my checkout page.
    I believe that I need something that help me echo meta value outside of the loop and using:

    global $wp_query;
    $postid = $wp_query->post->ID;
    echo get_post_meta($postid, 'Your-Custom-Field', true);

    did not get me anywhere.
    with the above, I tried calling /wp-load.php in the paypal functions, but no result.
    Thanks for helping on this issue

Viewing 6 replies - 1 through 6 (of 6 total)
  • Andrew Nevins

    (@anevins)

    WCLDN 2018 Contributor | Volunteer support

    Is this regarding a plugin?

    Thread Starter exedesign2

    (@exedesign2)

    It’s not a specific plugin, but I guess you can call it that way.

    Andrew Nevins

    (@anevins)

    WCLDN 2018 Contributor | Volunteer support

    What theme are you using?

    Thread Starter exedesign2

    (@exedesign2)

    I a using http://wordpress.org/plugins/paypal-framework/ , but I can tell you it has nothing to do with the theme.
    The price/amount I want to automate is require by my paypal checkout file
    that is called on the header of above codes require_once ("paypalfunctions.php")

    the paypal checkout is:

    /********************************************
    	PayPal API Module
    
    	Defines all the global variables and the wrapper functions
    	********************************************/
    	$PROXY_HOST = '127.0.0.1';
    	$PROXY_PORT = '808';
    
    	$SandboxFlag = true;
    	//' TODO:
    	//'------------------------------------
    	//' PayPal API Credentials
    	//' Replace <API_USERNAME> with your API Username
    	//' Replace <API_PASSWORD> with your API Password
    	//' Replace <API_SIGNATURE> with your Signature
    	//'------------------------------------
    	$API_UserName=//this is hidden;
    	$API_Password=//this is hidden;
    	$API_Signature=//this is hidden;
    
    	// BN Code 	is only applicable for partners
    	$sBNCode = "PP-ECWizard";
    
    	/*
    	' Define the PayPal Redirect URLs.
    	' 	This is the URL that the buyer is first sent to do authorize payment with their paypal account
    	' 	change the URL depending if you are testing on the sandbox or the live PayPal site
    	'
    	' For the sandbox, the URL is       https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=
    	' For the live site, the URL is        https://www.paypal.com/webscr&cmd=_express-checkout&token=
    	*/
    
    	if ($SandboxFlag == true)
    	{
    		$API_Endpoint = "https://api-3t.sandbox.paypal.com/nvp";
    		$PAYPAL_URL = "https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=";
    		$PAYPAL_DG_URL = "https://www.sandbox.paypal.com/incontext?token=";
    	}
    	else
    	{
    		$API_Endpoint = "https://api-3t.paypal.com/nvp";
    		$PAYPAL_URL = "https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=";
    		$PAYPAL_DG_URL = "https://www.paypal.com/incontext?token=";
    	}
    
    	$USE_PROXY = false;
    	$version = "84";
    
    	/* An express checkout transaction starts with a token, that
    	   identifies to PayPal your transaction
    	   In this example, when the script sees a token, the script
    	   knows that the buyer has already authorized payment through
    	   paypal.  If no token was found, the action is to send the buyer
    	   to PayPal to first authorize payment
    	   */
    
    	/*
    	'-------------------------------------------------------------------------------------------------------------------------------------------
    	' Purpose: 	Prepares the parameters for the SetExpressCheckout API Call for a Digital Goods payment.
    	' Inputs:
    	'		paymentAmount:  	Total value of the shopping cart
    	'		currencyCodeType: 	Currency code value the PayPal API
    	'		paymentType: 		paymentType has to be one of the following values: Sale or Order or Authorization
    	'		returnURL:			the page where buyers return to after they are done with the payment review on PayPal
    	'		cancelURL:			the page where buyers return to when they cancel the payment review on PayPal
    	'--------------------------------------------------------------------------------------------------------------------------------------------
    	*/
    	function SetExpressCheckoutDG( $paymentAmount, $currencyCodeType, $paymentType, $returnURL,
    										$cancelURL, $items)
    	{
    		//------------------------------------------------------------------------------------------------------------------------------------
    		// Construct the parameter string that describes the SetExpressCheckout API call in the shortcut implementation
    
    		$nvpstr = "&PAYMENTREQUEST_0_AMT=". $paymentAmount;
    		$nvpstr .= "&PAYMENTREQUEST_0_PAYMENTACTION=" . $paymentType;
    		$nvpstr .= "&RETURNURL=" . $returnURL;
    		$nvpstr .= "&CANCELURL=" . $cancelURL;
    		$nvpstr .= "&PAYMENTREQUEST_0_CURRENCYCODE=" . $currencyCodeType;
    		$nvpstr .= "&REQCONFIRMSHIPPING=0";
    		$nvpstr .= "&NOSHIPPING=1";
    
    		foreach($items as $index => $item) {
    
    			$nvpstr .= "&L_PAYMENTREQUEST_0_NAME" . $index . "=" . urlencode($item["name"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_AMT" . $index . "=" . urlencode($item["amt"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_QTY" . $index . "=" . urlencode($item["qty"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_ITEMCATEGORY" . $index . "=Digital";
    		}
    
    		//'---------------------------------------------------------------------------------------------------------------
    		//' Make the API call to PayPal
    		//' If the API call succeded, then redirect the buyer to PayPal to begin to authorize payment.
    		//' If an error occured, show the resulting errors
    		//'---------------------------------------------------------------------------------------------------------------
    	    $resArray = hash_call("SetExpressCheckout", $nvpstr);
    		$ack = strtoupper($resArray["ACK"]);
    		if($ack == "SUCCESS" || $ack == "SUCCESSWITHWARNING")
    		{
    			$token = urldecode($resArray["TOKEN"]);
    			$_SESSION['TOKEN'] = $token;
    		}
    
    	    return $resArray;
    	}
    
    	/*
    	'-------------------------------------------------------------------------------------------
    	' Purpose: 	Prepares the parameters for the GetExpressCheckoutDetails API Call.
    	'
    	' Inputs:
    	'		None
    	' Returns:
    	'		The NVP Collection object of the GetExpressCheckoutDetails Call Response.
    	'-------------------------------------------------------------------------------------------
    	*/
    	function GetExpressCheckoutDetails( $token )
    	{
    		//'--------------------------------------------------------------
    		//' At this point, the buyer has completed authorizing the payment
    		//' at PayPal.  The function will call PayPal to obtain the details
    		//' of the authorization, incuding any shipping information of the
    		//' buyer.  Remember, the authorization is not a completed transaction
    		//' at this state - the buyer still needs an additional step to finalize
    		//' the transaction
    		//'--------------------------------------------------------------
    
    	    //'---------------------------------------------------------------------------
    		//' Build a second API request to PayPal, using the token as the
    		//'  ID to get the details on the payment authorization
    		//'---------------------------------------------------------------------------
    	    $nvpstr="&TOKEN=" . $token;
    
    		//'---------------------------------------------------------------------------
    		//' Make the API call and store the results in an array.
    		//'	If the call was a success, show the authorization details, and provide
    		//' 	an action to complete the payment.
    		//'	If failed, show the error
    		//'---------------------------------------------------------------------------
    	    $resArray=hash_call("GetExpressCheckoutDetails",$nvpstr);
    	    $ack = strtoupper($resArray["ACK"]);
    		if($ack == "SUCCESS" || $ack=="SUCCESSWITHWARNING")
    		{
    			return $resArray;
    		}
    		else return false;
    
    	}
    
    	/*
    	'-------------------------------------------------------------------------------------------------------------------------------------------
    	' Purpose: 	Prepares the parameters for the GetExpressCheckoutDetails API Call.
    	'
    	' Inputs:
    	'		sBNCode:	The BN code used by PayPal to track the transactions from a given shopping cart.
    	' Returns:
    	'		The NVP Collection object of the GetExpressCheckoutDetails Call Response.
    	'--------------------------------------------------------------------------------------------------------------------------------------------
    	*/
    	function ConfirmPayment( $token, $paymentType, $currencyCodeType, $payerID, $FinalPaymentAmt, $items )
    	{
    		/* Gather the information to make the final call to
    		   finalize the PayPal payment.  The variable nvpstr
    		   holds the name value pairs
    		   */
    		$token 				= urlencode($token);
    		$paymentType 		= urlencode($paymentType);
    		$currencyCodeType 	= urlencode($currencyCodeType);
    		$payerID 			= urlencode($payerID);
    		$serverName 		= urlencode($_SERVER['SERVER_NAME']);
    
    		$nvpstr  = '&TOKEN=' . $token . '&PAYERID=' . $payerID . '&PAYMENTREQUEST_0_PAYMENTACTION=' . $paymentType . '&PAYMENTREQUEST_0_AMT=' . $FinalPaymentAmt;
    		$nvpstr .= '&PAYMENTREQUEST_0_CURRENCYCODE=' . $currencyCodeType . '&IPADDRESS=' . $serverName; 
    
    		foreach($items as $index => $item) {
    
    			$nvpstr .= "&L_PAYMENTREQUEST_0_NAME" . $index . "=" . urlencode($item["name"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_AMT" . $index . "=" . urlencode($item["amt"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_QTY" . $index . "=" . urlencode($item["qty"]);
    			$nvpstr .= "&L_PAYMENTREQUEST_0_ITEMCATEGORY" . $index . "=Digital";
    		}
    		 /* Make the call to PayPal to finalize payment
    		    If an error occured, show the resulting errors
    		    */
    		$resArray=hash_call("DoExpressCheckoutPayment",$nvpstr);
    
    		/* Display the API response back to the browser.
    		   If the response from PayPal was a success, display the response parameters'
    		   If the response was an error, display the errors received using APIError.php.
    		   */
    		$ack = strtoupper($resArray["ACK"]);
    
    		return $resArray;
    	}
    	/**
    	  '-------------------------------------------------------------------------------------------------------------------------------------------
    	  * hash_call: Function to perform the API call to PayPal using API signature
    	  * @methodName is name of API  method.
    	  * @nvpStr is nvp string.
    	  * returns an associtive array containing the response from the server.
    	  '-------------------------------------------------------------------------------------------------------------------------------------------
    	*/
    	function hash_call($methodName,$nvpStr)
    	{
    		//declaring of global variables
    		global $API_Endpoint, $version, $API_UserName, $API_Password, $API_Signature;
    		global $USE_PROXY, $PROXY_HOST, $PROXY_PORT;
    		global $gv_ApiErrorURL;
    		global $sBNCode;
    
    		//setting the curl parameters.
    		$ch = curl_init();
    		curl_setopt($ch, CURLOPT_URL,$API_Endpoint);
    		curl_setopt($ch, CURLOPT_VERBOSE, 1);
    
    		//turning off the server and peer verification(TrustManager Concept).
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    		curl_setopt($ch, CURLOPT_POST, 1);
    
    	    //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
    	   //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php
    		if($USE_PROXY)
    			curl_setopt ($ch, CURLOPT_PROXY, $PROXY_HOST. ":" . $PROXY_PORT); 
    
    		//NVPRequest for submitting to server
    		$nvpreq="METHOD=" . urlencode($methodName) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . $nvpStr . "&BUTTONSOURCE=" . urlencode($sBNCode);
    
    		//setting the nvpreq as POST FIELD to curl
    		curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
    
    		//getting response from server
    		$response = curl_exec($ch);
    
    		//convrting NVPResponse to an Associative Array
    		$nvpResArray=deformatNVP($response);
    		$nvpReqArray=deformatNVP($nvpreq);
    		$_SESSION['nvpReqArray']=$nvpReqArray;
    
    		if (curl_errno($ch))
    		{
    			// moving to display page to display curl errors
    			  $_SESSION['curl_error_no']=curl_errno($ch) ;
    			  $_SESSION['curl_error_msg']=curl_error($ch);
    
    			  //Execute the Error handling module to display errors.
    		}
    		else
    		{
    			 //closing the curl
    		  	curl_close($ch);
    		}
    
    		return $nvpResArray;
    	}
    
    	/*'----------------------------------------------------------------------------------
    	 Purpose: Redirects to PayPal.com site.
    	 Inputs:  NVP string.
    	 Returns:
    	----------------------------------------------------------------------------------
    	*/
    	function RedirectToPayPal ( $token )
    	{
    		global $PAYPAL_URL;
    
    		// Redirect to paypal.com here
    		$payPalURL = $PAYPAL_URL . $token;
    		header("Location: ".$payPalURL);
    		exit;
    	}
    	function RedirectToPayPalDG ( $token )
    	{
    		global $PAYPAL_DG_URL;
    
    		// Redirect to paypal.com here
    		$payPalURL = $PAYPAL_DG_URL . $token;
    		header("Location: ".$payPalURL);
    		exit;
    	}
    
    	/*'----------------------------------------------------------------------------------
    	 * This function will take NVPString and convert it to an Associative Array and it will decode the response.
    	  * It is usefull to search for a particular key and displaying arrays.
    	  * @nvpstr is NVPString.
    	  * @nvpArray is Associative Array.
    	   ----------------------------------------------------------------------------------
    	  */
    	function deformatNVP($nvpstr)
    	{
    		$intial=0;
    	 	$nvpArray = array();
    
    		while(strlen($nvpstr))
    		{
    			//postion of Key
    			$keypos= strpos($nvpstr,'=');
    			//position of value
    			$valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr);
    
    			/*getting the Key and Value values and storing in a Associative Array*/
    			$keyval=substr($nvpstr,$intial,$keypos);
    			$valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1);
    			//decoding the respose
    			$nvpArray[urldecode($keyval)] =urldecode( $valval);
    			$nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr));
    	     }
    		return $nvpArray;
    	}
    Andrew Nevins

    (@anevins)

    WCLDN 2018 Contributor | Volunteer support

    Could you re-post this on your plugin’s subforum: http://wordpress.org/support/plugin/paypal-framework#postform ?

    Thread Starter exedesign2

    (@exedesign2)

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘wordpress with paypal checkout’ is closed to new replies.