Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

स्ट्राइप के साथ रेल में एकमुश्त खरीदारी कैसे करें

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

जबकि तकनीकी रूप से किसी मौजूदा प्रदाता का उपयोग करके भुगतान को स्वयं संभालना संभव है, स्ट्राइप कई लाभ प्रदान करता है। शुरुआत के लिए, यह तेज़ है। स्ट्राइप में 4,000 से अधिक लोग भुगतान को यथासंभव सरल, सुरक्षित और सुविधाजनक बनाने पर काम कर रहे हैं।

इसके अलावा, अपने भुगतानों को 'पावर्ड बाय स्ट्राइप' रखना ग्राहकों का विश्वास बनाने और रूपांतरण बढ़ाने का एक आसान तरीका है। ग्राहक आमतौर पर अपने द्वारा देखी जाने वाली प्रत्येक वेबसाइट को अपने कार्ड या बैंक की जानकारी देने से हिचकिचाते हैं, और ठीक ही ऐसा है।

ऑनलाइन भुगतान स्थान में स्ट्राइप एकमात्र प्रदाता नहीं है। पैडल ऑनलाइन भुगतान के क्षेत्र में एक और बड़ी कंपनी है। पैडल स्ट्राइप के समान बहुत सारी सुविधाएँ प्रदान करता है, लेकिन थोड़े अधिक शुल्क और वास्तविक रूप से बदतर डेवलपर अनुभव के लिए। जबकि कई अन्य प्रतियोगी स्ट्राइप के विकल्प हैं, ऑनलाइन भुगतान के लिए उनके उत्पादों की अत्यधिक लोकप्रियता उन्हें एक आसान विकल्प बनाती है।

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

सेटअप

प्रक्रिया की व्याख्या करने के लिए, हम एक ऐसा एप्लिकेशन बनाएंगे जो उपयोगकर्ताओं को क्रेगलिस्ट-शैली बोर्ड पर विज्ञापन पोस्ट करने के लिए भुगतान करने की अनुमति देता है। हमारे विशिष्ट उदाहरण के लिए, हमारा आवेदन रूममेट्स की तलाश करने वाले लोगों के लिए एक वेबसाइट होगी। उपयोगकर्ता बोर्ड को मुफ्त में ब्राउज़ कर सकते हैं लेकिन उन्हें अपना विज्ञापन पोस्ट करने के लिए शुल्क का भुगतान करना होगा।

एक स्ट्राइप खाता बनाएं

शुरू करने के लिए, आपको खाता बनाने के लिए स्ट्राइप की वेबसाइट पर जाना होगा। यदि लागू हो तो अपनी जानकारी या अपने व्यवसाय की जानकारी के साथ साइन अप करें।

स्ट्राइप के साथ रेल में एकमुश्त खरीदारी कैसे करें स्ट्राइप साइन-अप पेज का स्क्रीनशॉट

यह लेख आपको खाता बनाने के सटीक विवरण के बारे में नहीं बताएगा, लेकिन उनके दस्तावेज़ीकरण से आपके किसी भी प्रश्न का उत्तर मिलने की संभावना है। हम विशेष रूप से उनके भुगतान और भुगतान . में रुचि रखते हैं उत्पाद या, विशेष रूप से, स्ट्राइप चेकआउट

एक बेसिक रेल ऐप बनाएं

एक बार आपका स्ट्राइप खाता सेट हो जाने के बाद, यह एक बुनियादी रेल ऐप बनाने का समय है जिसका उपयोग हम एकीकरण के लिए करेंगे। यदि आप किसी मौजूदा ऐप को एकीकृत कर रहे हैं या केवल ट्यूटोरियल के स्ट्राइप भाग में रुचि रखते हैं, तो "बेसिक स्ट्राइप इंटीग्रेशन" पर जाएं।

मैं इस उदाहरण के लिए निम्नलिखित संस्करणों का उपयोग करूंगा:

  • रेल 6.1
  • रूबी 3.0.0

यह मानते हुए कि आपके पास रूबी और रेल दोनों पहले से ही स्थापित हैं, आगे बढ़ें और निम्नलिखित को चलाएँ:

rails new roommate-board

मैंने ऐप के लिए जो नाम चुना है वह है roommate-board , लेकिन आप दूसरा चुनने के लिए स्वतंत्र हैं। उदाहरण कोड में उल्लेखित किसी अन्य स्थान पर बस नाम की अदला-बदली करें।

निर्देशिका में बदलें जो अभी निम्नलिखित के साथ बनाई गई थी:

cd roommate-board

फिर, निम्न के साथ ऐप चलाएँ:

rails s

यदि आप localhost:3000 पर जाते समय विशिष्ट रेल स्वागत पृष्ठ देखते हैं , तो बधाई हो, हम कोडिंग प्राप्त करने के लिए तैयार हैं!

सबसे पहले, हम हमारे लिए उपयोगकर्ता प्रमाणीकरण को संभालने के लिए Devise को जोड़ेंगे। बस gem 'devise' अपने Gemfile में और फिर निम्नलिखित चलाएँ:

bundle install

इसके बाद, निम्नलिखित को चलाकर चीजों को सेट करने के लिए डेविस जनरेटर का उपयोग करें:

rails generate devise:install

इसके बाद, निम्नलिखित को चलाकर डेविस को उपयोगकर्ता मॉडल से कनेक्ट करें:

rails generate devise User

और अंत में, निम्न के साथ माइग्रेशन चलाएँ:

rails db:migrate

एक रूममेट बोर्ड बनाएं

यदि आप इसे पढ़ रहे हैं, तो आप शायद फ्रंट-एंड डिज़ाइन की तुलना में स्ट्राइप इंटीग्रेशन में अधिक रुचि रखते हैं, इसलिए हम अपने उदाहरण को स्टाइल करने के बारे में चिंता नहीं करेंगे।

हमारा अगला कदम है पोस्टिंग के लिए मॉडल बनाना ! हम मॉडल, माइग्रेशन, कंट्रोलर और रूट बनाने के लिए रेल के आसान जनरेटर का उपयोग करेंगे। बस निम्नलिखित चलाएँ:

rails generate scaffold Post address:string rent:integer content:text

इस मॉडल में वह सब कुछ नहीं है जिसकी हमें स्ट्राइप को एकीकृत करने की आवश्यकता होगी। हम इसे बाद में जोड़ देंगे यदि आप इस ट्यूटोरियल को किसी ऐसे प्रोजेक्ट के लिए संदर्भित कर रहे हैं जिसमें आपके पास स्क्रैच से शुरू करने की विलासिता नहीं है। निम्न के साथ डेटाबेस तालिका बनाने के लिए माइग्रेशन चलाएँ:

rails db:migrate

इसके बाद, हम पोस्ट के लिए अनुक्रमणिका दृश्य को अपने आवेदन का मूल बना देंगे सुविधा के लिए। config/routes.rb में , निम्न पंक्ति जोड़ें:

root 'posts#index'

यह अभी काफी खाली है, और साइन इन करने, साइन आउट करने या साइन अप करने का कोई स्पष्ट तरीका नहीं है। कार्यक्षमता पहले से ही है, तो चलिए उपयोगकर्ता को स्पष्ट करने के लिए हेडर में कुछ लिंक जोड़ते हैं। app/views/layouts/application.html.erb . में , हम आवश्यक लिंक जोड़ देंगे। परिवर्तन करने के बाद मेरी फ़ाइल इस तरह दिखती है:

<!DOCTYPE html>
<html>
  <head>
    <title>RoommateBoard</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <header>
      <nav>
        <a href="/#" class="block">
          <h1>Roommate Board</h1>
        </a>
        <% if user_signed_in? %>
          <%= link_to "Manage Posts", manage_posts_url %>
          <%= link_to "Sign Out", destroy_user_session_url, :method => 'delete' %>
        <% else %>
          <%= link_to "New Post", new_user_registration_url %>
        <% end %>
      </nav>
    </header>
    <%= yield %>
  </body>
</html>

यह होमपेज के लिए एक लिंक देता है, और जब उपयोगकर्ता "नई पोस्ट" पर क्लिक करते हैं, तो उन्हें साइन-अप पेज पर ले जाया जाएगा। यदि वे साइन इन हैं, तो यह "पोस्ट प्रबंधित करें" बटन और "साइन आउट" बटन में बदल जाता है। बिना किसी स्टाइल के और बिना साइन इन किए, रूट पेज अब इस तरह दिखता है:

स्ट्राइप के साथ रेल में एकमुश्त खरीदारी कैसे करें मूल पोस्ट इंडेक्स पेज का स्क्रीनशॉट

इसके बाद, हम प्रत्येक पोस्टिंग को एक अद्वितीय उपयोगकर्ता तक सीमित करना चाहते हैं . अनिवार्य रूप से, हम कुछ प्रासंगिक तर्क के साथ, एक पोस्टिंग और उपयोगकर्ता के बीच संबंध बनाने जा रहे हैं। हम रेल के आसान माइग्रेशन जनरेटर से शुरुआत करेंगे; बस निम्नलिखित चलाएँ:

rails g migration AddUserIdToPosts

अब माइग्रेशन फ़ाइल को db/migrate/ में संपादित करें इस तरह दिखने के लिए:

class AddUserIdToPosts < ActiveRecord::Migration[6.1]
  def change
    add_column :posts, :user_id, :integer
  end
end

अंत में, निम्न के साथ माइग्रेशन चलाएँ:

rails db migrate

इसके बाद, हम मॉडल में स्वयं संबद्धता जोड़ेंगे . app/models/post.rb . में , निम्न पंक्ति जोड़ें:

belongs_to :user

और app/models/user.rb . में , निम्नलिखित जोड़ें:

has_many :posts

यह द्विदिश संघ हमें कुछ आसान रेल विधियाँ प्रदान करता है, जैसे कि हम निर्माण और नई विधियों में उपयोग करने वाले हैं। app/controllers/posts_controller.rb पर नेविगेट करें (पोस्ट कंट्रोलर) और नया . पर एक नज़र डालें तरीका। इसके बजाय @post = Post.new , उपयोग करें @post = current_user.posts.build

बनाएं . में विधि, हम कुछ ऐसा ही करेंगे। बदलें @post = Post.new(post_params) साथ में @post = current_user.posts.build(post_params) . साथ में, नए और बनाने के तरीके कुछ इस तरह दिखने चाहिए:

# GET /posts/new
def new
  @post = current_user.posts.build
end

  # POST /posts or /posts.json
def create
  @post = current_user.posts.build(post_params)

  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: "Post was successfully created." }
      format.json { render :show, status: :created, location: @post }
    else
      format.html { render :new, status: :unprocessable_entity }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

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

def user_owns_post?
  @post.user == current_user
end

संपादित करें . में विधि, निम्नलिखित जोड़ें (यह वहां एकमात्र कोड होगा):

unless user_owns_post?
  # Redirect them to an error page
  redirect_to posts_path, flash: { error: "You are not the owner of that post!" }
end

नष्ट . में विधि, इसे शुरुआत में जोड़ें:

unless user_owns_post?
  # Redirect them to an error page
  redirect_to posts_path, flash: { error: "You are not the owner of that post!" }
end

इसके बाद, हमें किसी उपयोगकर्ता के लिए उनकी मौजूदा पोस्ट प्रबंधित करने . के लिए कुछ कार्यात्मकता की आवश्यकता होगी . अंतिम लक्ष्य उपयोगकर्ता के लिए एक पोस्ट बनाने में सक्षम होना और भुगतान करने से पहले इसे ड्राफ़्ट स्थिति में रखना है। एक बार जब वे भुगतान कर देते हैं, तो यह उनके लिए सक्रिय हो जाता है! PostsController में, एक नई विधि जोड़ें:

