কম্পিউটার

স্ট্রাইপ সহ রেলগুলিতে কীভাবে এককালীন ক্রয় বিক্রি করবেন

লক্ষ লক্ষ কোম্পানি দ্বারা ব্যবহৃত, স্ট্রাইপ সাবস্ক্রিপশন এবং এককালীন কেনাকাটা পরিচালনা করার জন্য অ্যাপ্লিকেশনগুলির জন্য অর্থপ্রদানের পরিকাঠামো প্রদান করে। স্ট্রাইপ চেকআউট আমাদেরকে একটি হোস্ট করা অর্থপ্রদান পৃষ্ঠার মাধ্যমে সহজেই কার্ডের অর্থ গ্রহণ করতে দেয়, যা রূপান্তর বাড়ানোর জন্য তৈরি করা হয়েছে। ওয়েবহুকের সাথে এটিকে একত্রিত করার ফলে ডেভেলপাররা পণ্য এবং সদস্যতা বিক্রি করতে পারে এবং তারপর সেগুলি ডিজিটালভাবে সরবরাহ করতে পারে।

যদিও টেকনিক্যালি একটি বিদ্যমান প্রদানকারী ব্যবহার করে নিজেই অর্থপ্রদান পরিচালনা করা সম্ভব, স্ট্রাইপ বেশ কয়েকটি সুবিধা প্রদান করে। প্রারম্ভিকদের জন্য, এটি দ্রুত। স্ট্রাইপে 4,000 জনেরও বেশি লোক পেমেন্ট যতটা সম্ভব সহজ, নিরাপদ এবং সুবিধাজনক করার জন্য কাজ করছে।

উপরন্তু, আপনার পেমেন্টগুলি 'স্ট্রাইপ দ্বারা চালিত' করা গ্রাহকের আস্থা তৈরি করার এবং রূপান্তর বাড়ানোর একটি সহজ উপায়। গ্রাহকরা সাধারণত তাদের কার্ড বা ব্যাঙ্কের তথ্য তাদের ভিজিট করা প্রতিটি ওয়েবসাইটে দিতে দ্বিধাবোধ করেন, এবং ঠিক তাই।

অনলাইন পেমেন্ট স্পেসে স্ট্রাইপ একমাত্র প্রদানকারী নয়। প্যাডেল হল অনলাইন পেমেন্ট স্পেসের আরেকটি বিশাল প্লেয়ার। প্যাডেল স্ট্রাইপের মতো অনেকগুলি বৈশিষ্ট্য অফার করে, তবে কিছুটা বেশি ফি এবং একটি কাল্পনিকভাবে খারাপ বিকাশকারী অভিজ্ঞতার জন্য। যদিও অন্যান্য অনেক প্রতিযোগী স্ট্রাইপের বিকল্প, অনলাইন পেমেন্টের জন্য তাদের পণ্যের নিছক জনপ্রিয়তা তাদের একটি সহজ পছন্দ করে তোলে।

সাস কোম্পানীর জন্য পুনরাবৃত্ত সাবস্ক্রিপশন পরিচালনা করা সাধারণ, কিন্তু ডিজিটাল পণ্যের এককালীন বিক্রয় থেকে অনেক পণ্য উপকৃত হবে। এটি স্ট্রাইপের পরিকাঠামোর সাথে সমানভাবে সহজ, তবে তাদের ডকুমেন্টেশন বিষয়টি থেকে দূরে সরে যাচ্ছে বলে মনে হচ্ছে।

সেটআপ

প্রক্রিয়াটি ব্যাখ্যা করার জন্য, আমরা একটি অ্যাপ্লিকেশন তৈরি করব যা ব্যবহারকারীদের একটি ক্রেগলিস্ট-স্টাইল বোর্ডে একটি বিজ্ঞাপন পোস্ট করার জন্য অর্থ প্রদান করতে দেয়৷ আমাদের নির্দিষ্ট উদাহরণের জন্য, আমাদের অ্যাপ্লিকেশনটি রুমমেট খুঁজছেন এমন ব্যক্তিদের জন্য একটি ওয়েবসাইট হবে। ব্যবহারকারীরা বিনামূল্যে বোর্ড ব্রাউজ করতে পারেন কিন্তু তাদের নিজস্ব বিজ্ঞাপন পোস্ট করার জন্য একটি ফি দিতে হবে।

একটি স্ট্রাইপ অ্যাকাউন্ট তৈরি করুন

শুরু করতে, আপনাকে একটি অ্যাকাউন্ট তৈরি করতে স্ট্রাইপের ওয়েবসাইটে যেতে হবে। প্রযোজ্য হলে আপনার তথ্য বা আপনার ব্যবসার তথ্য দিয়ে সাইন আপ করুন।

স্ট্রাইপ সহ রেলগুলিতে কীভাবে এককালীন ক্রয় বিক্রি করবেন স্ট্রাইপ সাইন-আপ পৃষ্ঠার একটি স্ক্রিনশট

এই নিবন্ধটি আপনাকে একটি অ্যাকাউন্ট তৈরি করার সঠিক বিবরণের মাধ্যমে নিয়ে যাবে না, তবে তাদের ডকুমেন্টেশন সম্ভবত আপনার যেকোনো প্রশ্নের উত্তর দেবে। আমরা তাদের পেমেন্ট এবং পেআউট বিষয়ে বিশেষভাবে আগ্রহী পণ্য বা, আরো নির্দিষ্টভাবে, স্ট্রাইপ চেকআউট .

একটি বেসিক রেল অ্যাপ তৈরি করুন

একবার আপনার স্ট্রাইপ অ্যাকাউন্ট সেট আপ হয়ে গেলে, এটি একটি মৌলিক রেল অ্যাপ তৈরি করার সময় যা আমরা ইন্টিগ্রেশনের জন্য ব্যবহার করব। আপনি যদি একটি বিদ্যমান অ্যাপকে সংহত করছেন বা টিউটোরিয়ালের স্ট্রাইপ অংশে আগ্রহী হন তবে "বেসিক স্ট্রাইপ ইন্টিগ্রেশন" এ যান৷

আমি এই উদাহরণের জন্য নিম্নলিখিত সংস্করণগুলি ব্যবহার করব:

  • রেল ৬.১
  • রুবি 3.0.0

অনুমান করুন যে আপনি ইতিমধ্যেই রুবি এবং রেল উভয়ই ইনস্টল করেছেন, এগিয়ে যান এবং নিম্নলিখিতটি চালান:

rails new roommate-board

অ্যাপটির জন্য আমি যে নামটি বেছে নিয়েছি সেটি হল roommate-board , কিন্তু আপনি অন্য চয়ন করতে স্বাধীন। উদাহরণ কোডে উল্লিখিত অন্য কোথাও নামটি অদলবদল করুন।

এইমাত্র নিম্নলিখিতগুলি দিয়ে তৈরি করা ডিরেক্টরিতে পরিবর্তন করুন:

cd roommate-board

তারপরে, নিম্নলিখিতটি দিয়ে অ্যাপটি চালান:

rails s

আপনি localhost:3000 দেখার সময় সাধারণ রেলওয়ের স্বাগত পৃষ্ঠা দেখতে পেলে , তাহলে অভিনন্দন, আমরা কোডিং পেতে প্রস্তুত!

প্রথমত, আমরা আমাদের জন্য ব্যবহারকারীর প্রমাণীকরণ পরিচালনা করতে ডিভাইস যোগ করব। শুধু gem 'devise' যোগ করুন আপনার জেমফাইলে এবং তারপরে নিম্নলিখিতটি চালান:

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>

