lorus 0 ارسال شده در بهمن 96 (ویرایش شده) با سلام و عرض ادب و احترام خدمت دوستان و اساتید محترم قالب سایت من از شرکت یوم تم هستش و صفحه اول و پیش خوانش را با صفحه ساز یوم تم پیاده کردم. فروشگاه سایت با جی تو استور پیکر بندی شده و برای پرداخت از پلاگین :قوامین سایان کارت و بانکی ملی سداد استفاده می بره تا 96/10/29 هیچ مشکلی با پرداخت قوامین نداشتم ولی به یکباره از کار افتاد و صفحه زیر به نمایش در میاد و به درگاه وصل نمیشه البته اولش هم مشکل داشت و تو ارجاع بعد پرداخت صفحه سفید میاد گزارش دادم و خودشون رفع اش کردن ولی الان می گن ایراد از سایت هستش!؟ پلاگین بانک ملی رو بعد از مشکل درگاه قوامین نصب کردم اون مشکلی تو وصل شدن به درگاه نداره و همه چیز جز یک مورد اوکی هستش اون هم ارجاع بعد از پرداخت موفق به صفحه تشکر جی تو استور هستش اگر منو پیش فرض روی محتوا و صفحه ی که با صفحه ساز قالب ساخته شده تنظیم کنم پرداخت انجام نمیشه و کد های لازم از طرف بانک ارسال نمیشه و به صفحه اول ارجاع میشه ولی اگر منوی پیش فرض روی محتوا جوملا تنظیم بشه و منو غیر منوی پیش فرض باشه به صفحه تشکر جی تو استور ارجاع داده میشه و کدهای رهگیری و غیر صادر و مشکلی تو پرداخت پیش نمیاد. می خواستم کسی میتونه راه حلی پیشنهاد بده و این مشکلات حل بشه. با تشکر فراون از راهنمایی های شما عزیزان محترم ویرایش شده بهمن 96 توسط lorus نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
lorus 0 ارسال شده در بهمن 96 با سلام و عرض ادب تو مستندات جی تو استور نوشته میشود بعد از پرداخت موفق بجای ارجاع به صفحه تشکر یک مطلب خاص به نمایش در بیاد طبق این مستند این تغییر کجا باید اضافه بشه و چطور . مستند جی تو استور: نقل قول function _postPayment( $data ) { // Process the payment $app = JFactory::getApplication(); $paction = $app ->input->getString('paction'); $vars = new JObject(); switch ($paction) { case "display": $vars->message = 'Thank you for the order.'; $html = $this->_getLayout('message', $vars); //get the thank you message from the article (ID) provided in the plugin params $html .= $this->_displayArticle(); break; case "callback": //Its a call back. You can update the order based on the response from the payment gateway $vars->message = 'Some message to the gateway' $html = $this->_getLayout('message', $vars); echo $html; $app->close(); break; case "cancel": //cancel is called. $vars->message = 'Sorry, you have cancelled the order' $html = $this->_getLayout('message', $vars); break; default: $vars->message = 'Seems an unknow request.' $html = $this->_getLayout('message', $vars); break; } return $html; } و برای پلاگین بانک ملی: نقل قول <?php /** * Created by PhpStorm. * User: mohsen * Date: 5/8/16 * Time: 2:33 PM */ defined('_JEXEC') or die('Restricted access'); require_once(JPATH_ADMINISTRATOR . '/components/com_j2store/library/plugins/payment.php'); require_once(JPATH_ADMINISTRATOR . '/components/com_j2store/helpers/j2store.php'); class plgJ2StorePayment_melli extends J2StorePaymentPlugin { /** * @var $_element string Should always correspond with the plugin's filename, * forcing it to be unique */ var $_element = 'payment_melli'; private $merchantCode = '', $merchantId = '', $terminalId = '', $terminalKey = '', $callBackUrl = '', $redirectToMelli = ''; public function __construct(& $subject, $config) { parent::__construct($subject, $config); $this->loadLanguage('', JPATH_ADMINISTRATOR); $this->merchantCode = trim($this->params->get('merchant_id')); $this->merchantId = trim($this->params->get('merchant_id')); $this->terminalId = trim($this->params->get('terminal_id')); $this->terminalKey = trim($this->params->get('terminal_key')); $this->callBackUrl = JUri::root() . '/index.php?option=com_j2store&view=checkout&task=confirmPayment&orderpayment_type=payment_melli&paction=callback'; $this->redirectToMelli = 'https://www.melli.com/pg/StartPay/'; } public function _renderForm($data) { $vars = new JObject(); $vars->message = JText::_("J2STORE_MELLI_PAYMENT_MESSAGE"); $html = $this->_getLayout('form', $vars); return $html; } public function _prePayment($data) { $vars = new StdClass(); $vars->display_name = $this->params->get('display_name', ''); $vars->onbeforepayment_text = JText::_("J2STORE_MELLI_PAYMENT_PREPARATION_MESSAGE"); $amount = (int)$data['orderpayment_amount']; $redirect = $this->callBackUrl; $terminal_id = trim($this->params->get('terminal_id')); $merchant_id = trim($this->params->get('merchant_id')); $terminal_key = trim($this->params->get('terminal_key')); // todo: order_id need to be retrieved $order_id = rand(100000, 999999); $sign_data = $this->sadad_encrypt($terminal_id . ';' . $order_id . ';' . $amount, $terminal_key); $parameters = array( 'MerchantID' => $merchant_id, 'TerminalId' => $terminal_id, 'Amount' => $amount, 'OrderId' => $order_id, 'LocalDateTime' => date('Ymdhis'), 'ReturnUrl' => $redirect, 'SignData' => $sign_data, ); $error_flag = false; $error_msg = ''; $result = $this->sadad_call_api('https://sadad.shaparak.ir/VPG/api/v0/Request/PaymentRequest', $parameters); if ($result != false) { if ($result->ResCode == 0) { $vars->token = $result->Token; $vars->redirectToMelli = 'https://sadad.shaparak.ir/VPG/Purchase'; $html = $this->_getLayout('prepayment', $vars); return $html; } else { //bank returned an error $error_flag = true; $error_msg = JText::_("J2STORE_MELLI_PAYMENT_REDIRECT_ERROR") . $this->sadad_request_err_msg($result->ResCode); } } else { // couldn't connect to bank $error_flag = true; $error_msg = JText::_("J2STORE_MELLI_PAYMENT_CONNECTION_ERROR"); } if ($error_flag) { $vars->error = $error_msg; } $html = $this->_getLayout('prepayment', $vars); return $html; } public function _postPayment($data) { $vars = new JObject(); //get order id $orderId = $data['order_id']; // get instatnce of j2store table F0FTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $order = F0FTable::getInstance('Order', 'J2StoreTable')->getClone(); $order->load(array('order_id' => $orderId)); if ($order->load(array('order_id' => $orderId))) { $currency = J2Store::currency(); $currencyValues = $this->getCurrency($order); $orderPaymentAmount = $currency->format($order->order_total, $currencyValues['currency_code'], $currencyValues['currency_value'], false); $orderPaymentAmount = (int)$orderPaymentAmount; $order->add_history(JText::_('J2STORE_CALLBACK_RESPONSE_RECEIVED')); if ($orderId && isset($_POST['token']) && isset($_POST['OrderId']) && isset($_POST['ResCode'])) { $token = $_POST['token']; //verify payment $parameters = array( 'Token' => $token, 'SignData' => $this->sadad_encrypt($token, trim($this->params->get('terminal_key'))) ); $error_flag = false; $error_msg = ''; $result = $this->sadad_call_api('https://sadad.shaparak.ir/VPG/api/v0/Advice/Verify', $parameters); if ($result != false) { if ($result->ResCode == 0) { //successfully verified $order->payment_complete(); $order->empty_cart(); $message = JText::_("J2STORE_MELLI_PAYMENT_SUCCESS") . PHP_EOL; $message .= JText::_("J2STORE_MELLI_PAYMENT_REF") . $result->RetrivalRefNo; $vars->message = $message; $html = $this->_getLayout('postpayment', $vars); return $html; } else { //couldn't verify the payment due to a back error $error_flag = true; $error_msg = JText::_("J2STORE_MELLI_PAYMENT_PROCESS_ERROR") . $this->sadad_verify_err_msg($result->ResCode); } } else { //couldn't verify the payment due to a connection failure to bank $error_flag = true; $error_msg = JText::_("J2STORE_MELLI_PAYMENT_NO_VERVIFY_ERROR"); } $message = JText::_("J2STORE_MELLI_PAYMENT_FAILED") . PHP_EOL; $message .= JText::_("J2STORE_MELLI_PAYMENT_ERROR"); $message .= $error_msg . PHP_EOL; $message .= JText::_("J2STORE_MELLI_PAYMENT_CONTACT") . PHP_EOL; $vars->message = $message; $html = $this->_getLayout('postpayment', $vars); return $html; } } $vars->message = JText::_("J2STORE_MELLI_PAYMENT_PAGE_ERROR"); $html = $this->_getLayout('postpayment', $vars); return $html; } private function sadad_encrypt($data, $secret) { //Generate a key from a hash $key = base64_decode($secret); //Pad for PKCS7 $blockSize = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($data); $pad = $blockSize - ($len % $blockSize); $data .= str_repeat(chr($pad), $pad); //Encrypt data $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb'); return base64_encode($encData); } private function sadad_call_api($url, $data = false) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json; charset=utf-8')); curl_setopt($ch, CURLOPT_POST, 1); if ($data) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $result = curl_exec($ch); curl_close($ch); return !empty($result) ? json_decode($result) : false; } private function sadad_request_err_msg($err_code) { return JText::_("J2STORE_MELLI_PAYMENT_REQ_" . $err_code); } private function sadad_verify_err_msg($res_code) { return JText::_("J2STORE_MELLI_PAYMENT_VER_" . $res_code); } } با تشکر نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر