WordPress.org

Forums

PayPal Framework
wordpress with paypal checkout (1 post)

  1. exedesign2
    Member
    Posted 1 year ago #

    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;
            }
    }<code>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:</code>$paymentAmount = "99"<code>instead of numeric value using a meta value that is:</code>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.
    The price/amount I want to automate is require by my paypal checkout file
    that is called on the header of above codesrequire_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;
    }`Thanks for helping. I have been dealing with this for 2 days now and I figure I might get better help here.

    http://wordpress.org/plugins/paypal-framework/

Topic Closed

This topic has been closed to new replies.

About this Plugin

  • PayPal Framework
  • Frequently Asked Questions
  • Support Threads
  • Reviews

About this Topic