/**
  * Save Stripe token as transaction reference
  * @param OrderModel $order
  */
 public function saveStripeToken(OrderModel $order)
 {
     $order->setTransactionRef($this->request->getSession()->get('stripeToken'))->save();
 }
示例#2
0
 /**
  * Payment gateway invocation
  *
  * @param  Order $order processed order
  * @return Response the HTTP response
  */
 protected function doPay(Order $order)
 {
     if ('TEST' == Paybox::getConfigValue('mode', false)) {
         $platformUrl = Paybox::getConfigValue('url_serveur_test', false);
     } else {
         $platformUrl = Paybox::getConfigValue('url_serveur', false);
     }
     // Be sure to have a valid platform URL, otherwise give up
     if (false === $platformUrl) {
         throw new \InvalidArgumentException(Translator::getInstance()->trans("The platform URL is not defined, please check Paybox module configuration.", [], Paybox::MODULE_DOMAIN));
     }
     $hashAlgo = $this->getHashAlgorithm();
     $clefPrivee = Paybox::getConfigValue('clef_privee');
     // Generate a transaction ID
     $transactionId = sprintf("%010d", $order->getId());
     $order->setTransactionRef($transactionId)->save();
     $paybox_params = ['PBX_SITE' => Paybox::getConfigValue('numero_site'), 'PBX_RANG' => Paybox::getConfigValue('rang_site'), 'PBX_IDENTIFIANT' => Paybox::getConfigValue('identifiant_interne'), 'PBX_RETOUR' => self::PARAMETRES_RETOUR, 'PBX_HASH' => $hashAlgo, 'PBX_SECRET' => $clefPrivee, 'PBX_ANNULE' => Paybox::getConfigValue('url_retour_abandon'), 'PBX_EFFECTUE' => Paybox::getConfigValue('url_retour_succes'), 'PBX_REFUSE' => Paybox::getConfigValue('url_retour_refus'), 'PBX_REPONDRE_A' => Paybox::getConfigValue('url_ipn'), 'PBX_TOTAL' => round(100 * $order->getTotalAmount()), 'PBX_DEVISE' => $this->getCurrencyIso4217NumericCode($order->getCurrency()->getCode()), 'PBX_CMD' => $transactionId, 'PBX_PORTEUR' => $order->getCustomer()->getEmail(), 'PBX_TIME' => date("c"), 'PBX_RUF1' => 'POST'];
     // Generate signature
     $param = '';
     foreach ($paybox_params as $key => $value) {
         $param .= "&" . $key . '=' . $value;
     }
     $param = ltrim($param, '&');
     $binkey = pack('H*', $clefPrivee);
     $paybox_params['PBX_HMAC'] = strtoupper(hash_hmac($hashAlgo, $param, $binkey));
     return $this->generateGatewayFormResponse($order, $platformUrl, $paybox_params);
 }
示例#3
0
 /**
  * Create the form parameter list for the given order
  *
  * @param Order $order
  * @param string $payment_config single or multiple payment - see vads_payment_config parameter description
  *
  * @throws \InvalidArgumentException if an unsupported currency is used in order
  * @return array the payzen form parameters
  */
 protected function getPayzenParameters(Order $order, $payment_config)
 {
     $payzenApi = new PayzenMultiApi();
     // Total order amount
     $amount = $order->getTotalAmount();
     /** @var  PayzenCurrency $currency */
     // Currency conversion to numeric ISO 1427 code
     if (null === ($currency = $payzenApi->findCurrencyByAlphaCode($order->getCurrency()->getCode()))) {
         throw new \InvalidArgumentException(Translator::getInstance()->trans("Unsupported order currency: '%code'", array('%code' => $order->getCurrency()->getCode()), Payzen::MODULE_DOMAIN));
     }
     $customer = $order->getCustomer();
     // Get customer lang code and locale
     if (null !== ($langObj = LangQuery::create()->findPk($customer->getLang()))) {
         $customer_lang = $langObj->getCode();
         $locale = $langObj->getLocale();
     } else {
         $customer_lang = PayzenConfigQuery::read('default_language');
         $locale = LangQuery::create()->findOneByByDefault(true)->getLocale();
     }
     $address = $customer->getDefaultAddress();
     // Customer phone (first non empty)
     $phone = $address->getPhone();
     if (empty($phone)) {
         $phone = $address->getCellphone();
     }
     // Transaction ID
     $transaction_id = $this->getTransactionId();
     $order->setTransactionRef($transaction_id)->save();
     $payzen_params = array('vads_version' => 'V2', 'vads_contrib' => 'Thelia version ' . ConfigQuery::read('thelia_version'), 'vads_action_mode' => 'INTERACTIVE', 'vads_payment_config' => $this->getPaymentConfigValue($payment_config, $amount, $currency), 'vads_page_action' => 'PAYMENT', 'vads_return_mode' => 'POST', 'vads_shop_name' => ConfigQuery::read("store_name", ''), 'vads_url_success' => $this->getPaymentSuccessPageUrl($order->getId()), 'vads_url_refused' => $this->getPaymentFailurePageUrl($order->getId(), Translator::getInstance()->trans("Your payement has been refused"), [], Payzen::MODULE_DOMAIN), 'vads_url_referral' => $this->getPaymentFailurePageUrl($order->getId(), Translator::getInstance()->trans("Authorization request was rejected"), [], Payzen::MODULE_DOMAIN), 'vads_url_cancel' => $this->getPaymentFailurePageUrl($order->getId(), Translator::getInstance()->trans("You canceled the payement"), [], Payzen::MODULE_DOMAIN), 'vads_url_error' => $this->getPaymentFailurePageUrl($order->getId(), Translator::getInstance()->trans("An internal error occured"), [], Payzen::MODULE_DOMAIN), 'vads_site_id' => PayzenConfigQuery::read('site_id'), 'vads_key_test' => PayzenConfigQuery::read('test_certificate'), 'vads_key_prod' => PayzenConfigQuery::read('production_certificate'), 'vads_ctx_mode' => PayzenConfigQuery::read('mode'), 'vads_platform_url' => PayzenConfigQuery::read('platform_url'), 'vads_default_language' => PayzenConfigQuery::read('default_language'), 'vads_available_languages' => PayzenConfigQuery::read('available_languages'), 'vads_capture_delay' => PayzenConfigQuery::read('banking_delay'), 'vads_validation_mode' => PayzenConfigQuery::read('validation_mode'), 'vads_payment_cards' => PayzenConfigQuery::read('allowed_cards'), 'vads_redirect_enabled' => PayzenConfigQuery::read('redirect_enabled'), 'vads_redirect_success_timeout' => PayzenConfigQuery::read('success_timeout'), 'vads_redirect_success_message' => PayzenConfigQuery::read('success_message'), 'vads_redirect_error_timeout' => PayzenConfigQuery::read('failure_timeout'), 'vads_redirect_error_message' => PayzenConfigQuery::read('failure_message'), 'vads_language' => $customer_lang, 'vads_order_id' => $order->getId(), 'vads_currency' => $currency->num, 'vads_amount' => $currency->convertAmountToInteger($amount), 'vads_trans_id' => $transaction_id, 'vads_trans_date' => gmdate("YmdHis"), 'vads_threeds_mpi' => $amount >= PayzenConfigQuery::read('three_ds_minimum_order_amount', 0) ? 2 : 0, 'vads_cust_email' => $customer->getEmail(), 'vads_cust_id' => $customer->getId(), 'vads_cust_title' => $customer->getCustomerTitle()->setLocale($locale)->getLong(), 'vads_cust_last_name' => $customer->getLastname(), 'vads_cust_first_name' => $customer->getFirstname(), 'vads_cust_address' => trim($address->getAddress1() . ' ' . $address->getAddress2() . ' ' . $address->getAddress3()), 'vads_cust_city' => $address->getCity(), 'vads_cust_zip' => $address->getZipcode(), 'vads_cust_country' => CountryQuery::create()->findPk($address->getCountryId())->getIsoalpha2(), 'vads_cust_phone' => $phone);
     foreach ($payzen_params as $payzen_parameter_name => $value) {
         $payzenApi->set($payzen_parameter_name, $value);
     }
     return $payzenApi->getRequestFields();
 }