এটি হোমপেজে একটি লিঙ্ক দেয় এবং ব্যবহারকারীরা "নতুন পোস্ট" এ ক্লিক করলে, তাদের সাইন-আপ পৃষ্ঠায় নিয়ে যাওয়া হবে৷ তারা সাইন ইন করলে, এটি একটি "পোস্ট পরিচালনা করুন" বোতাম এবং একটি "সাইন আউট" বোতামে পরিবর্তিত হয়৷ কোনো স্টাইলিং ছাড়াই এবং সাইন ইন না করেই, রুট পেজটি এখন এই রকম দেখাচ্ছে:

স্ট্রাইপ সহ রেলগুলিতে কীভাবে এককালীন ক্রয় বিক্রি করবেন বেসিক পোস্ট সূচী পৃষ্ঠার একটি স্ক্রিনশট

এরপর, আমরা একটি অনন্য ব্যবহারকারীর কাছে প্রতিটি পোস্ট করার সুযোগ দিতে চাই৷ . মূলত, আমরা কিছু প্রাসঙ্গিক যুক্তি সহ পোস্টিং এবং ব্যবহারকারীর মধ্যে একটি belongs_to অ্যাসোসিয়েশন তৈরি করব। আমরা রেলের সুবিধাজনক মাইগ্রেশন জেনারেটর দিয়ে শুরু করব; শুধু নিম্নলিখিত চালান:

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

পরবর্তীতে, একজন ব্যবহারকারীর তাদের বিদ্যমান পোস্টগুলি পরিচালনা করতে আমাদের কিছু কার্যকারিতার প্রয়োজন হবে৷ . শেষ লক্ষ্য হল একজন ব্যবহারকারী একটি পোস্ট তৈরি করতে সক্ষম হবেন এবং তাদের অর্থ প্রদানের আগে এটি একটি খসড়া অবস্থায় থাকবে৷ একবার তারা অর্থ প্রদান করে, এটি তাদের জন্য সক্রিয় করা হয়! পোস্ট কন্ট্রোলারে, একটি নতুন পদ্ধতি যোগ করুন:

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%>

এই সব সেটআপ আমরা প্রয়োজন! সবকিছু সঠিকভাবে কাজ করছে তা নিশ্চিত করতে এটির মধ্য দিয়ে যাওয়া একটি ভাল ধারণা। আপনার এখন নিম্নলিখিতগুলি করতে সক্ষম হওয়া উচিত:

  • একটি ব্যবহারকারীর অ্যাকাউন্ট তৈরি করুন
  • সাইন ইন করুন
  • সাইন আউট করুন
  • বিদ্যমান পোস্টিংগুলির একটি সূচী দেখুন
  • একটি নতুন পোস্টিং তৈরি করুন

যদি সবকিছু আপনার প্রত্যাশা অনুযায়ী কাজ করে, তাহলে স্ট্রাইপ ইন্টিগ্রেশনে এগিয়ে যাওয়ার সময়!

স্ট্রাইপ ইন্টিগ্রেশন

স্ট্রাইপ রুবি রত্ন যোগ করা

শুরু করার জন্য, আমরা শুধু স্ট্রাইপ রুবি মণি যোগ করব। আপনার জেমফাইলে, নিম্নলিখিত লাইন যোগ করুন:

gem 'stripe'

দৌড়ানোর সাথে এটি অনুসরণ করুন:

bundle install

পরবর্তী অংশের জন্য, আপনার প্রয়োজন হবে আপনার স্ট্রাইপ API কী . স্ট্রাইপ কনসোলে, সাইডবারে "ডেভেলপার" এ ক্লিক করুন। "API কী" এর জন্য একটি বিকল্প নিজেকে প্রকাশ করবে, তাই এগিয়ে যান এবং পরবর্তীতে ক্লিক করুন৷ আপনার "গোপন কী" এর একটি নোট নিন, কারণ শীঘ্রই আমাদের এটির প্রয়োজন হবে৷

কিন্তু প্রথমে, config/initializers-এ একটি ইনিশিয়ালাইজার তৈরি করুন . stripe.rb নামে একটি তৈরি করুন . এই ফাইলে, একটি একক লাইন যোগ করুন যা দেখতে এইরকম দেখাচ্ছে (কিন্তু আপনার গোপন কী প্রতিস্থাপিত হয়েছে):

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

স্ট্রাইপ শংসাপত্র সংরক্ষণ করা

আমাদের শংসাপত্র সংরক্ষণের এই পদ্ধতিটি অবশ্য অনিরাপদ। আমাদের উত্পাদন গোপনীয়তাগুলি প্লেইনটেক্সটে সংরক্ষণ করা উচিত নয়, যেখানে সেগুলি গিট দ্বারা ট্র্যাক করা হয় এবং কোডবেস পড়ার যে কেউ অ্যাক্সেসযোগ্য। সৌভাগ্যবশত, Rails নিরাপদে শংসাপত্র সংরক্ষণ করার একটি উপায় প্রদান করে৷

আপনার শেলে, EDITOR=vim bin/rails credentials:edit চালান এনক্রিপ্ট করতে এবং vim এ শংসাপত্র ফাইল খুলতে। সন্নিবেশ মোডে স্যুইচ করতে আপনার কীবোর্ডে '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

যেহেতু অর্থপ্রদানগুলি তাত্ক্ষণিকভাবে প্রক্রিয়া করা হয় না, তাই আমরা একটি কাজের জন্য অর্থ প্রদান করা হয়েছে তা নির্ধারণ করতে স্ট্রাইপের একটি সফল API প্রতিক্রিয়ার উপর নির্ভর করতে পারি না। পরিবর্তে, পেমেন্ট প্রক্রিয়াকরণ শেষ হলে আমরা পোস্টের অনুরোধ করার জন্য স্ট্রাইপের জন্য আমাদের আবেদনের একটি শেষ পয়েন্ট নির্দেশ করতে পারি। এই প্রক্রিয়াটিকে সাধারণত ওয়েবহুক হিসাবে উল্লেখ করা হয় এবং আসলে এটি শোনার চেয়ে সহজ!

শুরু করতে, 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]

অবশেষে, আপনাকে স্ট্রাইপ ড্যাশবোর্ডেই আপনার স্ট্রাইপ অ্যাকাউন্টটি এই শেষ পয়েন্টের সাথে সংযুক্ত করতে হবে। কারণ আপনি স্ট্রাইপ ড্যাশবোর্ডে একটি URL সরবরাহ করবেন, এটি স্থানীয়ভাবে কাজ করবে না! ওয়েবহুকগুলি সঠিকভাবে কাজ করার জন্য আপনাকে অবশ্যই এটিকে একটি ইন্টারনেট অ্যাক্সেসযোগ্য এন্ডপয়েন্টে স্থাপন করতে হবে৷

স্ট্রাইপ ড্যাশবোর্ডে "ডেভেলপারস"-এ ফিরে যান, কিন্তু এবার, বাম প্যানেলে "ওয়েবহুকস" নির্বাচন করুন৷ "এন্ডপয়েন্ট" বিভাগে, "এন্ডপয়েন্ট যোগ করুন" এ ক্লিক করুন। /webhooks এর সাথে যুক্ত আপনার অ্যাপ্লিকেশন URL সরবরাহ করুন এবং এটি "checkout.session.completed" ইভেন্ট বরাদ্দ করুন।

এবং এটি স্ট্রাইপ ইন্টিগ্রেশনের জন্য! আমাদের মক অ্যাপ্লিকেশানের জন্য শেষ ব্যবহারিক পদক্ষেপ হল সূচী পৃষ্ঠাতে শুধুমাত্র সেই পোস্টগুলি প্রদর্শন করা যার জন্য অর্থ প্রদান করা হয়েছে। এটি সহজেই app/controllers/posts_controller.rb এর সূচী পদ্ধতিতে করা যেতে পারে . এতে পদ্ধতি পরিবর্তন করুন:

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