def manage
  @posts = current_user.posts
end

इसके बाद, एक मार्ग जोड़ें ताकि उपयोगकर्ता वहां पहुंच सके! config/routes.rb में , निम्नलिखित जोड़ें:

get "/manage_posts/" =>'posts#manage'

अंत में, हम पोस्ट प्रबंधन के लिए दृश्य तैयार करेंगे! एक नई फ़ाइल जोड़ें, app/views/posts/manage.html.erb . फिर, app/views/posts/index.html.erb की संपूर्ण सामग्री को कॉपी करें इसे में। बस हेडर को "पोस्ट" से "पोस्ट प्रबंधित करें" में बदलें। यह अनिवार्य रूप से एक इंडेक्स पेज है, लेकिन हमारे कंट्रोलर लॉजिक की बदौलत एक व्यक्तिगत उपयोगकर्ता की पोस्ट केवल अनुक्रमित होती है। तकनीकी रूप से, हम इसे अलग-अलग इंडेक्स पेज पर कर सकते थे, लेकिन यह अलगाव बाद में अन्य कार्यात्मकताओं को जोड़ना आसान बनाता है। उदाहरण के लिए, अब हम नई पोस्ट बनाने के लिए एक लिंक जोड़ेंगे इस प्रबंधन पृष्ठ पर।

शीर्षलेख के अंतर्गत, बस निम्नलिखित जोड़ें:

<%= link_to "New Post", new_post_url%>

यह वह सब सेटअप है जिसकी हमें आवश्यकता थी! यह सुनिश्चित करने के लिए कि सब कुछ ठीक से काम कर रहा है, इसके माध्यम से जाना एक अच्छा विचार है। अब आपको निम्न कार्य करने में सक्षम होना चाहिए:

  • उपयोगकर्ता खाता बनाएं
  • साइन इन करें
  • साइन आउट करें
  • मौजूदा पोस्टिंग का इंडेक्स देखें
  • नई पोस्टिंग बनाएं

अगर यह सब आपकी अपेक्षा के अनुरूप काम कर रहा है, तो यह स्ट्राइप इंटीग्रेशन की ओर बढ़ने का समय है!

स्ट्राइप इंटीग्रेशन

स्ट्राइप रूबी जेम जोड़ना

शुरू करने के लिए, हम केवल स्ट्राइप रूबी रत्न जोड़ेंगे। अपने Gemfile में, निम्न पंक्ति जोड़ें:

gem 'stripe'

दौड़ने के साथ उसका पालन करें:

bundle install

अगले भाग के लिए, आपको अपनी स्ट्राइप API कुंजी . की आवश्यकता होगी . स्ट्राइप कंसोल पर, साइडबार पर "डेवलपर" पर क्लिक करें। "एपीआई कुंजी" के लिए एक विकल्प स्वयं प्रकट होगा, इसलिए आगे बढ़ें और अगला क्लिक करें। अपनी "गुप्त कुंजी" पर ध्यान दें, क्योंकि हमें शीघ्र ही इसकी आवश्यकता होगी।

लेकिन पहले, config/initializers . में एक इनिशियलाइज़र बनाएं . stripe.rb called नाम से एक बनाएं . इस फ़ाइल में, इस तरह दिखने वाली एक पंक्ति जोड़ें (लेकिन आपकी गुप्त कुंजी को प्रतिस्थापित करके):

Stripe.api_key = <insert your key here as a string>

स्ट्राइप क्रेडेंशियल स्टोर करना

