2014-05-16 5 views
10

जैसा कि मैंने बाद में भुगतान के लिए मेरे डीबी में पट्टी ग्राहक आईडी सहेजी है। यहां ग्राहक के पास एकाधिक कार्ड होंगे जहां मैं से मौजूदा कार्ड के साथ मौजूदा कार्ड के साथ ग्राहक कार्ड की जांच/सत्यापन करना चाहता हूं।क्या मैं जांच सकता हूं कि कोई नया कार्ड बनाने से पहले कार्ड पहले से मौजूद है या नहीं?

मान लीजिए कि एक ही कार्ड विवरण एकाधिक कार्ड के रूप में कई बार संग्रहीत करता है।

इस प्रक्रिया में, मैं टोकन के साथ जांच करना चाहता हूं कि यह कार्ड पहले से मौजूद है या नहीं। इसका उपयोग करेगा यदि पहले से ही वहां है, तो नया कार्ड नहीं बनाएगा।

उत्तर

7

ऐसा लगता है कि आप इसे ग्राहक को प्रदर्शित करने में सक्षम होने के लिए स्थानीय रूप से कार्ड डेटा कैश कर रहे हैं।

यदि यह सही है, तो स्ट्रिप प्रत्येक कार्ड/टोकन के लिए एक फिंगरप्रिंट प्रदान करता है जिसे आप कार्ड रिकॉर्ड में स्टोर करना शुरू कर सकते हैं (यदि आप पहले से नहीं हैं)। प्रत्येक फिंगरप्रिंट कार्ड के लिए अद्वितीय है, इसलिए किसी ग्राहक के लिए अतिरिक्त कार्ड संग्रहीत करने से पहले, आप केवल उपयोगकर्ता के कार्ड को फिंगरप्रिंट द्वारा खोज सकते हैं।

एक साधारण उदाहरण के रूप में, एक User has_many :cards संभालने:

token = Stripe::Token.retrieve("tok_a1b2c3d4") 

unless current_user.cards.find_by(fingerprint: token.card.fingerprint) 
    current_user.cards.create(... # data from token) 
end 

आप स्थानीय रूप से कार्ड डेटा ग्रहण कर रही रहे हैं, धारी आप के लिए डुप्लिकेट संभालती है और आप कुछ करने की ज़रूरत नहीं है।

+3

यहां, मैं केवल विशेष ग्राहक के लिए नया टोकन वाला कार्ड बना रहा हूं। इसके बाद उस कार्ड के लिए फिंगरप्रिंट मिलेगा और उस ग्राहक से बाकी कार्डों के लिए इस फिंगरप्रिंट से जांच करेगा। यदि कोई पहले से मिला है, तो इस कार्ड को हटा देगा। यदि कोई डुप्लिकेट नहीं मिला है तो यह कार्ड हमेशा की तरह रखेगा।तो यहां, हमें विशेष कार्ड के लिए डुप्लिकेट कार्ड जैसे कार्ड कार्ड के साथ कई कार्ड नहीं मिलेंगे। –

+2

अभी तक, डुप्लिकेट कार्ड बनाने के पट्टी के रूप में अगर मैं एक ही कार्ड विवरण कई बार दर्ज करता हूं तो यह उस विशेष ग्राहक के लिए उसी विवरण के साथ कई कार्ड बनाएगा। तो मैंने ऊपर के रूप में किया। कृपया मुझे अपनी टिप्पणियां बताएं यदि मैं कुछ भी गलत हूं। –

+1

@colinm दुर्भाग्यवश पट्टी वर्तमान में डुप्लिकेट को संभालने नहीं है –

18

दुर्भाग्य से आज स्ट्रिप पर काम करते हुए मैंने देखा कि यह डुप्लिकेट कार्ड संग्रह करने की अनुमति देता है। इससे बचने के लिए, मैं निम्नलिखित किया कदम:

#fetch the customer 
customer = Stripe::Customer.retrieve(stripe_customer_token) 
#Retrieve the card fingerprint using the stripe_card_token 
card_fingerprint = Stripe::Token.retrieve(stripe_card_token).try(:card).try(:fingerprint) 
# check whether a card with that fingerprint already exists 
default_card = customer.cards.all.data.select{|card| card.fingerprint == card_fingerprint}.last if card_fingerprint 
#create new card if do not already exists 
default_card = customer.cards.create({:card => stripe_card_token}) unless default_card 
#set the default card of the customer to be this card, as this is the last card provided by User and probably he want this card to be used for further transactions 
customer.default_card = default_card.id 
# save the customer 
customer.save 

पट्टी के साथ संग्रहीत एक कार्ड की अंगुली की छाप हमेशा अद्वितीय है

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

customer.cards 

अब है:

+0

क्या आप अपने डीबी में कार्ड_आईडी संग्रहीत कर रहे हैं? – Batman

+5

यह उत्तर केवल आंशिक रूप से पूरा है। कार्ड फिंगरप्रिंट केवल ** कार्ड नंबर ** से मेल खाने के लिए उपयोगी है। आपको यह सुनिश्चित करने के लिए भी जांच करनी होगी कि समाप्ति तिथि भी बदली नहीं है। यदि किसी ग्राहक के पास एक ही कार्ड नंबर है, लेकिन एक अपडेट की गई समाप्ति तिथि है, तो यह उत्तर एक नया कार्ड नहीं बनाएगा। –

11

में यह पढ़ लोगों के लिए: हालांकि Stripe have apparently changed their API syntax साहिल धनखड़ जवाब है, अभी भी सही है

customer.sources 

तो, सही सिंटैक्स अब होगा:

#fetch the customer 
customer = Stripe::Customer.retrieve(stripe_customer_token) 
#Retrieve the card fingerprint using the stripe_card_token 
card_fingerprint = Stripe::Token.retrieve(stripe_card_token).try(:card).try(:fingerprint) 
# check whether a card with that fingerprint already exists 
default_card = customer.sources.all.data.select{|card| card.fingerprint == card_fingerprint}.last if card_fingerprint 
#create new card if do not already exists 
default_card = customer.sources.create({:card => stripe_card_token}) unless default_card 
#set the default card of the customer to be this card, as this is the last card provided by User and probably he want this card to be used for further transactions 
customer.default_card = default_card.id 
# save the customer 
customer.save 

आशा है कि इससे किसी की मदद मिलेगी!

0

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

customer = Stripe::Customer.retrieve(customer_stripe_id) 
    #Retrieve the card fingerprint using the stripe_card_token 
    newcard = Stripe::Token.retrieve(source_token) 
    card_fingerprint = newcard.try(:card).try(:fingerprint) 
    card_exp_month = newcard.try(:card).try(:exp_month) 
    card_exp_year = newcard.try(:card).try(:exp_year) 
    # check whether a card with that fingerprint already exists 
    default_card = customer.sources.all(:object => "card").data.select{|card| ((card.fingerprint==card_fingerprint)and(card.exp_month==card_exp_month)and(card.exp_year==card_exp_year))}.last 

    default_card = customer.sources.create(source: source_token) if !default_card 
    #set the default card of the customer to be this card, as this is the last card provided by User and probably he want this card to be used for further transactions 
    customer.default_card = default_card.id 
    # save the customer 
    customer.save 
संबंधित मुद्दे

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