示例#4
0
文件: Atos.php 项目: bibich/Atos
 /**
  *
  *  Method used by payment gateway.
  *
  *  If this method return a \Thelia\Core\HttpFoundation\Response instance, this response is send to the
  *  browser.
  *
  *  In many cases, it's necessary to send a form to the payment gateway.
  *  On your response you can return this form already completed, ready to be sent
  *
  * @param  \Thelia\Model\Order                       $order processed order
  * @return null|\Thelia\Core\HttpFoundation\Response
  */
 public function pay(Order $order)
 {
     $pathBin = self::getBinDirectory() . 'request';
     $atosCurrency = AtosCurrencyQuery::create()->findPk($order->getCurrency()->getCode());
     if (null == $atosCurrency) {
         throw new \InvalidArgumentException(sprintf("Atos does not supprot this currency : %s", $order->getCurrency()->getCode()));
     }
     $amount = $order->getTotalAmount();
     $amount = number_format($amount, $atosCurrency->getDecimals(), '', '');
     $transactionId = $this->generateTransactionID();
     $order->setTransactionRef($transactionId)->save();
     $router = $this->getContainer()->get('router.atos');
     $this->addParam('pathfile', self::getPathfilePath())->addParam('merchant_id', self::getConfigValue('atos_merchantId'))->addParam('customer_email', $order->getCustomer()->getEmail())->addParam('currency_code', $atosCurrency->getAtosCode())->addParam('amount', $amount)->addParam('language', $order->getLang()->getCode())->addParam('transaction_id', $transactionId)->addParam('order_id', $order->getId())->addParam('automatic_response_url', URL::getInstance()->absoluteUrl($router->generate('atos.payment.confirmation')))->addParam('cancel_return_url', $this->getPaymentFailurePageUrl($order->getId(), Translator::getInstance()->trans('you cancel the payment', [], Atos::MODULE_DOMAIN)))->addParam('normal_return_url', $this->getPaymentSuccessPageUrl($order->getId()));
     $encrypt = exec(sprintf("%s %s", $pathBin, $this->getParameters()));
     if (!empty($encrypt)) {
         $datas = explode('!', $encrypt);
         if ($datas[1] == '' && $datas[2] == '') {
             throw new \RuntimeException(Translator::getInstance()->trans('Request binary not found in "%path"', ['%path' => $pathBin]));
         } elseif ($datas[1] != 0) {
             throw new \RuntimeException($datas[2]);
         } else {
             $parser = $this->getContainer()->get('thelia.parser');
             $parser->setTemplateDefinition($parser->getTemplateHelper()->getActiveFrontTemplate());
             $content = $parser->renderString(file_get_contents(__DIR__ . DS . 'templates' . DS . 'atos' . DS . 'payment.html'), ['site_name' => self::getConfigValue('store_name'), 'form' => $datas[3]]);
             return Response::create($content);
         }
     } else {
         throw new \RuntimeException(Translator::getInstance()->trans('Empty response recevied from Atos binary "%path". Please check path and permissions.', ['%path' => $pathBin], self::MODULE_DOMAIN));
         // FIXME : show something to the customer
     }
 }