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

तो आप एक दर्जन ऑपरेशन देख सकते हैं, लेकिन अगर हमें कार्ड का उपयोग करने के पूरे समय के लिए आंकड़े एकत्र करने की आवश्यकता है, तो यह मामला स्वचालित होना चाहिए। आइए सॉफ्टवेयर प्रसंस्करण के लिए सुविधाजनक रूप में डेटा प्राप्त करने का प्रयास करें।
UPD: जैसा कि स्मैशर ने उल्लेख किया है, आपका व्यक्तिगत खाता CSV या एक्सेल प्रारूप में सभी परिचालनों को अपलोड करने की क्षमता प्रदान करता है। तो स्पॉइलर के तहत मैंने यह कैसे किया, इसके बारे में नहीं जानते हुए इसका वर्णन किया।

कठिन रास्ते पर जा रहे हैंइसके लिए ब्राउज़र डेवलपमेंट टूल और विशेष रूप से नेटवर्क गतिविधि (Google Chrome में नेटवर्क टैब) के विश्लेषण की आवश्यकता होगी। यदि आप विश्लेषक को चालू करते हैं और फिर अपने व्यक्तिगत खाते को "सभी समय के लिए" संचालन प्रदर्शित करने के लिए कहते हैं, तो हम जल्दी से वांछित अनुरोध प्राप्त करेंगे।

आप देख सकते हैं कि सर्वर ने वास्तव में सभी समय के लिए डेटा दिया था, और आवश्यक MCC JSON प्रतिक्रिया में मौजूद हैं।

डेटा प्रोसेसिंग की सुविधा के लिए, पायथन में एक अनुरोध का अनुकरण करें। मैं एक ज्यूपिटर नोटबुक का उपयोग कर रहा हूं।

हम URL के लिए एक POST अनुरोध भेजेंगे https://api.tinkoff.ru/v1/grouped_requests समान सेशन और _methods मापदंडों और अनुरोध डेटा के साथ।
import requests session_id = "b785Q2R5US2AZo2p5JoCtNQNkbmYsJbl.ds-api02" methods = "operations"
यदि हमने सब कुछ ठीक किया है, तो कंसोल में response.text दर्ज करने पर प्रतिक्रिया बॉडी प्रदर्शित होगी। यह इस डेटा को पार्स करने और हमारे द्वारा आवश्यक अंशों को सहेजने के लिए रहता है।
import csv operations = [] payload = response.json()['payload'] for key in payload: feed = payload[key]['payload'] for operation in feed: mcc = operation['mcc']
आउटपुट में, हमें MCC कोड्स, खरीद लागत और स्टोर नामों की एक तालिका मिलती है।
Roketbank
रॉकेटबैंक रसीद पर एमसीसी लेनदेन दिखाता है। इसलिए, हमें सभी परिचालनों की प्राप्तियों के लिंक एकत्र करने की आवश्यकता है।

Rocketbank के साथ थोड़ा और अधिक जटिल है, क्योंकि आपके व्यक्तिगत खाते तक पहुंच केवल मोबाइल एप्लिकेशन के माध्यम से होती है। मैं केवल मेरे लिए काम किया है, और केवल Android के बारे में बताऊंगा। कंप्यूटर पर चार्ल्स विश्लेषक स्थापित करें और इसके माध्यम से फोन से ट्रैफ़िक पास करें।
ऐसा करने के लिए, फोन और कंप्यूटर को एक ही नेटवर्क से जुड़ा होना चाहिए। आपको स्थानीय नेटवर्क पर कंप्यूटर का आईपी पता लगाना होगा। उदाहरण के लिए, ifconfig का उपयोग करते हुए।
अगला, चार्ल्स प्रॉक्सी सर्वर के माध्यम से काम करने के लिए फोन को कॉन्फ़िगर करें। एंड्रॉइड 7.0 में, यह कनेक्टेड नेटवर्क पर लंबे समय तक दबाकर वाई-फाई सेटिंग्स में किया जाता है। कंप्यूटर आईपी और पोर्ट 8888, डिफ़ॉल्ट चार्ल्स निर्दिष्ट करें।

यह बिना कहे चला जाता है कि रॉकेटबैंक एप्लिकेशन सर्वर के साथ बातचीत करते समय टीएलएस का उपयोग करता है और हम इस तरह से ट्रैफ़िक नहीं सुन पाएंगे। चार्ल्स टीएलएस प्रमाणपत्र के प्रतिस्थापन के साथ ट्रैफ़िक अवरोधन का समर्थन करता है, अर्थात, यह एक MITM हमले को लागू करता है। हालांकि, इसके लिए, डिवाइस को चार्ल्स रूट प्रमाणपत्र पर भरोसा करना चाहिए।
चार्ल्स रूट प्रमाणपत्र तब स्थापित किया जाता है जब आप प्रॉक्सी सक्षम वाले मोबाइल डिवाइस से लिंक https://chls.pro/ssl पर क्लिक करते हैं। इसके अलावा, आपको प्रॉक्सी -> SSL प्रॉक्सी सेटिंग में अनुमानित होस्ट की सूची में rollerbank.ru को जोड़ना होगा।