এখন, ব্যবহারকারীরা একটি পোস্ট তৈরি করতে পারেন, স্ট্রাইপ চেকআউটের মাধ্যমে এটির জন্য অর্থ প্রদান করতে পারেন এবং এটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনের হোমপেজে প্রদর্শিত হতে পারে!

উৎপাদনে স্যুইচ করা হচ্ছে

যেহেতু আপনার ওয়েবহুকগুলি শুধুমাত্র তখনই কাজ করে যখন একটি লাইভ সাইটে স্থাপন করা হয়, তাই এটি স্থাপনের জন্য প্রয়োজনীয় পরিবর্তনগুলি নিয়ে আলোচনা করা সার্থক৷ শুরুর জন্য, আপনার যোগাযোগ অবশ্যই স্ট্রাইপ চেকআউট কাজ করার জন্য HTTPS হোন। আপনি যদি কোনো সমস্যার সম্মুখীন হন, তাহলে Stripe থেকে কিছু ইঙ্গিতের জন্য JavaScript কনসোল দেখুন।

আপনার প্রাথমিক সেটআপে, আপনি স্ট্রাইপের পরীক্ষা কীগুলি ব্যবহার করার একটি ভাল সুযোগ রয়েছে। যদি আপনি করে থাকেন, স্ট্রাইপ ড্যাশবোর্ডের API কী বিভাগটি এরকম কিছু দেখাবে।

স্ট্রাইপ সহ রেলগুলিতে কীভাবে এককালীন ক্রয় বিক্রি করবেন স্ট্রাইপ ড্যাশবোর্ড API কীগুলির একটি স্ক্রিনশট

আপনার উত্পাদন গোপন এবং সর্বজনীন কীগুলি প্রকাশ করতে "পরীক্ষার ডেটা দেখা" এর পাশের টগলটিতে ক্লিক করুন৷ লাইভ ডেটা প্রক্রিয়া করার জন্য আপনার অ্যাপ্লিকেশনের জন্য আপনাকে আগের মতোই Rails শংসাপত্র ম্যানেজার খুলতে হবে এবং পরীক্ষা কীগুলি এর সাথে প্রতিস্থাপন করতে হবে। পরীক্ষার পরিবেশ সহায়ক, যাইহোক, জাল ক্রেডিট কার্ড নম্বর দিয়ে পরীক্ষা লেনদেন চালানোর জন্য। আপনার যদি একাধিক পরিবেশ থাকে বা এটি প্রায়শই স্যুইচ করার পরিকল্পনা করেন, তাহলে ক্রেডেনশিয়াল ম্যানেজারে আরেকটি কী/মান জোড়া তৈরি করা এবং আপনার কোডে গতিশীলভাবে এটি ব্যবহার করা সার্থক৷

উপসংহার

আমরা আমাদের উদাহরণ অ্যাপ্লিকেশন তৈরি করতে অনেক সময় ব্যয় করেছি এবং স্ট্রাইপকে সংহত করতে খুব বেশি সময় ব্যয় করিনি। স্ট্রাইপ চেকআউটের জন্য ধন্যবাদ, আমরা ইউজার ইন্টারফেস সহ অনেক দায়বদ্ধতা কাটিয়ে দিয়েছি, আমাদের প্রচুর কোড সংরক্ষণ করে। অনলাইন মার্কেটপ্লেসে স্ট্রাইপের ব্যাপক গ্রহণের কারণে এটি ব্যবহারকারীদের জন্য একটি ধারাবাহিক অভিজ্ঞতা তৈরি করে। স্ট্রাইপের লক্ষ্য হল ইন্টারনেটের জিডিপি বৃদ্ধি করা, এবং এটি করার জন্য তাদের আপনার মতো অ্যাপ্লিকেশন প্রয়োজন। এই কারণে, তারা সবসময় আরও সহজ খোঁজে আপনার পেমেন্ট প্রক্রিয়া করার উপায়। যদিও স্ট্রাইপ চেকআউট বাস্তবায়ন করা মোটামুটি সহজ, তারা সম্প্রতি আরও দ্রুততর উপায়ের কথা চিন্তা করেছে৷