हालाँकि, हमारे क्रेडेंशियल्स को संग्रहीत करने का यह तरीका असुरक्षित है। हमें प्रोडक्शन सीक्रेट्स को प्लेनटेक्स्ट में स्टोर नहीं करना चाहिए, जहां उन्हें git द्वारा ट्रैक किया जाता है और कोडबेस पढ़ने वाले किसी के लिए भी एक्सेस किया जा सकता है। सौभाग्य से, रेल क्रेडेंशियल्स को सुरक्षित रूप से संग्रहीत करने का एक तरीका प्रदान करता है।

अपने शेल में, EDITOR=vim bin/rails credentials:edit विम में क्रेडेंशियल फ़ाइल को अनएन्क्रिप्ट और खोलने के लिए। इन्सर्ट मोड में स्विच करने के लिए अपने कीबोर्ड पर 'i' की दबाएं। इस तरह दिखने वाला एक नया अनुभाग जोड़ें:

stripe:
  secret: your-secret-key
  public: your-public-key

इसके बाद, फ़ाइल को सहेजें और विम से बाहर निकलें। ऐसा करने के कुछ तरीके हैं, लेकिन मेरा पसंदीदा एस्केप कुंजी (इन्सर्ट मोड छोड़ने के लिए) को दबाकर और फिर टाइप करना है :wq , उसके बाद एंटर की। यदि आप इस बारे में अधिक जानना चाहते हैं कि रेल एन्क्रिप्टेड क्रेडेंशियल्स को कैसे संभालता है, तो यह एक अच्छा संसाधन है।

अब जब क्रेडेंशियल सुरक्षित रूप से संग्रहीत हो गए हैं, तो इसके साथ असुरक्षित इनिशियलाइज़र कोड को स्वैप करें:

Stripe.api_key = Rails.application.credentials[:stripe][:secret]

उत्पाद से स्ट्राइप चेकआउट से लिंक करना

कुछ अलग तरीके हैं जिनसे हम भुगतान के लिए स्ट्राइप का लाभ उठा सकते हैं, लेकिन एक बढ़िया विकल्प स्ट्राइप चेकआउट है। स्ट्राइप चेकआउट एक होस्टेड भुगतान पृष्ठ है , जिसका अर्थ है कि आप वास्तविक लेनदेन के लिए कोई भी यूजर इंटरफेस नहीं बनाते हैं। एक उपयोगकर्ता एक बटन पर क्लिक करेगा, स्ट्राइप पर पुनर्निर्देशित किया जाएगा, और फिर भुगतान के बाद आपके आवेदन पर वापस भेज दिया जाएगा। यह संदर्भ को प्रबंधित करना थोड़ा चुनौती भरा बनाता है, लेकिन यह भुगतान फ़ॉर्म बनाने के बोझ को हटा देता है और रूपांतरण को अधिकतम करने के लिए स्ट्राइप को बहुत काम करने देता है। आप कार्ड से परे भुगतान प्रकार आसानी से स्वीकार कर सकते हैं, जिसमें ACH लेनदेन या कई अंतर्राष्ट्रीय भुगतान विधियां शामिल हैं।

शुरू करने के लिए, चेकआउट प्रक्रिया को संभालने के लिए एक नियंत्रक बनाएं . app/controllers/checkout_controller.rb बनाएं . इसमें, हम चेकआउट सत्र के निर्माण को संभालने के लिए एक विधि लिखेंगे।

def create
  @session = Stripe::Checkout::Session.create({
    success_url: root_url,
    cancel_url: manage_posts_url,
    payment_method_types: ['card'],
    line_items: [{
        name: "Roommate Posting",
        amount: 2000,
        currency: "usd",
        quantity: 1
    }],
    mode: 'payment',
    metadata: {post_id: params[:post_id]},
    customer_email: current_user.email,
    success_url: manage_posts_url,
    cancel_url: manage_posts_url
  })

  respond_to do |format|
    format.js
  end
end

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

इसके बाद, हमें स्पष्ट रूप से विधि को कॉल करने के लिए एक तरीके की आवश्यकता होगी।

