klarna_checkout.php (5984B)
1 <?php 2 use Klarna\Rest\Transport\Connector as KCConnector; 3 use Klarna\Rest\Transport\ConnectorInterface as KCConnectorInterface; 4 use Klarna\Rest\OrderManagement\Order as KCOrder; 5 6 class ModelExtensionPaymentKlarnaCheckout extends Model { 7 public function connector($merchant_id, $secret, $url) { 8 try { 9 $connector = KCConnector::create( 10 $merchant_id, 11 $secret, 12 $url 13 ); 14 15 return $connector; 16 } catch (\Exception $e) { 17 $this->log($e->getMessage()); 18 19 return false; 20 } 21 } 22 23 public function omRetrieve(KCConnector $connector, $order_id) { 24 try { 25 $order = new KCOrder($connector, $order_id); 26 27 return $order->fetch(); 28 } catch (\Exception $e) { 29 $this->log($e->getMessage()); 30 31 return false; 32 } 33 } 34 35 public function omCancel(KCConnector $connector, $order_id) { 36 try { 37 $order = new KCOrder($connector, $order_id); 38 39 return $order->cancel(); 40 } catch (\Exception $e) { 41 $this->log($e->getMessage()); 42 43 return false; 44 } 45 } 46 47 public function omCapture(KCConnector $connector, $order_id, $data) { 48 try { 49 $order = new KCOrder($connector, $order_id); 50 51 return $order->createCapture($data); 52 } catch (\Exception $e) { 53 $this->log($e->getMessage()); 54 55 return false; 56 } 57 } 58 59 public function omRefund(KCConnector $connector, $order_id, $data) { 60 try { 61 $order = new KCOrder($connector, $order_id); 62 63 return $order->refund($data); 64 } catch (\Exception $e) { 65 $this->log($e->getMessage()); 66 67 return false; 68 } 69 } 70 71 public function omExtendAuthorizationTime(KCConnector $connector, $order_id) { 72 try { 73 $order = new KCOrder($connector, $order_id); 74 75 return $order->extendAuthorizationTime(); 76 } catch (\Exception $e) { 77 $this->log($e->getMessage()); 78 79 return false; 80 } 81 } 82 83 public function omUpdateMerchantReference(KCConnector $connector, $order_id, $data) { 84 try { 85 $order = new KCOrder($connector, $order_id); 86 87 return $order->updateMerchantReferences($data); 88 } catch (\Exception $e) { 89 $this->log($e->getMessage()); 90 91 return false; 92 } 93 } 94 95 public function omUpdateAddress(KCConnector $connector, $order_id, $data) { 96 try { 97 $order = new KCOrder($connector, $order_id); 98 99 return $order->updateCustomerDetails($data); 100 } catch (\Exception $e) { 101 $this->log($e->getMessage()); 102 103 return false; 104 } 105 } 106 107 public function omReleaseAuthorization(KCConnector $connector, $order_id) { 108 try { 109 $order = new KCOrder($connector, $order_id); 110 111 return $order->releaseRemainingAuthorization(); 112 } catch (\Exception $e) { 113 $this->log($e->getMessage()); 114 115 return false; 116 } 117 } 118 119 public function omShippingInfo(KCConnector $connector, $order_id, $capture_id, $data) { 120 try { 121 $order = new KCOrder($connector, $order_id); 122 123 $capture = $order->fetchCapture($capture_id); 124 return $capture->addShippingInfo($data); 125 } catch (\Exception $e) { 126 $this->log($e->getMessage()); 127 128 return false; 129 } 130 } 131 132 public function omCustomerDetails(KCConnector $connector, $order_id, $capture_id, $data) { 133 try { 134 $order = new KCOrder($connector, $order_id); 135 136 $capture = $order->fetchCapture($capture_id); 137 return $capture->updateCustomerDetails($data); 138 } catch (\Exception $e) { 139 $this->log($e->getMessage()); 140 141 return false; 142 } 143 } 144 145 public function omTriggerSendOut(KCConnector $connector, $order_id, $capture_id) { 146 try { 147 $order = new KCOrder($connector, $order_id); 148 149 $capture = $order->fetchCapture($capture_id); 150 return $capture->triggerSendout(); 151 } catch (\Exception $e) { 152 $this->log($e->getMessage()); 153 154 return false; 155 } 156 } 157 158 public function getConnector($accounts, $currency) { 159 $klarna_account = false; 160 $connector = false; 161 162 if ($accounts && $currency) { 163 foreach ($accounts as $account) { 164 if ($account['currency'] == $currency) { 165 if ($account['environment'] == 'test') { 166 if ($account['api'] == 'NA') { 167 $base_url = KCConnectorInterface::NA_TEST_BASE_URL; 168 } elseif ($account['api'] == 'EU') { 169 $base_url = KCConnectorInterface::EU_TEST_BASE_URL; 170 } 171 } elseif ($account['environment'] == 'live') { 172 if ($account['api'] == 'NA') { 173 $base_url = KCConnectorInterface::NA_BASE_URL; 174 } elseif ($account['api'] == 'EU') { 175 $base_url = KCConnectorInterface::EU_BASE_URL; 176 } 177 } 178 179 $klarna_account = $account; 180 $connector = $this->connector( 181 $account['merchant_id'], 182 $account['secret'], 183 $base_url 184 ); 185 186 break; 187 } 188 } 189 } 190 191 return array($klarna_account, $connector); 192 } 193 194 public function getOrder($order_id) { 195 return $this->db->query("SELECT * FROM `" . DB_PREFIX . "klarna_checkout_order` WHERE `order_id` = '" . (int)$order_id . "' LIMIT 1")->row; 196 } 197 198 public function checkForPaymentTaxes() { 199 $query = $this->db->query("SELECT COUNT(*) AS `total` FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "tax_rule tr ON (`tr`.`tax_class_id` = `p`.`tax_class_id`) WHERE `tr`.`based` = 'payment'"); 200 201 return $query->row['total']; 202 } 203 204 public function install() { 205 $this->db->query(" 206 CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "klarna_checkout_order` ( 207 `klarna_checkout_order_id` INT(11) NOT NULL AUTO_INCREMENT, 208 `order_id` INT(11) NOT NULL, 209 `order_ref` VARCHAR(255) NOT NULL, 210 `data` text NOT NULL, 211 PRIMARY KEY (`klarna_checkout_order_id`) 212 ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;"); 213 } 214 215 public function uninstall() { 216 $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "klarna_checkout_order`;"); 217 } 218 219 public function log($data) { 220 if ($this->config->get('klarna_checkout_debug')) { 221 $backtrace = debug_backtrace(); 222 $log = new Log('klarna_checkout.log'); 223 $log->write('(' . $backtrace[1]['class'] . '::' . $backtrace[1]['function'] . ') - ' . print_r($data, true)); 224 } 225 } 226 }