Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
यदि आप इस सीरीज के साथ साथ चल रहे हैं, तो आपको उस बैक एंड में हमारे कस्टम पेमेंट मेथड के लिए हमारे द्वारा निर्धारित फाइल स्ट्रक्चर के टाइप से परिचित होना चाहिए। यदि आप इस सीरीज के पहले के हिस्सों से नहीं गुजरे हैं, तो मैं दृढ़ता से सलाह देता हूं कि आप इस के साथ आगे बढ़ने से पहले उनको पढ़ लें।
हम फ्रंट एंड सेक्शन के लिए भी इसी तरह के फाइल सेटअप का उपयोग करेंगे।
कंट्रोलर सेटअप
आगे बढ़ो और catalog/controller/payment/custom.php
पर कंट्रोलर फाइल बनाएं। नई बनाई गई कंट्रोलर फाइल custom.php
में निम्न कंटेंट को पेस्ट करें।
<?php class ControllerPaymentCustom extends Controller { protected function index() { $this->language->load('payment/custom'); $this->data['button_confirm'] = $this->language->get('button_confirm'); $this->data['action'] = 'https://yourpaymentgatewayurl'; $this->load->model('checkout/order'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); if ($order_info) { $this->data['text_config_one'] = trim($this->config->get('text_config_one')); $this->data['text_config_two'] = trim($this->config->get('text_config_two')); $this->data['orderid'] = date('His') . $this->session->data['order_id']; $this->data['callbackurl'] = $this->url->link('payment/custom/callback'); $this->data['orderdate'] = date('YmdHis'); $this->data['currency'] = $order_info['currency_code']; $this->data['orderamount'] = $this->currency->format($order_info['total'], $this->data['currency'] , false, false); $this->data['billemail'] = $order_info['email']; $this->data['billphone'] = html_entity_decode($order_info['telephone'], ENT_QUOTES, 'UTF-8'); $this->data['billaddress'] = html_entity_decode($order_info['payment_address_1'], ENT_QUOTES, 'UTF-8'); $this->data['billcountry'] = html_entity_decode($order_info['payment_iso_code_2'], ENT_QUOTES, 'UTF-8'); $this->data['billprovince'] = html_entity_decode($order_info['payment_zone'], ENT_QUOTES, 'UTF-8');; $this->data['billcity'] = html_entity_decode($order_info['payment_city'], ENT_QUOTES, 'UTF-8'); $this->data['billpost'] = html_entity_decode($order_info['payment_postcode'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryname'] = html_entity_decode($order_info['shipping_firstname'] . $order_info['shipping_lastname'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryaddress'] = html_entity_decode($order_info['shipping_address_1'], ENT_QUOTES, 'UTF-8'); $this->data['deliverycity'] = html_entity_decode($order_info['shipping_city'], ENT_QUOTES, 'UTF-8'); $this->data['deliverycountry'] = html_entity_decode($order_info['shipping_iso_code_2'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryprovince'] = html_entity_decode($order_info['shipping_zone'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryemail'] = $order_info['email']; $this->data['deliveryphone'] = html_entity_decode($order_info['telephone'], ENT_QUOTES, 'UTF-8'); $this->data['deliverypost'] = html_entity_decode($order_info['shipping_postcode'], ENT_QUOTES, 'UTF-8'); if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/custom.tpl')){ $this->template = $this->config->get('config_template') . '/template/payment/custom.tpl'; } else { $this->template = 'default/template/payment/custom.tpl'; } $this->render(); } } public function callback() { if (isset($this->request->post['orderid'])) { $order_id = trim(substr(($this->request->post['orderid']), 6)); } else { die('Illegal Access'); } $this->load->model('checkout/order'); $order_info = $this->model_checkout_order->getOrder($order_id); if ($order_info) { $data = array_merge($this->request->post,$this->request->get); //payment was made successfully if ($data['status'] == 'Y' || $data['status'] == 'y') { // update the order status accordingly } } } } ?>
जैसे कि आप देख सकते हैं, दो अलग अलग मेथड है। index
मैथर्ड थर्ड पार्टी पेमेंट गेटवे को फॉर्म सबमिट करने पर डेटा सेट करने के लिए जिम्मेदार होगा, और पेमेंट गेटवे से रिस्पांस डाटा को हैंडल करने के लिए callback
मेथड का इस्तेमाल किया जाता है। लेकिन, आप और भी मेथड्स को डिफाइन कर सकते हैं यदि यह आपके पेमेंट गेटवे द्वारा रिक्वायर्ड हो। इस उदाहरण में हमने फ्लो को जितना हो सके उतना सरल रखा है।
आइए हर सेक्शन के बारे में विस्तार से जाने। हम index
मेथड से शुरू करेंगे।
सबसे पहले, हमने लैंग्वेज फाइल लोड की है और Confirm बटन की वैल्यू सेट की है। हमने action
अटरीब्यूट भी सेटअप किया है, जिसका उपयोग पेमेंट सबमिशन फॉर्म द्वारा किया जाएगा। आपको अपने पेमेंट गेटवे के अनुसार इसे बदलना चाहिए।
$this->language->load('payment/custom'); $this->data['button_confirm'] = $this->language->get('button_confirm'); $this->data['action'] = 'https://yourpaymentgatewayurl';
इसके बाद, हमने यूजर के एक्टिव सेक्शन से आर्डर की इनफार्मेशन लोड की है।
$this->load->model('checkout/order'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
यदि ऑर्डर इंफॉर्मेशन उपलब्ध है, तो हम आगे बढ़ेंगे और छुपे हुए वैरियेबल्स के लिए डाटा सेट करेंगे जिसका उपयोग पेमेंट गेटवे URL को फॉर्म सबमिट करने के लिए किया जाएगा। यदि आप कोड का अनुसरण करते हैं, तो आप देखेंगे कि हमने अपने कस्टम पैरामीटर, text_config_one
और text_config_two
का भी उपयोग किया है, जिसे हमने इस सीरीज के पिछले भाग में एडमिन कंफीग्रेशन फॉर्म में सेट किया था।
यहां ध्यान देने योग्य अन्य महत्वपूर्ण वेरिएबल callbackurl
है, जो पेमेंट प्रोसेस के बाद यूजर को वापस हमारे स्टोर पर रीडायरेक्ट करने के लिए पेमेंट गेटवे द्वारा उपयोग किया जाने वाला URL रखता है। और हां, URL payment/custom/callback
को देखते हुए इंडिकेट करना चाहिए कि यह callback
मैथर्ड को कॉल करेगा, जैसा कि हम एक क्षण में देखेंगे।
$this->data['text_config_one'] = trim($this->config->get('text_config_one')); $this->data['text_config_two'] = trim($this->config->get('text_config_two')); $this->data['orderid'] = date('His') . $this->session->data['order_id']; $this->data['callbackurl'] = $this->url->link('payment/custom/callback'); $this->data['orderdate'] = date('YmdHis'); $this->data['currency'] = $order_info['currency_code']; $this->data['orderamount'] = $this->currency->format($order_info['total'], $this->data['currency'] , false, false); $this->data['billemail'] = $order_info['email']; $this->data['billphone'] = html_entity_decode($order_info['telephone'], ENT_QUOTES, 'UTF-8'); $this->data['billaddress'] = html_entity_decode($order_info['payment_address_1'], ENT_QUOTES, 'UTF-8'); $this->data['billcountry'] = html_entity_decode($order_info['payment_iso_code_2'], ENT_QUOTES, 'UTF-8'); $this->data['billprovince'] = html_entity_decode($order_info['payment_zone'], ENT_QUOTES, 'UTF-8');; $this->data['billcity'] = html_entity_decode($order_info['payment_city'], ENT_QUOTES, 'UTF-8'); $this->data['billpost'] = html_entity_decode($order_info['payment_postcode'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryname'] = html_entity_decode($order_info['shipping_firstname'] . $order_info['shipping_lastname'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryaddress'] = html_entity_decode($order_info['shipping_address_1'], ENT_QUOTES, 'UTF-8'); $this->data['deliverycity'] = html_entity_decode($order_info['shipping_city'], ENT_QUOTES, 'UTF-8'); $this->data['deliverycountry'] = html_entity_decode($order_info['shipping_iso_code_2'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryprovince'] = html_entity_decode($order_info['shipping_zone'], ENT_QUOTES, 'UTF-8'); $this->data['deliveryemail'] = $order_info['email']; $this->data['deliveryphone'] = html_entity_decode($order_info['telephone'], ENT_QUOTES, 'UTF-8'); $this->data['deliverypost'] = html_entity_decode($order_info['shipping_postcode'], ENT_QUOTES, 'UTF-8');
अंत में, हम अपने कस्टम टेंप्लेट फाइल custom.tpl
असाइन करते हैं और व्यू को रेंडर करते हैं।
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/custom.tpl')){ $this->template = $this->config->get('config_template') . '/template/payment/custom.tpl'; } else { $this->template = 'default/template/payment/custom.tpl'; } $this->render();
चलो callback
मेथड के कोड की समीक्षा करें। जब यूजर पेमेंट गेटवे साइट से स्टोर पर वापस आएगा तो यह मेथड कॉल किया जाएगा।
सबसे पहले, हम जांच करते हैं कि आगे बढ़ने से पहले orderid
वेरिएबल उपलब्ध है या नहीं। यदि यह उपलब्ध नहीं है, तो हम आगे के प्रोसेस को रोक देते हैं।
if (isset($this->request->post['orderid'])) { $order_id = trim(substr(($this->request->post['orderid']), 6)); } else { die('Illegal Access'); }
इसके बाद, हम डेटाबेस से ऑर्डर इंफॉर्मेशन लोड करते हैं। और अंत में, हम जानेंगे कि क्या हमें पेमेंट गेटवे रिस्पांस से success
इंडिकेटर मिला है। यदि ऐसा है, तो हम आगे बढ़ेंगे और ऑर्डर स्टेटस इनफार्मेशन को तदनुसार अपडेट करेंगे।
$this->load->model('checkout/order'); $order_info = $this->model_checkout_order->getOrder($order_id); if ($order_info) { $data = array_merge($this->request->post,$this->request->get); //payment was made succ if ($data['status'] == 'Y' || $data['status'] == 'y') { // update the order status accordingly } }
यह कंट्रोलर सेटअप है। एकदम सीधा, है ना?
कन्वेंशनल मॉडल
जैसा कि शायद आप जानते हैं, OpenCart के पास टो के आंतरिक कामकाज से निपटने के लिए कन्वेंशंस और स्टैंडर्ड का अपना सेट है। पेमेंट मेथड का पता लगाने के लिए मॉडल सेट अप के साथ ऐसा ही है। आप बस इसे कन्वेंशंस के अनुसार सेट करते हैं, और इसे ऑटोमेटिक रूप से उठाया जाएगा।
आगे बढ़ो और catalog/model/payment/custom.php
पर मॉडल फाइल बनाओ। नई बनाई गई मॉडल फाइल custom.php
में निम्नलिखित कंटेंट्स को पेस्ट करें।
<?php class ModelPaymentCustom extends Model { public function getMethod($address, $total) { $this->load->language('payment/custom'); $method_data = array( 'code' => 'custom', 'title' => $this->language->get('text_title'), 'sort_order' => $this->config->get('custom_sort_order') ); return $method_data; } }
चेकआउट प्रोसेस के दौरान एक्टिव पेमेंट मैथर्ड को सूचीबद्ध करते समय OpenCart द्वारा इस क्लास का उपयोग किया जाएगा। इस प्रोसेस के दौरान, OpenCart बैकऐंड से एक्टिव पेमेंट मेथड की सूची एकत्र करता है, और प्रत्येक मेथड के लिए यह जांच करेगा की उपयुक्त मॉडल क्लास उपलब्ध है या नहीं। पेमेंट मेथड केवल तभी सूचीबद्ध होगा जब कोई संबंधित मॉडल क्लास उपलब्ध हो।
इस सेटअप में महत्वपूर्ण बात code
वेरिएबल की वैल्यू है। हमारे मामले में, हमने custom
में इसे डिफाइन किया है, जिसका अर्थ है कि जब आप पेमेंट मैथर्ड को सिलेक्ट करते हैं और Continue दबाते हैं, तो यह payment/custom
URL को आंतरिक रुप से कॉल करेगा, जो अंततः हमारे पेमेंट गेटवे के लिए फॉर्म सेट करता है।
संक्षेप में, हम कह सकते हैं कि फ्रंटेंड में पेमेंट मैथर्ड का पता लगाने और उचित कार्य के लिए यह एक अनिवार्य फाइल है।
लैंग्वेज और टेंप्लेट फाइल्स
अब, हमें केवल लैंग्वेज बनाने और फाइलों को देखने की आवश्यकता है। आगे बढ़ो और catalog/language/english/payment/custom.php
पर लैंग्वेज फाइल बनाएं। निम्नलिखित कंटेंट को नई बनाई गई लैंग्वेज फाइल custom.php
में पेस्ट करें।
<?php $_['text_title'] = 'Custom Payment Method'; $_['button_confirm'] = 'Confirm Order'; ?>
समझने में आसान: हमने अभी-अभी उन लेबलो को सेट अप किया है जिनका उपयोग चेक-आउट के दौरान फ्रंट एंड में किया जाएगा।
आगे बढ़े और कैटलॉग फाइल को catalog/view/theme/default/template/payment/custom.tpl
पर बनाएं। नई बनाई गई टेंप्लेट फाइल custom.tpl
में निम्नलिखित कंटेंट्स को पेस्ट करें।
<form action="<?php echo $action; ?>" method="post"> <input type="hidden" name="text_config_one" value="<?php echo $text_config_one; ?>" /> <input type="hidden" name="text_config_two" value="<?php echo $text_config_two; ?>" /> <input type="hidden" name="orderid" value="<?php echo $orderid; ?>" /> <input type="hidden" name="callbackurl" value="<?php echo $callbackurl; ?>" /> <input type="hidden" name="orderdate" value="<?php echo $orderdate; ?>" /> <input type="hidden" name="currency" value="<?php echo $currency; ?>" /> <input type="hidden" name="orderamount" value="<?php echo $orderamount; ?>" /> <input type="hidden" name="billemail" value="<?php echo $billemail; ?>" /> <input type="hidden" name="billphone" value="<?php echo $billphone; ?>" /> <input type="hidden" name="billaddress" value="<?php echo $billaddress; ?>" /> <input type="hidden" name="billcountry" value="<?php echo $billcountry; ?>" /> <input type="hidden" name="billprovince" value="<?php echo $billprovince; ?>" /> <input type="hidden" name="billcity" value="<?php echo $billcity; ?>" /> <input type="hidden" name="billpost" value="<?php echo $billpost; ?>" /> <input type="hidden" name="deliveryname" value="<?php echo $deliveryname; ?>" /> <input type="hidden" name="deliveryaddress" value="<?php echo $deliveryaddress; ?>" /> <input type="hidden" name="deliverycity" value="<?php echo $deliverycity; ?>" /> <input type="hidden" name="deliverycountry" value="<?php echo $deliverycountry; ?>" /> <input type="hidden" name="deliveryprovince" value="<?php echo $deliveryprovince; ?>" /> <input type="hidden" name="deliveryemail" value="<?php echo $deliveryemail; ?>" /> <input type="hidden" name="deliveryphone" value="<?php echo $deliveryphone; ?>" /> <input type="hidden" name="deliverypost" value="<?php echo $deliverypost; ?>" /> <div class="buttons"> <div class="right"> <input type="submit" value="<?php echo $button_confirm; ?>" class="button" /> </div> </div> </form>
जैसा कि आपने शायद अनुमान लगाया होगा, यह वह फॉर्म है जो तब सबमिट किया जाएगा जब कोई यूजर Confirm Order बटन पर क्लिक करता है। हमने अभी छुपे हुए वेयर ओ उनकी वैल्यू सेटअप की है जो पहले कंट्रोलर के index
मेथड में परिभाषित किए गए थे।
आइए देखें कि फ्रंट एंड पर चीजें कैसी दिखती हैं:

आइए जल्दी से ओवरऑल फ्लो से गुजरे:
- सबसे पहले, आपको अपने पेमेंट मैथर्ड के लिए मॉडल फाइल सेट करनी होगी ताकि इसे Step 5: Payment Method टैब में सूचीबद्ध किया जा सके।
- इसके बाद, जब कोई यूजर पांचवे टैब में Custom Payment Method को सेलेक्ट करता है और Continue बटन पर क्लिक करता है, तो OpenCart आंतरिक रुप से
payment/custom
URL को कॉल करता है, जो अंततःindex
मेथड को कॉल करता है औरcustom.tpl
फाइल को छठे टैब में रेंडर करता है.
- अंत में, जब कोई यूजर Confirm Order बटन पर क्लिक करता है, तो फॉर्म सबमिट हो जाएगा और यूजर को पेमेंट गेटवे साइट पर ले जाया जाएगा जहां पेमेंट प्रोसेस शुरू होता है। पेमेंट प्रोसेस पूरा हो जाने के बाद,
callbackurl
छिपे हुए वैरियेबल की बदौलत यूजर को हमारी साइट पर वापस भेज देगा। बेशक, ऑर्डर स्टेटसcallback
मेथड के एक भाग के रूप में अपडेट किया जाएगा यदि चीजें अपेक्षित रूप से ऑपरेट होती हैं।
निष्कर्ष
इस सीरीज में, मैंने समझाया है कि कैसे अपने स्वयं के पेमेंट मैथर्ड मॉड्यूल बनाकर लगभग किसी भी पेमेंट मैथर्ड को सेट किया जाए। मुझे आशा है कि आपने इस सीरीज का आनंद लिया है और कुछ उपयोगी सीखा है।
यह हमेशा किसी भी फ्रेमवर्क के लिए कस्टम चीजें बनाने में मजेदार है, है ना? याद रखें कि आप नीचे कमेंट फॉर्म का उपयोग करके हमेशा कमेंट और प्रश्न प्रदान कर सकते हैं।
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post