2011-03-20 15 views
66

मैं Magento के लिए एक नया भुगतान मॉड्यूल लागू करने पर काम कर रहा हूं और इस तर्क के पीछे मूल अवधारणा को समझना चाहता हूं। मुझे पता है कि मुझे Mage_Payment_Model_Method_Abstract या उसके किसी भी बच्चों के वर्गों से विस्तार करना है, लेकिन मेरी समस्या का उपयोग कब किया जाता है और मेरे मॉडल में कैप्चर और अधिकृत तरीकों का उपयोग कैसे किया जाता है। उदाहरण के लिए अगर मैं इस तरह चरणों में पूरी प्रक्रिया को विभाजित:
Magento भुगतान प्रवाह

  1. उपयोगकर्ता खरीदारी की टोकरी के लिए आता है और choses कहना कुछ भुगतान विधि है, प्रवेश द्वार है की सुविधा देता है।
  2. सिस्टम अनुरोध को स्वीकार करता है, सभी सबमिट किए गए डेटा एकत्र करता है और उपयोगकर्ता को गेटवे यूआरएल भेजता है।
  3. उपयोगकर्ता गेटवे साइट पर अपना ऑर्डर (या रद्द करता है) जो मेरे स्टोर में इसके बारे में जानकारी भेजता है।
  4. मेरा स्टोर प्राप्त डेटा के साथ क्रम में कुछ और संशोधन करता है और स्थिति को पूरा या रद्द कर देता है।

इन चरणों में मुझे प्राधिकरण और कैप्चर विधियों का उपयोग करना होगा? अगर कोई मुझे समझा सकता है कि कौन सा प्राधिकरण और कब्जा करने का मतलब है तो मैं सराहना करता हूं?

उत्तर

143

यहां जिस तरह से मैंने अवधारणाओं को हमेशा समझा है, और Magento में भुगतान मॉड्यूल को लागू करने के लिए आपको क्या जानने की आवश्यकता होगी। आपके विशिष्ट "जहां यह होता है" के उत्तर नीचे बोल्ड किए जाते हैं, हालांकि यह उतना आसान नहीं है जितना आप उम्मीद कर रहे हैं।

प्री-इंटरनेट, ईंट और मोर्टार क्रेडिट कार्ड लेनदेन दो चरण की प्रक्रिया थी।

बिक्री के समय, जब व्यापारी ने उपभोक्ता के क्रेडिट कार्ड को खरीद के लिए लिया, तो वे इसे बिक्री के एक बिंदु के माध्यम से स्लाइड करेंगे जो क्रेडिट कार्ड के केंद्रीय कार्यालय में कॉल करेगा और पूछेगा "क्या यह कार्ड अधिकृत है यह नेटवर्क, और यह विशेष उपभोक्ता की उपलब्ध क्रेडिट की लाइन है जो इस खरीद को अनुमति देने के लिए पर्याप्त है "।

यदि खरीद स्वीकार कर लिया गया था (अस्वीकार करने के विपरीत), चार्ज अधिकृत कहा गया था। उपभोक्ता अपना उत्पाद लेगा, और बिक्री प्रणाली/नकद रजिस्टर के बिंदु पर ध्यान दिया जाएगा कि लेनदेन अधिकृत था। फिर, दिन के अंत में, या सप्ताह के अंत में, किसी अन्य पूर्वनिर्धारित नियमित शेड्यूल पर, या जब मालिक ने पीने से रोकने का फैसला किया, तो व्यापारी अपने सभी अधिकृत रसीदों के बावजूद जायेंगे और अन्य अनुरोध पर केंद्रीय कार्यालयसे लेनदेन को अधिकृत करता है। धन को कैप्चर करना वह व्यापारी के खाते में पैसा डालता है।

यह अभी भी अधिकांश गेटवे द्वारा उपयोग में मॉडल है, और यह डोमेन मॉडल है कि Magento Inc. ने अपने भुगतान मॉड्यूल के लिए आवेदन करना चुना है।

जिस तरह से चीजें चलाना है, जब कोई उपभोक्ता अंतिम चेकआउट चरणों तक पहुंचता है Magento जैसे सिस्टम में, Magento गेटवे के एपीआई के लिए प्राधिकरण अनुरोध जारी करता है। यदि लेनदेन सफल होता है, तो आदेश प्रणाली में स्वीकार किया जाता है, और प्राधिकरण अनुरोध से एक अद्वितीय आईडी संग्रहीत की जाती है। इसके बाद, जब उपभोक्ता के सामान जहाज, एक स्टोर मालिक एक चालान बनाने के लिए Magento व्यवस्थापक का उपयोग करता है। इस चालान का निर्माण एक कैप्चर अनुरोध जारी करता है (प्रमाणीकरण अनुरोध से लौटाई गई एक स्टोर आईडी का उपयोग करके)। यह वह जगह है जहां ये विधि कॉल Magento में जारी की जाती हैं।

