I am using opencart 1.5.1.3 and experiencing a problem with the IPN from paypal standard.
The Notification URL I am seeing in paypal is http://www.MYDOMAIN.com/payment/pp_standard/callback
PayPal is processing the payment - so I received that notification, but the orders are being marked as
All incoming orders are being marked as 'abandoned orders' and are not sending the proper email notifications to the client and the admin.
There is a 404 on the paypal IPN page.
I have seen that many others have this similar issue. Has anyone solved it?
I hope so.
Thanks in advance!
The Notification URL I am seeing in paypal is http://www.MYDOMAIN.com/payment/pp_standard/callback
PayPal is processing the payment - so I received that notification, but the orders are being marked as
All incoming orders are being marked as 'abandoned orders' and are not sending the proper email notifications to the client and the admin.
There is a 404 on the paypal IPN page.
I have seen that many others have this similar issue. Has anyone solved it?
I hope so.
Thanks in advance!
Thank you for the quick response. Yes, the callback URL does show a 404. I have tried to manually update my success page in paypal, but that is not the URL that shows up for the notify URL on their IPN. I called them and they said that they believe my software is over-riding their fields. I am stuck. Thanks in advance!
Yes the software should be overriding it.
Go there yourself:
http://yoursite.com/index.php?route=pay ... d/callback
change "yoursite.com" to your actual site and load it in a brower. Do you get 404?
Go there yourself:
http://yoursite.com/index.php?route=pay ... d/callback
change "yoursite.com" to your actual site and load it in a brower. Do you get 404?
So I know now that the IPN is just not working and it's been causing a lot of annoying problems for the site. I really need assistance from anyone else who has had this issue and been able to fix it.
I am getting a 404 error from the IPN history at paypal. I am using 1.5.1.3 of opencart.
Thanks in advance!
I am getting a 404 error from the IPN history at paypal. I am using 1.5.1.3 of opencart.
Thanks in advance!
Has anyone worked though this issue and found a good solution? I have had zero success getting standard PayPal's IPN to work with my site. I have the 404 issue on the call back URL and am currently using v1.5.1.3 also. Any help would be much appreciated.
What do you see when you goto the callback url manually?
http://yoursite.com/index.php?route=pay ... d/callback
http://yoursite.com/index.php?route=pay ... d/callback
Thanks Qphoria...
The failing Paypal IPN is trying to send to:
mysite.com/payment/pp_standard/callback
Manually calling the the URL returns: The page you requested cannot be found.
If I change the path to:
mysite.com/index.php?route=payment/pp_standard/callback
The page is returns blank (nothing in source code either). If this is what should be returned, I have an issue with the URL path, but I am not certain on how to correct it...
FYI - I do have SEO friendly links active, flat-rate shipping module enabled. After continued failure, I also activated the PDT for this version of OC.
The failing Paypal IPN is trying to send to:
mysite.com/payment/pp_standard/callback
Manually calling the the URL returns: The page you requested cannot be found.
If I change the path to:
mysite.com/index.php?route=payment/pp_standard/callback
The page is returns blank (nothing in source code either). If this is what should be returned, I have an issue with the URL path, but I am not certain on how to correct it...
FYI - I do have SEO friendly links active, flat-rate shipping module enabled. After continued failure, I also activated the PDT for this version of OC.
Ah.. this is the problem it seems. SEO Friendly links may be causing the problem since youare seeing 404mkgriver wrote:Thanks Qphoria...
The failing Paypal IPN is trying to send to:
mysite.com/payment/pp_standard/callback
Manually calling the the URL returns: The page you requested cannot be found.
If I change the path to:
mysite.com/index.php?route=payment/pp_standard/callback
The page is returns blank (nothing in source code either). If this is what should be returned, I have an issue with the URL path, but I am not certain on how to correct it...
FYI - I do have SEO friendly links active, flat-rate shipping module enabled. After continued failure, I also activated the PDT for this version of OC.
The blank page you saw from mysite.com/index.php?route=payment/pp_standard/callback is correct, since it is expected callback variables. But 404 not found is what paypal is seeing and failing on.
So you need to remove or fix the friendly urls
FYI to anyone having this issue in 1.5.1.3
OC's SEO links will change your call back path, so PayPal's IPN will fail. I removed the SEO links until I can work through a better solution, but at least my PayPal orders are no longer showing as abandoned.
Thanks Q for the heads-up on this!
OC's SEO links will change your call back path, so PayPal's IPN will fail. I removed the SEO links until I can work through a better solution, but at least my PayPal orders are no longer showing as abandoned.
Thanks Q for the heads-up on this!
I am having abandoned orders on 1.5.2.1 except paypal is still going to correct address which shows blank white in browser
https://www.lordofthe.net/index.php?rou ... d/callback
this is in my error log and is every time I get paypal payment . I removed the stuff after gross_ for customer information privacy. Paypal response code is 200. I never had these issues before the update to 1.5.2 so I'm not sure if this is some major bug in new version or what.
https://www.lordofthe.net/index.php?rou ... d/callback
this is in my error log and is every time I get paypal payment . I removed the stuff after gross_ for customer information privacy. Paypal response code is 200. I never had these issues before the update to 1.5.2 so I'm not sure if this is some major bug in new version or what.
Code: Select all
2012-04-19 20:03:52 - PP_STANDARD :: CURL failed SSL connection timeout(28)
2012-04-19 20:03:52 - PP_STANDARD :: IPN REQUEST: cmd=_notify-validate&mc_gross_*******
2012-04-19 20:03:52 - PP_STANDARD :: IPN RESPONSE:
2012-04-19 20:03:52 - PHP Notice: Error: MySQL server has gone away<br />Error No: 2006
<br />SELECT *, (SELECT os.name FROM `order_status` os WHERE os.order_status_id =
o.order_status_id AND os.language_id = o.language_id) AS order_status FROM `order` o WHERE
o.order_id = '9592214' in /xxxxx/system/database/mysql.php on line 49
2012-04-19 20:09:41 - PHP Notice: Undefined variable: order_id in
/xxxxxxxxxxxxxxx/catalog/controller/account/order.php on line 149
https://www.lotnllc.com is your one stop shop for all your computer needs!
In case anyone else is having the same issue. This took many many unix admins to figure out. The problem was caused by recent pci compliance upgrade of openssl. PHP implementation of curl is not compatible with openssl 1.x and downgrading to openssl to 0.9.8 with all the current patches should still keep it compliant and fixed the problem. Basically curl was working fine connecting to https://www.paypal.com from command line which really made me look at the paypal standard which wasn't the problem. test php script for perl was just timing out for the ssl version of paypal site but worked for all non ssl sites. Also would automatically switch over to the non ssl version of sites so others looked like they worked when using https. Being that paypal didn't have a non ssl version this was like the only site not working which confused even more.
I hope this helps anyone in the future with similar problems.
I hope this helps anyone in the future with similar problems.
Code: Select all
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, "https://www.paypal.com");
$result = curl_exec($ch);
echo '<pre>';
print_r(curl_getinfo($ch));
echo '</pre>';
echo 'Errors: ' . curl_errno($ch) . ' ' . curl_error($ch) . '<br><br>';
curl_close ($ch);
echo $result . 'EOF';
?>
Last edited by Demon5 on Thu Jun 14, 2012 10:33 pm, edited 1 time in total.
https://www.lotnllc.com is your one stop shop for all your computer needs!
I'm sorry but not following. Is this a correction to an opencart file or what do you do with it???
I don't know what curl is.
I don't know what curl is.