लेकिन यह पर्याप्त नहीं होगा, क्योंकि एंड्रॉइड 7.0 में, डिफ़ॉल्ट रूप से, एप्लिकेशन उपयोगकर्ता प्रमाणन अधिकारियों पर भरोसा नहीं करते हैं। सुरक्षा! आवेदन को उचित अनुमति के साथ संकलित किया जाना चाहिए। एक बाधा? एक बार नहीं। हम अपघट्य और संकलित करते हैं जैसे हमें आवश्यकता होती है।
सबसे पहले हमें फोन से एप्लिकेशन पैकेज मिलता है। यह एंड्रॉइड डिबग ब्रिज या एपक एक्सट्रैक्टर एप्लिकेशन का उपयोग करके किया जा सकता है। एंड्रॉइड 7.0 पर पहली विधि ने मेरे लिए काम नहीं किया, और दूसरा काम के साथ मुकाबला किया।
हम कंप्यूटर के लिए पैकेज लेते हैं और apktool का उपयोग करके अपघटन करते हैं ।
apktool d rocket.apk
आपको पथ रेस / xml / network_security_config.xml के साथ नेटवर्क सुरक्षा कॉन्फ़िगरेशन फ़ाइल को जोड़ना होगा। आप यहां कॉन्फ़िगरेशन फ़ाइल प्रारूप के बारे में अधिक पढ़ सकते हैं, लेकिन निम्नलिखित सेटिंग्स हमारे लिए पर्याप्त हैं:
<network-security-config> <base-config> <trust-anchors> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
इस कॉन्फ़िगरेशन फ़ाइल को एप्लिकेशन मैनिफ़ेस्ट (रूट में AndroidManifest.xml) में एंड्रॉइड: networkSecurityConfig पैरामीटर को एप्लिकेशन टैग में जोड़कर निर्दिष्ट किया जाना चाहिए।
<application android:networkSecurityConfig="@xml/network_security_config" android:allowBackup="false" ...>...</application>
अब संकलित करें।
apktool b rocket
यह आवेदन पर हस्ताक्षर करने के लिए बना हुआ है, क्योंकि अहस्ताक्षरित अनुप्रयोग स्थापित नहीं हैं। हम इसके लिए एक अंतर्निहित परीक्षण प्रमाण पत्र के साथ एक हस्ताक्षर कार्यक्रम का उपयोग करते हैं।
java -jar sign.jar rocket.apk
फोन से मूल रॉकेटबैंक एप्लिकेशन को निकालें, संशोधित पैकेज को फोन पर कॉपी करें और इसे स्थापित करें (उदाहरण के लिए, "फाइल" एप्लिकेशन के माध्यम से)।
अब चार्ल्स में यातायात अवरोधन काम करना चाहिए। रॉकेटबैंक एप्लिकेशन खोलें, लॉग इन करें और चार्ल्स में देखें। यहाँ यह है, रसीद के लिए हमारा लिंक।

चलो वापस अजगर के पास जाएं और इस GET अनुरोध को अनुकरण करें, बस इस पर समय बर्बाद न करें और सर्वर से हमें सभी ऑपरेशनों के बारे में डेटा देने के लिए कहें। खैर, या कम से कम पहले 999999 के बारे में।
token = 'c8ccb54b-09e3-4608-a5b4-7914a92c21f3206582' params = {'token': token, 'page': 1, 'per_page': 999999}
यह प्रायोगिक तौर पर पाया गया कि सर्वर केवल तभी सत्र पर भरोसा करता है जब टोकन के साथ सही एक्स-डिवाइस-आईडी , एक्स-टाइम और एक्स-सिग भेजे गए थे । हमें खेद नहीं है, क्योंकि हमें कुछ भी आविष्कार और गिनना नहीं है, बस इसे कॉपी करना है।
x_device_id = 'ANDROID_C6FBB57CD433E756_899EE771-4AC5-46ED-44A1-656CE47A417B' x_time = '1529194008' x_sig = 'c486365013ddebe8b7f4599afbf73d26' headers = {'x-device-id': x_device_id, 'x-time': x_time, 'x-sig': x_sig} response = requests.get('https://rocketbank.ru/api/v5/operations/sexy_feed', params=params, headers=headers)
रसीद से MCC को बाहर निकालने के लिए नियमित रूप से पर्याप्त है। हम ऑपरेशंस पर जाते हैं, रसीद पढ़ते हैं, इसे नियमित शेड्यूल के माध्यम से चलाते हैं और हमें अपनी जेब में जो कुछ भी चाहिए होता है।
import re regex = re.compile('MCC:</dt><.+?>(\d+)</dd>') operations = [] feed = response.json()['feed'] for item in feed: if item[0] == 'operation': operation = item[1] merchant_name = operation['merchant']['name'] receipt_url = operation['receipt_url'] cost = operation['money']['amount']
शायद आप संशोधित एप्लिकेशन को हटा सकते हैं और मूल को वापस स्थापित कर सकते हैं।
कुल मिलाकर
दो बैंकों के डेटा को मिलाकर, एक पिवट टेबल का उपयोग करके MCC द्वारा समूह संचालन, मैन्युअल रूप से स्थानान्तरण और नकद निकासी से डेटा को साफ़ करना, और उन्हें समान श्रेणियों में स्थानों में समूहित करना, मुझे निम्न चित्र मिला:

अब, mcc-codes.ru जैसी सेवा का उपयोग करके, आप सबसे महंगी श्रेणियों के लिए बढ़े हुए कैशबैक के साथ कार्ड ले सकते हैं। और, वार्षिक रखरखाव की लागत के साथ संभावित कैशबैक की मात्रा को सहसंबंधित करते हुए, यह निर्धारित करें कि क्या एक विशिष्ट कार्ड तैयार करना उचित है।
इसका क्या फायदा है? मेरे खर्च और कार्ड के सही चयन के साथ, मैं एक वर्ष में 10 हजार रूबल से बचा सकता हूं। क्या यह इसके लायक है? आप तय करें :)