config/routes.rb में , नियंत्रक के लिए मार्ग बनाने के लिए निम्न पंक्ति जोड़ें।

post 'checkout/create' => 'checkout#create', as: "checkout_create"

इसके बाद, हम भुगतान सबमिट करने के लिए एक बटन जोड़ेंगे पोस्ट प्रबंधित करें दृश्य में किसी भी पोस्ट के लिए। app/views/manage.html.erb . में , इसे अंतिम जोड़कर हेडर में एक अतिरिक्त कॉलम जोड़ें:

<th>Payment</th>

साथ ही, स्विच करें <th colspan="3"></th> करने के लिए <th colspan="4"></th>

इसके बाद, भुगतान बटन के लिए ही टेबल बॉडी में एक और आइटम जोड़ें। शरीर में चौथी वस्तु के रूप में, निम्नलिखित जोड़ें:

<td><%= button_to "Submit Payment", checkout_create_path, params: {:post_id => post.id }, remote: true %></td>

कुल मिलाकर, पोस्ट प्रबंधित करें दृश्य अब इस तरह दिखता है:

<p id="notice"><%= notice %></p>

<h1>Manage Posts</h1>
<%= link_to "New Post", new_post_url%>

<table>
  <thead>
    <tr>
      <th>Address</th>
      <th>Rent</th>
      <th>Content</th>
      <th>Payment</th>
      <th colspan="4"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.address %></td>
        <td><%= post.rent %></td>
        <td><%= post.content %></td>
        <td><%= button_to "Submit Payment", checkout_create_path, params: {:post_id => post.id }, remote: true %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Post', new_post_path %>

जावास्क्रिप्ट

app/views/application.html.erb में स्ट्राइप जावास्क्रिप्ट पैकेज शामिल करना न भूलें इस लाइन के साथ:

<script src="https://js.stripe.com/v3/"></script>

इसके बाद, आपको app/views/checkout/create.js.erb में एक नई फ़ाइल (और निर्देशिका!) जोड़नी होगी . इस फ़ाइल में, नियंत्रक की सहायता से बटन पर क्लिक करके चेकआउट सत्र बनाने की अनुमति देने के लिए बस निम्नलिखित जोड़ें।

var stripe = Stripe("<%= Rails.application.credentials[:stripe][:public] %>")

stripe.redirectToCheckout({
    sessionId: '<%= @session.id %>'
}).then(function (result) {
    console.log(result.error_message)
});

वेबहुक सेट करना

अब, हमारे पास उपयोगकर्ताओं के लिए पोस्ट के लिए भुगतान करने का एक तरीका है! हालांकि, हमारे पास एप्लिकेशन के लिए यह जानने का कोई तरीका नहीं है कि किसी पोस्ट के लिए भुगतान किया गया है या जब वह है तो उसे सक्रिय करें। शुरू करने के लिए, पोस्ट मॉडल में एक बूलियन जोड़ें ताकि यह इंगित किया जा सके कि किसी पोस्ट के लिए भुगतान किया गया है या नहीं। रेल माइग्रेशन जनरेटर का उपयोग करने के लिए, निम्नलिखित चलाएँ:

rails g migration AddPaymentDetailsToPost

इस माइग्रेशन को खोलें और इसमें निम्न पंक्ति जोड़ें:

add_column :posts, :is_paid, :boolean, :default => false

यह पोस्ट टेबल/मॉडल में एक विशेषता/कॉलम जोड़ता है जिसे is_paid . कहा जाता है . यह विशेषता एक बूलियन है जो डिफ़ॉल्ट रूप से गलत है, जिसका अर्थ है कि जब भी कोई पोस्ट बनाई जाती है, तो उसे के लिए भुगतान नहीं किया गया के रूप में चिह्नित किया जाता है . जब किसी पोस्ट के लिए भुगतान किया जाता है, तो हम मैन्युअल रूप से बूलियन फ्लिप करेंगे। लेकिन पहले, आपके द्वारा अभी-अभी लिखा गया माइग्रेशन चलाएँ:

rails db:migrate

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

शुरू करने के लिए, app/controllers/ . में एक नया कंट्रोलर बनाएं WebhooksController कहा जाता है। इसमें app/controllers/webhooks_controller.rb , निम्नलिखित लिखें:

class WebhooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def create
    payload = request.body.read
    sig_header = request.env['HTTP_STRIPE_SIGNATURE']
    event = nil

    begin
    event = Stripe::Webhook.construct_event(
      payload, sig_header, Rails.application.credentials[:stripe][:webhook]
    )
    rescue JSON::ParserError => e
      status 400
    return
    rescue Stripe::SignatureVerificationError => e
      # Invalid signature
      puts "Signature error"
      p e
      return
    end

    # Handle the event
    case event.type
    when 'checkout.session.completed'
      session = event.data.object
      post = Post.find_by(id: session.metadata.post_id)]
      post.is_paid = true
      post.save!
    end

    render json: { message: 'success' }
  end
end 

आवश्यक बॉयलरप्लेट के अलावा, यह विधि एक विशिष्ट ईवेंट प्रकार को सौंपेगी, जिसे checkout.session.completed कहा जाता है। . चीजों के रेल पक्ष पर जो कुछ बचा है वह मार्ग को config/routes.rb में जोड़ना है :

resources :webhooks, only: [:create]

अंत में, आपको अपने स्ट्राइप खाते को स्ट्राइप डैशबोर्ड में ही इस एंडपॉइंट से कनेक्ट करना होगा। क्योंकि आप स्ट्राइप डैशबोर्ड पर एक यूआरएल की आपूर्ति करेंगे, यह स्थानीय रूप से काम नहीं करेगा! वेबहुक के ठीक से काम करने के लिए आपको इसे इंटरनेट-सुलभ समापन बिंदु पर तैनात करना होगा।

स्ट्राइप डैशबोर्ड पर "डेवलपर्स" पर लौटें, लेकिन इस बार, बाएं पैनल पर "वेबहुक" चुनें। "समापन बिंदु" अनुभाग में, "समापन बिंदु जोड़ें" पर क्लिक करें। /webhooks के साथ संलग्न अपने एप्लिकेशन URL की आपूर्ति करें और इसे "checkout.session.completed" ईवेंट असाइन करें।

और यह स्ट्राइप इंटीग्रेशन के लिए है! हमारे नकली आवेदन के लिए अंतिम व्यावहारिक कदम यह है कि इंडेक्स पेज केवल उन पोस्ट को प्रदर्शित करता है जिनके लिए भुगतान किया गया है। यह app/controllers/posts_controller.rb की अनुक्रमणिका पद्धति में आसानी से किया जा सकता है . इसके लिए विधि बदलें:

def index
  @posts = Post.where(:is_paid => true)
end

अब, उपयोगकर्ता एक पोस्ट बना सकते हैं, इसके लिए स्ट्राइप चेकआउट के साथ भुगतान कर सकते हैं, और इसे स्वचालित रूप से एप्लिकेशन के होमपेज पर प्रदर्शित कर सकते हैं!

उत्पादन पर स्विच करना

चूंकि आपके वेबहुक केवल लाइव साइट पर परिनियोजित होने पर ही कार्य करते हैं, इसलिए परिनियोजन के लिए आवश्यक परिवर्तनों पर चर्चा करना उचित है। शुरुआत के लिए, आपका संचार होना चाहिए काम करने के लिए स्ट्राइप चेकआउट के लिए HTTPS बनें। यदि आप किसी समस्या का सामना कर रहे हैं, तो स्ट्राइप के कुछ संकेतों के लिए जावास्क्रिप्ट कंसोल देखें।