Running Opencart v3.0.3.9 with multi-stores and the default template from https://www.labeshops.com which has links to all my stores.
if you were having the issue I was having you would want to contact your web host. make sure running openssl 0.9.8 instead of 1.x. And recompile apache/php with the openssl 0.9.8 libraries and also make sure curl is compiled with the openssl 0.9.8 libary. Your web hosting provider should understand. Especially hostgator if you use them since a large # of their admins were involved in figuring this out.
The code I put above if you make like a test.php file and put that in the code. If it shows paypal website this is not your problem. If it says SSL Timeout then it probably is.
The code I put above if you make like a test.php file and put that in the code. If it shows paypal website this is not your problem. If it says SSL Timeout then it probably is.
https://www.lotnllc.com is your one stop shop for all your computer needs!
Hello,
I have the same issue with 1.5.2.1.
When I enter on index.php?route=payment/pp_standard/callback in my site I get a white page with a "0".
I have added the Demon5 test to my page and I see under some lines of information the PayPal page correctly.
But I still get all my orders as abandoned.
Thank you.
I have the same issue with 1.5.2.1.
When I enter on index.php?route=payment/pp_standard/callback in my site I get a white page with a "0".
I have added the Demon5 test to my page and I see under some lines of information the PayPal page correctly.
But I still get all my orders as abandoned.
Thank you.
You will need to modify the code in catalog/controller/payment/pp_standard.phpQphoria wrote:Ah.. this is the problem it seems. SEO Friendly links may be causing the problem since youare seeing 404mkgriver wrote:Thanks Qphoria...
The failing Paypal IPN is trying to send to:
mysite.com/payment/pp_standard/callback
Manually calling the the URL returns: The page you requested cannot be found.
If I change the path to:
mysite.com/index.php?route=payment/pp_standard/callback
The page is returns blank (nothing in source code either). If this is what should be returned, I have an issue with the URL path, but I am not certain on how to correct it...
FYI - I do have SEO friendly links active, flat-rate shipping module enabled. After continued failure, I also activated the PDT for this version of OC.
The blank page you saw from mysite.com/index.php?route=payment/pp_standard/callback is correct, since it is expected callback variables. But 404 not found is what paypal is seeing and failing on.
So you need to remove or fix the friendly urls
Find:
Code: Select all
$this->data['notify_url'] = $this->url->link('payment/pp_standard/callback', '', 'SSL');
Code: Select all
$this->data['notify_url'] = $this->url->link('index.php?route=payment/pp_standard/callback', '', 'SSL');
THIS SHOULD TAKE CARE OF THE ABANDONED ORDERS PROBLEM.ryenoceros wrote:I am using opencart 1.5.1.3 and experiencing a problem with the IPN from paypal standard.
The Notification URL I am seeing in paypal is http://www.MYDOMAIN.com/payment/pp_standard/callback
PayPal is processing the payment - so I received that notification, but the orders are being marked as
All incoming orders are being marked as 'abandoned orders' and are not sending the proper email notifications to the client and the admin.
There is a 404 on the paypal IPN page.
I have seen that many others have this similar issue. Has anyone solved it?
I hope so.
Thanks in advance!
THE FOLLOWING IS A RECOMMENDED catalog/controller/payment/pp_standard.php FILE
Code: Select all
<?php
class ControllerPaymentPPStandard extends Controller {
protected function index() {
$this->language->load('payment/pp_standard');
$this->data['text_testmode'] = $this->language->get('text_testmode');
$this->data['button_confirm'] = $this->language->get('button_confirm');
$this->data['testmode'] = $this->config->get('pp_standard_test');
if (!$this->config->get('pp_standard_test')) {
$this->data['action'] = 'https://www.paypal.com/cgi-bin/webscr';
} else {
$this->data['action'] = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
}
$this->load->model('checkout/order');
$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
if ($order_info) {
$this->data['business'] = $this->config->get('pp_standard_email');
$this->data['item_name'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8');
$this->data['products'] = array();
foreach ($this->cart->getProducts() as $product) {
$option_data = array();
foreach ($product['option'] as $option) {
if ($option['type'] != 'file') {
$value = $option['option_value'];
} else {
$filename = $this->encryption->decrypt($option['option_value']);
$value = utf8_substr($filename, 0, utf8_strrpos($filename, '.'));
}
$option_data[] = array(
'name' => $option['name'],
'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
);
}
$this->data['products'][] = array(
'name' => $product['name'],
'model' => $product['model'],
'price' => $this->currency->format($product['price'], $order_info['currency_code'], false, false),
'quantity' => $product['quantity'],
'option' => $option_data,
'weight' => $product['weight']
);
}
$this->data['discount_amount_cart'] = 0;
$total = $this->currency->format($order_info['total'] - $this->cart->getSubTotal(), $order_info['currency_code'], false, false);
if ($total > 0) {
$this->data['products'][] = array(
'name' => $this->language->get('text_total'),
'model' => '',
'price' => $total,
'quantity' => 1,
'option' => array(),
'weight' => 0
);
} else {
$this->data['discount_amount_cart'] -= $total;
}
$this->data['currency_code'] = $order_info['currency_code'];
$this->data['first_name'] = html_entity_decode($order_info['payment_firstname'], ENT_QUOTES, 'UTF-8');
$this->data['last_name'] = html_entity_decode($order_info['payment_lastname'], ENT_QUOTES, 'UTF-8');
$this->data['address1'] = html_entity_decode($order_info['payment_address_1'], ENT_QUOTES, 'UTF-8');
$this->data['address2'] = html_entity_decode($order_info['payment_address_2'], ENT_QUOTES, 'UTF-8');
$this->data['city'] = html_entity_decode($order_info['payment_city'], ENT_QUOTES, 'UTF-8');
$this->data['state'] = html_entity_decode($order_info['payment_zone_code'], ENT_QUOTES, 'UTF-8');
$this->data['zip'] = html_entity_decode($order_info['payment_postcode'], ENT_QUOTES, 'UTF-8');
$this->data['country'] = $order_info['payment_iso_code_2'];
$this->data['email'] = $order_info['email'];
$this->data['invoice'] = $this->session->data['order_id'] . ' - ' . html_entity_decode($order_info['payment_firstname'], ENT_QUOTES, 'UTF-8') . ' ' . html_entity_decode($order_info['payment_lastname'], ENT_QUOTES, 'UTF-8');
$this->data['lc'] = $this->session->data['language'];
$this->data['return'] = $this->url->link('index.php?route=checkout/success');
$this->data['notify_url'] = $this->url->link('index.php?route=payment/pp_standard/callback', '', 'SSL');
$this->data['cancel_return'] = $this->url->link('checkout/checkout', '', 'SSL');
if (!$this->config->get('pp_standard_transaction')) {
$this->data['paymentaction'] = 'authorization';
} else {
$this->data['paymentaction'] = 'sale';
}
$this->data['custom'] = $this->encryption->encrypt($this->session->data['order_id']);
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/pp_standard.tpl')) {
$this->template = $this->config->get('config_template') . '/template/payment/pp_standard.tpl';
} else {
$this->template = 'default/template/payment/pp_standard.tpl';
}
$this->render();
}
}
public function callback() {
if (isset($this->request->post['custom'])) {
$order_id = $this->encryption->decrypt($this->request->post['custom']);
} else {
$order_id = 0;
}
$this->load->model('checkout/order');
$order_info = $this->model_checkout_order->getOrder($order_id);
if ($order_info) {
$request = 'cmd=_notify-validate';
foreach ($this->request->post as $key => $value) {
$request .= '&' . $key . '=' . urlencode(html_entity_decode($value, ENT_QUOTES, 'UTF-8'));
}
if (!$this->config->get('pp_standard_test')) {
$curl = curl_init('https://www.paypal.com/cgi-bin/webscr');
} else {
$curl = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
}
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
if (!$response) {
$this->log->write('PP_STANDARD :: CURL failed ' . curl_error($curl) . '(' . curl_errno($curl) . ')');
}
if ($this->config->get('pp_standard_debug')) {
$this->log->write('PP_STANDARD :: IPN REQUEST: ' . $request);
$this->log->write('PP_STANDARD :: IPN RESPONSE: ' . $response);
}
if ((strcmp($response, 'VERIFIED') == 0 || strcmp($response, 'UNVERIFIED') == 0) && isset($this->request->post['payment_status'])) {
$order_status_id = $this->config->get('config_order_status_id');
switch($this->request->post['payment_status']) {
case 'Canceled_Reversal':
$order_status_id = $this->config->get('pp_standard_canceled_reversal_status_id');
break;
case 'Completed':
if ((strtolower($this->request->post['receiver_email']) == strtolower($this->config->get('pp_standard_email'))) && ((float)$this->request->post['mc_gross'] == $this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false))) {
$order_status_id = $this->config->get('pp_standard_completed_status_id');
} else {
$this->log->write('PP_STANDARD :: RECEIVER EMAIL MISMATCH! ' . strtolower($this->request->post['receiver_email']));
}
break;
case 'Denied':
$order_status_id = $this->config->get('pp_standard_denied_status_id');
break;
case 'Expired':
$order_status_id = $this->config->get('pp_standard_expired_status_id');
break;
case 'Failed':
$order_status_id = $this->config->get('pp_standard_failed_status_id');
break;
case 'Pending':
$order_status_id = $this->config->get('pp_standard_pending_status_id');
break;
case 'Processed':
$order_status_id = $this->config->get('pp_standard_processed_status_id');
break;
case 'Refunded':
$order_status_id = $this->config->get('pp_standard_refunded_status_id');
break;
case 'Reversed':
$order_status_id = $this->config->get('pp_standard_reversed_status_id');
break;
case 'Voided':
$order_status_id = $this->config->get('pp_standard_voided_status_id');
break;
}
if (!$order_info['order_status_id']) {
$this->model_checkout_order->confirm($order_id, $order_status_id);
} else {
$this->model_checkout_order->update($order_id, $order_status_id);
}
} else {
$this->model_checkout_order->confirm($order_id, $this->config->get('config_order_status_id'));
}
curl_close($curl);
}
}
}
?>
Code: Select all
<?php if ($testmode) { ?>
<div class="warning"><?php echo $text_testmode; ?></div>
<?php } ?>
<form action="<?php echo $action; ?>" method="post">
<input type="hidden" name="cmd" value="_cart" />
<input type="hidden" name="upload" value="1" />
<input type="hidden" name="business" value="<?php echo $business; ?>" />
<?php $i = 1; ?>
<?php foreach ($products as $product) { ?>
<input type="hidden" name="item_name_<?php echo $i; ?>" value="<?php echo $product['name']; ?>" />
<input type="hidden" name="item_number_<?php echo $i; ?>" value="<?php echo $product['model']; ?>" />
<input type="hidden" name="amount_<?php echo $i; ?>" value="<?php echo $product['price']; ?>" />
<input type="hidden" name="quantity_<?php echo $i; ?>" value="<?php echo $product['quantity']; ?>" />
<input type="hidden" name="weight_<?php echo $i; ?>" value="<?php echo $product['weight']; ?>" />
<?php $j = 0; ?>
<?php foreach ($product['option'] as $option) { ?>
<input type="hidden" name="on<?php echo $j; ?>_<?php echo $i; ?>" value="<?php echo $option['name']; ?>" />
<input type="hidden" name="os<?php echo $j; ?>_<?php echo $i; ?>" value="<?php echo $option['value']; ?>" />
<?php $j++; ?>
<?php } ?>
<?php $i++; ?>
<?php } ?>
<?php if ($discount_amount_cart) { ?>
<input type="hidden" name="discount_amount_cart" value="<?php echo $discount_amount_cart; ?>" />
<?php } ?>
<input type="hidden" name="currency_code" value="<?php echo $currency_code; ?>" />
<input type="hidden" name="first_name" value="<?php echo $first_name; ?>" />
<input type="hidden" name="last_name" value="<?php echo $last_name; ?>" />
<input type="hidden" name="address1" value="<?php echo $address1; ?>" />
<input type="hidden" name="address2" value="<?php echo $address2; ?>" />
<input type="hidden" name="city" value="<?php echo $city; ?>" />
<input type="hidden" name="state" value="<?php echo $state; ?>" />
<input type="hidden" name="zip" value="<?php echo $zip; ?>" />
<input type="hidden" name="country" value="<?php echo $country; ?>" />
<input type="hidden" name="address_override" value="0" />
<input type="hidden" name="email" value="<?php echo $email; ?>" />
<input type="hidden" name="invoice" value="<?php echo $invoice; ?>" />
<input type="hidden" name="lc" value="<?php echo $lc; ?>" />
<input type="hidden" name="rm" value="2" />
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="charset" value="utf-8" />
<input type="hidden" name="return" value="<?php echo $return; ?>" />
<input type="hidden" name="notify_url" value="<?php echo $notify_url; ?>" />
<input type="hidden" name="cancel_return" value="<?php echo $cancel_return; ?>" />
<input type="hidden" name="paymentaction" value="<?php echo $paymentaction; ?>" />
<input type="hidden" name="custom" value="<?php echo $custom; ?>" />
<div class="buttons">
<div class="right">
<input type="submit" value="<?php echo $button_confirm; ?>" class="button" />
</div>
</div>
</form>
How these folks at OpenCart can release vital code with so many errors baffles me.
Open the file catalog/controller/payment/pp_standard.phpryenoceros wrote:I am using opencart 1.5.1.3 and experiencing a problem with the IPN from paypal standard.
The Notification URL I am seeing in paypal is http://www.MYDOMAIN.com/payment/pp_standard/callback
PayPal is processing the payment - so I received that notification, but the orders are being marked as
All incoming orders are being marked as 'abandoned orders' and are not sending the proper email notifications to the client and the admin.
There is a 404 on the paypal IPN page.
I have seen that many others have this similar issue. Has anyone solved it?
I hope so.
Thanks in advance!
Find the following:
Code: Select all
$this->data['return'] = $this->url->link('checkout/success');
$this->data['notify_url'] = $this->url->link('payment/pp_standard/callback', '', 'SSL');
Code: Select all
$this->data['return'] = $this->url->link('index.php?route=checkout/success');
$this->data['notify_url'] = $this->url->link('index.php?route=payment/pp_standard/callback', '', 'SSL');
Don't look to Daniel & Company for much help, as their policy is to deny things are wrong and blame it on someone else, such as your web hosting provider.
OpenCart 5.1.X.X appears to have been a rush-job, and critical sections such as payment gateways have apparently not even been tested. It's sad, really it is.
Who is online
Users browsing this forum: No registered users and 12 guests