Jump to content

ASP.net Page Call


Doctord_Fl

Recommended Posts

I am trying to call an ASP.net page on a different domain and sending variable values by the below method

Header('Location: http://domain.com/PayPalPayment.aspx?InvoiceID=' . $invoiceID . '&payment=' . $payment . '&ipn_track_ID=' . $ipn_track_ID . '&payment_status=' . $payment_status . '&transID=' . $transID);

I have inserted the call in different areas of the php, as you will see :)

 

The Logs are created, but the ASP page is not called

Here is my php..........

 

<?php namespace Listener;
// Set this to true to use the sandbox endpoint during testing:
$enable_sandbox = true;
// Use this to specify all of the email addresses that you have attached to paypal:
$my_email_addresses = array("jm@domain.com", "peteh@domain.com", "peteh-facilitator@domain.com");
// Set this to true to send a confirmation email:
$send_confirmation_email = true;
$confirmation_email_address = "My Name <office@domain.com>";
$from_email_address = "My Name <peteh@domain.com>";
// Set this to true to save a log file:
$save_log_file = true;
$log_file_dir = __DIR__ . "/logs";
// Here is some information on how to configure sendmail:
// http://php.net/manual/en/function.mail.php#118210
require('PaypalIPN.php');
use PaypalIPN;
$ipn = new PaypalIPN();
if ($enable_sandbox) {
    $ipn->useSandbox();
}
$verified = $ipn->verifyIPN();
$data_text = "";
foreach ($_POST as $key => $value) {
    $data_text .= $key . " = " . $value . "\r\n";
}
$test_text = "";
if ($_POST["test_ipn"] == 1) {
    $test_text = "Test ";
}
// Check the receiver email to see if it matches your list of paypal email addresses
$receiver_email_found = false;
foreach ($my_email_addresses as $a) {
    if (strtolower($_POST["receiver_email"]) == strtolower($a)) {
        $receiver_email_found = true;
        break;
    }
}
date_default_timezone_set("America/Los_Angeles");
list($year, $month, $day, $hour, $minute, $second, $timezone) = explode(":", date("Y:m:d:H:i:s:T"));
$date = $year . "-" . $month . "-" . $day;
$timestamp = $date . " " . $hour . ":" . $minute . ":" . $second . " " . $timezone;
$dated_log_file_dir = $log_file_dir . "/" . $year . "/" . $month;
$paypal_ipn_status = "VERIFICATION FAILED";
if ($verified) {
    $paypal_ipn_status = "RECEIVER EMAIL MISMATCH";
    if ($receiver_email_found) {
        $paypal_ipn_status = "Completed Successfully";
        // Process IPN
        // A list of variables are available here:
        // https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/
        // This is an example for sending an automated email to the customer when they purchases an item for a specific amount:
        if ($_POST["payment_status"] == "Completed") {
            $invoiceID = $_POST["invoice"];
            $payment = $_POST["mc_gross"];
            $ipn_track_ID = $_POST["ipn_track_id"];
            $payment_status = $_POST["payment_status"];
            $transID = $_POST["txn_id"];
                        
            Header('Location: http://twa.domain.com/PayPalPayment.aspx?InvoiceID=' . $invoiceID . '&payment=' . $payment . '&ipn_track_ID=' . $ipn_track_ID . '&payment_status=' . $payment_status . '&transID=' . $transID);
                    
            
            
            // Send EMAIL
            // $email_to = $_POST["first_name"] . " " . $_POST["last_name"] . " <" . $_POST["payer_email"] . ">";
            // $email_subject = $test_text . "Completed order for: " . $_POST["item_name"];
            // $email_body = "Thank you for purchasing " . $_POST["item_name"] . "." . "\r\n" . "\r\n" . "This is an example email only." . "\r\n" . "\r\n" . "Thank you.";
            // mail($email_to, $email_subject, $email_body, "From: " . $from_email_address);
        }
    }
} elseif ($enable_sandbox) {
    if ($_POST["test_ipn"] != 1) {
        $paypal_ipn_status = "RECEIVED FROM LIVE WHILE SANDBOXED";
        Header('Location: http://domain.com/PayPalPayment.aspx?InvoiceID=' . $invoiceID . '&payment=' . $payment . '&ipn_track_ID=' . $ipn_track_ID . '&payment_status=' . $payment_status . '&transID=' . $transID);
            
    }
} elseif ($_POST["test_ipn"] == 1) {
    $paypal_ipn_status = "RECEIVED FROM SANDBOX WHILE LIVE";
}
if ($save_log_file) {
    // Create log file directory
    if (!is_dir($dated_log_file_dir)) {
        if (!file_exists($dated_log_file_dir)) {
            mkdir($dated_log_file_dir, 0777, true);
            if (!is_dir($dated_log_file_dir)) {
                $save_log_file = false;
            }
        } else {
            $save_log_file = false;
        }
    }
    // Restrict web access to files in the log file directory
    $htaccess_body = "RewriteEngine On" . "\r\n" . "RewriteRule .* - [L,R=404]";
    if ($save_log_file && (!is_file($log_file_dir . "/.htaccess") || file_get_contents($log_file_dir . "/.htaccess") !== $htaccess_body)) {
        if (!is_dir($log_file_dir . "/.htaccess")) {
            file_put_contents($log_file_dir . "/.htaccess", $htaccess_body);
            if (!is_file($log_file_dir . "/.htaccess") || file_get_contents($log_file_dir . "/.htaccess") !== $htaccess_body) {
                $save_log_file = false;
            }
        } else {
            $save_log_file = false;
        }
    }
    if ($save_log_file) {
        // Save data to text file
        file_put_contents($dated_log_file_dir . "/" . $test_text . "paypal_ipn_" . $date . ".txt", "paypal_ipn_status = " . $paypal_ipn_status . "\r\n" . "paypal_ipn_date = " . $timestamp . "\r\n" . $data_text . "\r\n", FILE_APPEND);
        Header('Location: http://domain.com/PayPalPayment.aspx?InvoiceID=' . $invoiceID . '&payment=' . $payment . '&ipn_track_ID=' . $ipn_track_ID . '&payment_status=' . $payment_status . '&transID=' . $transID);
    }
}
if ($send_confirmation_email) {
    // Send confirmation email
    Header('Location: http://domain.com/PayPalPayment.aspx?InvoiceID=' . $invoiceID . '&payment=' . $payment . '&ipn_track_ID=' . $ipn_track_ID . '&payment_status=' . $payment_status . '&transID=' . $transID);
    mail($confirmation_email_address, $test_text . "PayPal IPN : " . $paypal_ipn_status, "paypal_ipn_status = " . $paypal_ipn_status . "\r\n" . "paypal_ipn_date = " . $timestamp . "\r\n" . $data_text, "From: " . $from_email_address);
}
// Reply with an empty 200 response to indicate to paypal the IPN was received correctly
header("HTTP/1.1 200 OK", False);

 

 

 