স্ট্রাইপ পেমেন্ট লিঙ্কগুলি হল স্ট্রাইপের একটি একেবারে নতুন পণ্য যা আমাদের চেকআউট ইন্টিগ্রেশনকে প্রায় অপ্রয়োজনীয় করে তুলতে পারে৷ আমরা যা করেছি তা হল ব্যবহারকারীকে একটি হোস্ট করা চেকআউট পৃষ্ঠায় পুনঃনির্দেশিত করা, এবং একটি সাধারণ লিঙ্ক এটিকে আরও সহজ করার সম্ভাবনা রয়েছে৷ অর্থপ্রদান লিঙ্কগুলি একটি নো-কোড সমাধান যা খুচরা বিক্রেতাদের নির্দেশিত বলে মনে হয় তবে এই ব্যবহারের ক্ষেত্রে সম্ভাব্যভাবে কাজ করতে পারে। যাই হোক না কেন, স্ট্রাইপ চেকআউট এখনও মার্কেটপ্লেসে একটু বেশি নমনীয়তা এবং গ্রহণযোগ্যতার গর্ব করে, তাই এটি সম্পূর্ণরূপে বোঝা গুরুত্বপূর্ণ৷

একটি জিনিস যা অনেক ব্যবসার সাথে লড়াই করে তা হল ট্যাক্স পরিচালনা করা, বিশেষ করে আন্তর্জাতিকভাবে। স্ট্রাইপ সম্প্রতি ব্যবসার জন্য স্বয়ংক্রিয়ভাবে এটি পরিচালনা করার জন্য একটি নতুন বৈশিষ্ট্য চালু করেছে, তবে এটি এখনও বিটাতে রয়েছে। একবার উপলব্ধ হলে, এটি অর্থপ্রদান প্রক্রিয়াকরণের জন্য স্ট্রাইপ ব্যবহারকারীর অ্যাকাউন্টিং বোঝাকে ব্যাপকভাবে হ্রাস করবে!

স্ট্রাইপের ডকুমেন্টেশন এবং রুবি অন রেলে নির্দেশিত বিদ্যমান নিবন্ধগুলি এককালীন কেনাকাটার পরিবর্তে সাবস্ক্রিপশনের দিকে ঝুঁকছে। সাবস্ক্রিপশন একটি ব্যবহারকারী এবং একটি পণ্য সংযুক্ত পুনরাবৃত্তি চার্জ হয়. স্ট্রাইপের শেষে, বাস্তবায়নটি অনেকটা এককালীন কেনাকাটার মতো দেখায়। আবেদনের দিকে, যাইহোক, আমাদের সাবস্ক্রিপশন ম্যানেজমেন্টকে একীভূত করতে হবে, ব্যবহারকারীকে তাদের সাবস্ক্রিপশন পরিচালনা করার অনুমতি দিতে হবে এবং পর্যায়ক্রমে সাবস্ক্রিপশন স্ট্যাটাস চেক করতে হবে। এই নিবন্ধটি এককালীন কেনাকাটার উপর দৃষ্টি নিবদ্ধ করেছে, তবে আপনার সদস্যতা পরিচালনা করার জন্য সম্প্রদায়ে প্রচুর সংস্থান রয়েছে৷


  1. রেলে ফ্ল্যাশ বার্তাগুলি কীভাবে ব্যবহার করবেন

  2. রুবি দিয়ে কীভাবে কমান্ড-লাইন অ্যাপ্লিকেশন (সিএলআই) তৈরি করবেন

  3. রুবি দিয়ে কীভাবে পার্সার তৈরি করবেন

  4. কিভাবে একটি রেল অ্যাপ্লিকেশনে OmniAuth-Twitter ব্যবহার করবেন