/catalog/controller/payment/nochex.php

https://gitlab.com/reclamare/mao · PHP · 131 lines · 91 code · 32 blank · 8 comment · 22 complexity · 06ee4840e45d83a531886b5f7a9383ca MD5 · raw file

  1. <?php
  2. // Nochex via form will work for both simple "Seller" account and "Merchant" account holders
  3. // Nochex via APC maybe only avaiable to "Merchant" account holders only - site docs a bit vague on this point
  4. class ControllerPaymentNochex extends Controller {
  5. public function index() {
  6. $this->load->language('payment/nochex');
  7. $data['button_confirm'] = $this->language->get('button_confirm');
  8. $this->load->model('checkout/order');
  9. $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
  10. $data['action'] = 'https://secure.nochex.com/';
  11. // Nochex minimum requirements
  12. // The merchant ID is usually your Nochex registered email address but can be altered for "Merchant" accounts see below
  13. if ($this->config->get('nochex_email') != $this->config->get('nochex_merchant')) {
  14. // This MUST be changed on your Nochex account!!!!
  15. $data['merchant_id'] = $this->config->get('nochex_merchant');
  16. } else {
  17. $data['merchant_id'] = $this->config->get('nochex_email');
  18. }
  19. $data['amount'] = $this->currency->format($order_info['total'], 'GBP', false, false);
  20. $data['order_id'] = $this->session->data['order_id'];
  21. $data['description'] = $this->config->get('config_name');
  22. $data['billing_fullname'] = $order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'];
  23. if ($order_info['payment_address_2']) {
  24. $data['billing_address'] = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_address_2'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
  25. } else {
  26. $data['billing_address'] = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
  27. }
  28. $data['billing_postcode'] = $order_info['payment_postcode'];
  29. if ($this->cart->hasShipping()) {
  30. $data['delivery_fullname'] = $order_info['shipping_firstname'] . ' ' . $order_info['shipping_lastname'];
  31. if ($order_info['shipping_address_2']) {
  32. $data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['shipping_address_2'] . "\r\n" . $order_info['shipping_city'] . "\r\n" . $order_info['shipping_zone'] . "\r\n";
  33. } else {
  34. $data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['shipping_city'] . "\r\n" . $order_info['shipping_zone'] . "\r\n";
  35. }
  36. $data['delivery_postcode'] = $order_info['shipping_postcode'];
  37. } else {
  38. $data['delivery_fullname'] = $order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'];
  39. if ($order_info['payment_address_2']) {
  40. $data['delivery_address'] = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_address_2'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
  41. } else {
  42. $data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
  43. }
  44. $data['delivery_postcode'] = $order_info['payment_postcode'];
  45. }
  46. $data['email_address'] = $order_info['email'];
  47. $data['customer_phone_number']= $order_info['telephone'];
  48. $data['test'] = $this->config->get('nochex_test');
  49. $data['success_url'] = $this->url->link('checkout/success', '', 'SSL');
  50. $data['cancel_url'] = $this->url->link('checkout/payment', '', 'SSL');
  51. $data['declined_url'] = $this->url->link('payment/nochex/callback', 'method=decline', 'SSL');
  52. $data['callback_url'] = $this->url->link('payment/nochex/callback', 'order=' . $this->session->data['order_id'], 'SSL');
  53. if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/nochex.tpl')) {
  54. return $this->load->view($this->config->get('config_template') . '/template/payment/nochex.tpl', $data);
  55. } else {
  56. return $this->load->view('default/template/payment/nochex.tpl', $data);
  57. }
  58. }
  59. public function callback() {
  60. $this->load->language('payment/nochex');
  61. if (isset($this->request->get['method']) && $this->request->get['method'] == 'decline') {
  62. $this->session->data['error'] = $this->language->get('error_declined');
  63. $this->response->redirect($this->url->link('checkout/cart'));
  64. }
  65. if (isset($this->request->post['order_id'])) {
  66. $order_id = $this->request->post['order_id'];
  67. } else {
  68. $order_id = 0;
  69. }
  70. $this->load->model('checkout/order');
  71. $order_info = $this->model_checkout_order->getOrder($order_id);
  72. if (!$order_info) {
  73. $this->session->data['error'] = $this->language->get('error_no_order');
  74. $this->response->redirect($this->url->link('checkout/cart'));
  75. }
  76. // Fraud Verification Step.
  77. $request = '';
  78. foreach ($this->request->post as $key => $value) {
  79. $request .= '&' . $key . '=' . urlencode(stripslashes($value));
  80. }
  81. $curl = curl_init('https://www.nochex.com/nochex.dll/apc/apc');
  82. curl_setopt($curl, CURLOPT_POST, true);
  83. curl_setopt($curl, CURLOPT_POSTFIELDS, trim($request, '&'));
  84. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  85. curl_setopt($curl, CURLOPT_HEADER, false);
  86. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  87. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  88. $response = curl_exec($curl);
  89. curl_close($curl);
  90. if (strcmp($response, 'AUTHORISED') == 0) {
  91. $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('nochex_order_status_id'));
  92. } else {
  93. $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('config_order_status_id'), 'Auto-Verification step failed. Manually check the transaction.');
  94. }
  95. // Since it returned, the customer should see success.
  96. // It's up to the store owner to manually verify payment.
  97. $this->response->redirect($this->url->link('checkout/success', '', 'SSL'));
  98. }
  99. }