Here is a Log file.....

paypal_ipn_status = RECEIVED FROM LIVE WHILE SANDBOXED

paypal_ipn_date = 2018-07-01 16:53:33 PDT

mc_gross = 1086.41

invoice = INV-32223

protection_eligibility = Eligible

address_status = confirmed

payer_id = Private

address_street = Private

payment_date = 16:53:27 Jul 01, 2018 PDT

payment_status = Completed

charset = windows-1252

address_zip = Private

first_name = Private

mc_fee = 31.81

address_country_code = US

address_name = Private

notify_version = 3.9

custom = 

payer_status = unverified

business = peteh@domain.com

address_country = United States

address_city = Private

quantity = 1

verify_sign = Private

payer_email = Private

txn_id = Private

payment_type = instant

last_name = Private

address_state = MI

receiver_email = peteh@domain.com

payment_fee = 31.81

shipping_discount = 0.00

insurance_amount = 0.00

receiver_id = Private

txn_type = web_accept

item_name = Private Payment

discount = 0.00

mc_currency = USD

item_number = 

residence_country = US

receipt_id = Private

shipping_method = Default

transaction_subject = 

payment_gross = 1086.41

ipn_track_id = Private

Link to comment
Share on other sites

Required PaypalIPN file.....

 

<?php
class PaypalIPN
{
    /**
     * @var bool $use_sandbox     Indicates if the sandbox endpoint is used.
     */
    private $use_sandbox = false;
    /**
     * @var bool $use_local_certs Indicates if the local certificates are used.
     */
    private $use_local_certs = true;
    /** Production Postback URL */
    const VERIFY_URI = 'https://ipnpb.paypal.com/cgi-bin/webscr';
    /** Sandbox Postback URL */
    const SANDBOX_VERIFY_URI = 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr';
    /** Response from PayPal indicating validation was successful */
    const VALID = 'VERIFIED';
    /** Response from PayPal indicating validation failed */
    const INVALID = 'INVALID';
    /**
     * Sets the IPN verification to sandbox mode (for use when testing,
     * should not be enabled in production).
     * @return void
     */
    public function useSandbox()
    {
        $this->use_sandbox = true;
    }
    /**
     * Sets curl to use php curl's built in certs (may be required in some
     * environments).
     * @return void
     */
    public function usePHPCerts()
    {
        $this->use_local_certs = false;
    }
    /**
     * Determine endpoint to post the verification data to.
     * @return string
     */
    public function getPaypalUri()
    {
        if ($this->use_sandbox) {
            return self::SANDBOX_VERIFY_URI;
        } else {
            return self::VERIFY_URI;
        }
    }
    /**
     * Verification Function
     * Sends the incoming post data back to PayPal using the cURL library.
     *
     * @return bool
     * @throws Exception
     */
    public function verifyIPN()
    {
        if ( ! count($_POST)) {
            throw new Exception("Missing POST Data");
        }
        $raw_post_data = file_get_contents('php://input');
        $raw_post_array = explode('&', $raw_post_data);
        $myPost = array();
        foreach ($raw_post_array as $keyval) {
            $keyval = explode('=', $keyval);
            if (count($keyval) == 2) {
                // Since we do not want the plus in the datetime string to be encoded to a space, we manually encode it.
                if ($keyval[0] === 'payment_date') {
                    if (substr_count($keyval[1], '+') === 1) {
                        $keyval[1] = str_replace('+', '%2B', $keyval[1]);
                    }
                }
                $myPost[$keyval[0]] = urldecode($keyval[1]);
            }
        }
        // Build the body of the verification post request, adding the _notify-validate command.
        $req = 'cmd=_notify-validate';
        $get_magic_quotes_exists = false;
        if (function_exists('get_magic_quotes_gpc')) {
            $get_magic_quotes_exists = true;
        }
        foreach ($myPost as $key => $value) {
            if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
                $value = urlencode(stripslashes($value));
            } else {
                $value = urlencode($value);
            }
            $req .= "&$key=$value";
        }
        // Post the data back to PayPal, using curl. Throw exceptions if errors occur.
        $ch = curl_init($this->getPaypalUri());
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
        curl_setopt($ch, CURLOPT_SSLVERSION, 6);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        // This is often required if the server is missing a global cert bundle, or is using an outdated one.
        if ($this->use_local_certs) {
            curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/cert/cacert.pem");
        }
        curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
        $res = curl_exec($ch);
        if ( ! ($res)) {
            $errno = curl_errno($ch);
            $errstr = curl_error($ch);
            curl_close($ch);
            throw new Exception("cURL error: [$errno] $errstr");
        }
        $info = curl_getinfo($ch);
        $http_code = $info['http_code'];
        if ($http_code != 200) {
            throw new Exception("PayPal responded with http code $http_code");
        }
        curl_close($ch);
        // Check if PayPal verifies the IPN data, and if so, return true.
        if ($res == self::VALID) {
            return true;
        } else {
            return false;
        }
    }
}

Link to comment
Share on other sites

The code PHP code works.

I am asking for help on the placement of the line to call the asp.net page
I have read that a "Header('Location: "  call can only be used in the beginning of the PHP

If there is a better way to make the call without "Header('Location:" then I'm open to ideas

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.