हालांकि, चीजें मुश्किल हो जाती हैं क्योंकि प्रत्येक भुगतान गेटवे इन अवधारणाओं को थोड़ा अलग तरीके से व्याख्या करता है, और प्रत्येक व्यापारी अपने "तब तक कैप्चर नहीं करता जब तक हम जिम्मेदार नहीं होते" जिम्मेदारियां अलग-अलग होती हैं। ऊपर वर्णित परिदृश्य के अतिरिक्त, भुगतान मॉड्यूल में एक सिस्टम कॉन्फ़िगरेशन मान होता है जिसे भुगतान कार्य के नाम से जाना जाता है। इसे पर सेट किया जा सकता है केवल प्राधिकृत करें, जो ऊपर वर्णित प्रवाह को लागू करेगा। इसे पर भी सेट किया जा सकता है प्राधिकृत करें और कैप्चर करें, जो ऑर्डर दिए जाने पर भुगतान को प्राधिकृत और कैप्चर करेगा। यह और भ्रमित हो जाता है क्योंकि यद्यपि विधि को प्राधिकृत और कैप्चर कहा जाता है, लेकिन Magento के वर्तमान संस्करण केवल इस मोड में सेट होने पर कैप्चर अनुरोध जारी करेंगे (कम से कम Authorize.net के लिए), और Authorize.net, आंतरिक रूप से, छोड़ देगा अधिकांश दिनों के लिए अधिकृत लेकिन कब्जे वाले राज्य में अनुरोधों को कैप्चर करें। Magento ऑर्डर और भुगतान कैसे प्रबंधित करता है और चालान कोडबेस का एक क्षेत्र है जो संस्करण से संस्करण में बहुत कुछ बदलता है।

तो, Magento भुगतान मॉड्यूल सिस्टम के पीछे विचार क्लस्टर एफ --- से प्रोग्रामिंग भुगतान है जो प्रोग्रामिंग भुगतान गेटवे तर्क है। आपके authorize विधि में आप अपने भुगतान गेटवे के अधिकृत API पर कॉल लागू करते हैं (या इस बिंदु पर जो भी चेक और तर्क आप करना चाहते हैं)। यह विधि एक भुगतान वस्तु और राशि पारित की जाती है। आप आप अनुरोध करते हैं/प्रदर्शन-your-तर्क और यह जो भी कारण के लिए अमान्य है निर्धारित करते हैं तो एक अपवाद के साथ

Mage::throwException('...'); 

यह बताता है Magento प्राधिकरण विफल रहा है, और यह उसके अनुसार कार्य करेंगे (एक त्रुटि संदेश दिखाने के लिए, आदि फेंक ।)। अन्यथा, आप भुगतान वस्तु पर डेटा सदस्यों सेट और एक

return $this; 

डेटा सदस्यों चीजें आप, बाद में की आवश्यकता होगी जब भुगतान पर कब्जा कर रहे हैं जारी करते हैं। जो हमें आपके भुगतान मॉड्यूल की capture विधि पर लाता है। इस विधि को एक भुगतान वस्तु और राशि भी भेजी जाती है। इस विधि में आप अपना कैप्चर अनुरोध जारी करते हैं। भुगतान वस्तु cc_trans_id डेटा सदस्य

$payment->getCcTransId() 

जो आप अपने प्रवेश द्वार के खिलाफ एक पर कब्जा जारी करने की अनुमति देगा होगा। यह उन डेटा सदस्यों में से एक है जिन्हें आप authorize में सहेजने के लिए ज़िम्मेदार हैं। दोबारा, यदि आपका कोड निर्धारित करता है कि कैप्चर विफल हो गया है, तो आप एक अपवाद फेंक देते हैं। अन्यथा, आप return $this

Authorize.net भुगतान मॉड्यूल में यह कैसे किया जाता है इसके अच्छे उदाहरण हैं।

app/code/core/Mage/Paygate/Model/Authorizenet.php 

उदाहरण के लिए, capture विधि

public function capture(Varien_Object $payment, $amount) 
{ 
    if ($payment->getCcTransId()) { 
     $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE); 
    } else { 
     $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE); 
    } 

    $payment->setAmount($amount); 
    $request= $this->_buildRequest($payment); 
    $result = $this->_postRequest($request); 
    //... 

यहाँ यदि भुगतान एक cc_trans_id है पर कब्जा विधि जाँच कर रहा है के इस हिस्से पर विचार करें।परिणाम के आधार पर, यह करने के लिए anet_trans_type सेट या तो:

self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE 
self::REQUEST_TYPE_AUTH_CAPTURE 

यह मान तो एपीआई अनुरोध वस्तु द्वारा प्रयोग किया जाता है या तो

  1. एक पूर्व अधिकृत लेनदेन
  2. कैप्चरिंग के लिए एक API कॉल भेजने के लिए तत्काल कैप्चर

आशा है कि मदद करता है, और शुभकामनाएँ!

+4

इस वाह उत्तर के लिए धन्यवाद, और यह इस तरह है, चीजें अब मेरे लिए बहुत स्पष्ट दिखती हैं। – zokibtmkd

+2

धन्यवाद एलन। यह बहुत समझाया। – naquiuddin

+2

इस स्पष्टीकरण के लिए आपको बहुत बहुत धन्यवाद :) – nnevala

संबंधित मुद्दे