इस बात की अच्छी संभावना है कि आपने अपने प्रारंभिक सेटअप में स्ट्राइप की परीक्षण कुंजियों का उपयोग किया हो। यदि आपने ऐसा किया है, तो स्ट्राइप डैशबोर्ड का API कुंजी अनुभाग कुछ इस तरह दिखाई देगा।

स्ट्राइप के साथ रेल में एकमुश्त खरीदारी कैसे करें स्ट्राइप डैशबोर्ड API कुंजियों का स्क्रीनशॉट

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

निष्कर्ष

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

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

एक चीज जिसके साथ कई व्यवसाय संघर्ष करते हैं, वह है करों को संभालना, विशेष रूप से अंतरराष्ट्रीय स्तर पर। स्ट्राइप ने हाल ही में व्यवसायों के लिए इसे स्वचालित रूप से संभालने के लिए एक नई सुविधा शुरू की है, लेकिन यह अभी भी बीटा में है। एक बार उपलब्ध हो जाने पर, यह भुगतान प्रसंस्करण के लिए स्ट्राइप का उपयोग करने वाले किसी भी व्यक्ति के लेखांकन बोझ को बहुत कम कर देगा!

रूबी ऑन रेल्स पर निर्देशित स्ट्राइप के दस्तावेज और मौजूदा लेख एक बार की खरीद के बजाय सदस्यता की ओर झुकते हैं। सदस्यता एक उपयोगकर्ता और एक उत्पाद से जुड़े आवर्ती शुल्क हैं। स्ट्राइप के अंत में, कार्यान्वयन एक बार की खरीद की तरह दिखता है। आवेदन पक्ष पर, हालांकि, हमें सदस्यता प्रबंधन को एकीकृत करना होगा, उपयोगकर्ता को अपनी सदस्यता का प्रबंधन करने की अनुमति देनी होगी, और समय-समय पर सदस्यता की स्थिति की जांच करनी होगी। यह लेख एकमुश्त खरीदारी पर केंद्रित है, लेकिन अगर आपको सदस्यताओं को प्रबंधित करने की आवश्यकता है तो समुदाय में बहुत सारे संसाधन हैं।


  1. रूबी के साथ कमांड-लाइन एप्लिकेशन (सीएलआई) कैसे बनाएं?

    बहुत से लोग भूल जाते हैं कि रूबी ऐसे काम कर सकती है जो वेब एप्लिकेशन नहीं हैं। इस लेख में, मैं आपको दिखाना चाहता हूं कि इसका समाधान करने में मदद के लिए एक कमांड-लाइन एप्लिकेशन कैसे बनाया जाए! यहां कुछ कमांड-लाइन एप्लिकेशन दिए गए हैं जिनसे आप परिचित हो सकते हैं: psql rails bundler gem git कम

  1. रूबी के साथ एक पार्सर कैसे बनाएं

    पार्सिंग स्ट्रिंग्स के एक गुच्छा को समझने और उन्हें किसी ऐसी चीज़ में बदलने की कला है जिसे हम समझ सकते हैं। आप रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं, लेकिन वे हमेशा कार्य के लिए उपयुक्त नहीं होते हैं। उदाहरण के लिए, यह सामान्य ज्ञान है कि नियमित अभिव्यक्तियों के साथ HTML को पार्स करना शायद एक अच्छ

  1. रेल एप्लिकेशन में OmniAuth-Twitter का उपयोग कैसे करें

    इस ट्यूटोरियल में, आप सीखेंगे कि आपके एप्लिकेशन के उपयोगकर्ताओं को अपने ट्विटर अकाउंट का उपयोग करके लॉग इन करने की अनुमति कैसे दी जाए। OAuth जैसे टूल से ऐसा करना आसान बना दिया गया है। आप OmniAuth-Twitter का उपयोग करेंगे, जिसमें OmniAuth के लिए Twitter रणनीति शामिल है। चलो गोता लगाएँ! आरंभ कर