public static function authorize(AmzPayments $amz_payments, $service, $order_ref, $amount, $currency_code = 'EUR', $timeout = 1440, $comment = '')
 {
     if ($currency_code == '0') {
         $currency_code = 'EUR';
     }
     $authorize_request = new OffAmazonPaymentsService_Model_AuthorizeRequest();
     $authorize_request->setAmazonOrderReferenceId($order_ref);
     $authorize_request->setSellerId($amz_payments->merchant_id);
     $authorize_request->setTransactionTimeout($timeout);
     $authorize_request->setSoftDescriptor($comment);
     if ($amz_payments->capture_mode == 'after_auth') {
         $authorize_request->setCaptureNow(true);
     }
     if ($amz_payments->provocation == 'hard_decline' && $amz_payments->environment == 'SANDBOX') {
         $authorize_request->setSellerAuthorizationNote('{"SandboxSimulation": {"State":"Declined", "ReasonCode":"AmazonRejected"}}');
     }
     if ($amz_payments->provocation == 'soft_decline' && $amz_payments->environment == 'SANDBOX') {
         Context::getContext()->cookie->setHadErrorNowWallet = 1;
         $authorize_request->setSellerAuthorizationNote('{"SandboxSimulation": {"State":"Declined", "ReasonCode":"InvalidPaymentMethod", "PaymentMethodUpdateTimeInMins":2}}');
     }
     $authorize_request->setAuthorizationReferenceId(self::getNextAuthRef($order_ref));
     $authorize_request->setAuthorizationAmount(new OffAmazonPaymentsService_Model_Price());
     $authorize_request->getAuthorizationAmount()->setAmount($amount);
     $authorize_request->getAuthorizationAmount()->setCurrencyCode($currency_code);
     try {
         $response = $service->authorize($authorize_request);
         $details = $response->getAuthorizeResult()->getAuthorizationDetails();
         $sql_arr = array('amz_tx_order_reference' => pSQL($order_ref), 'amz_tx_type' => 'auth', 'amz_tx_time' => pSQL(time()), 'amz_tx_expiration' => pSQL(strtotime($details->getExpirationTimestamp())), 'amz_tx_amount' => pSQL($amount), 'amz_tx_status' => pSQL($details->getAuthorizationStatus()->getState()), 'amz_tx_reference' => pSQL($details->getAuthorizationReferenceId()), 'amz_tx_amz_id' => pSQL($details->getAmazonAuthorizationId()), 'amz_tx_last_change' => pSQL(time()), 'amz_tx_last_update' => pSQL(time()));
         Db::getInstance()->insert('amz_transactions', $sql_arr);
     } catch (OffAmazonPaymentsService_Exception $e) {
         echo 'ERROR: ' . $e->getMessage();
     }
     return $response;
 }