দোকানে অনলাইন পিকআপ কিনুন: বোনজোর মিল - পার্ট 3 - পেমেন্ট প্রসেসরের সাথে একীকরণ

1। পরিচিতি

53003251caaf2be5.png8826bd8cb0c0f1c7.png

শেষ আপডেট: 2021-09-13

পেমেন্ট সংগ্রহ!

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

fe0c6754fb69d708.png

কি একটি ভাল পেমেন্ট অভিজ্ঞতা তোলে?

একটি ভাল অর্থপ্রদানের অভিজ্ঞতা হল যেখানে ব্যবহারকারীরা তাদের অভ্যস্ত উপায়ে অর্থ প্রদান করতে পারে।

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

একবার একজন ব্যবহারকারী পেমেন্ট ফ্লো সম্পূর্ণ করলে, আপনি তাদের জানাতে চান যে আপনি সফলভাবে তাদের পেমেন্ট পেয়েছেন। বেশিরভাগ পেমেন্ট প্রসেসরের মধ্যে সাফল্য বা ব্যর্থতার কলব্যাক অন্তর্ভুক্ত থাকে যা অর্থপ্রদানের প্রবাহ সম্পূর্ণ হওয়ার পরে আপনার পছন্দের একটি URL-এ একটি HTTP অনুরোধ পাঠায়।

আপনি কি নির্মাণ করবেন

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

এই কোডল্যাবে, আপনার অ্যাপ হবে

  • স্ট্রাইপ পেমেন্ট গেটওয়ের সাথে একীভূত করুন
  • একজন ব্যবহারকারীকে কার্টের মূল্যের উপর ভিত্তি করে অর্থপ্রবাহ সম্পূর্ণ করার অনুমতি দিন
  • ব্যবহারকারীকে অর্থপ্রদানের অবস্থা জানাতে কথোপকথন পৃষ্ঠে একটি বিজ্ঞপ্তি পাঠান

ba08a4d2f8c09c0e.png

আপনি কি করবেন

  • স্ট্রাইপ পেমেন্ট প্রসেসরের সাথে একীভূত করুন।
  • একটি পেমেন্ট সেশন শুরু করার জন্য স্ট্রাইপকে একটি অনুরোধ পাঠান।
  • স্ট্রাইপ থেকে অর্থপ্রদানের সাফল্য বা ব্যর্থতার প্রতিক্রিয়াগুলি পরিচালনা করুন।

আপনি কি প্রয়োজন হবে

  • একটি GCP প্রকল্প যা ব্যবসা বার্তাগুলির সাথে ব্যবহারের জন্য নিবন্ধিত এবং অনুমোদিত৷
  • কিভাবে নির্দেশাবলীর জন্য আমাদের ডেভেলপার সাইট দেখুন
  • 5 বা তার উপরে সংস্করণ সহ একটি Android ডিভাইস বা Google মানচিত্র অ্যাপ সহ একটি iOS ডিভাইস৷
  • ওয়েব অ্যাপ্লিকেশন প্রোগ্রামিং অভিজ্ঞতা
  • একটি ইন্টারনেট সংযোগ!

2. নির্ভরতা যোগ করা

Requiments.txt আপডেট করা হচ্ছে

যেহেতু আমরা স্ট্রাইপ পেমেন্ট প্রসেসরের সাথে একীভূত করব, আমরা স্ট্রাইপ পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারি। নির্ভরতার সর্বশেষ সংস্করণ পেতে একটি সংস্করণ ছাড়া requirements.txt এ stripe যোগ করুন।

স্ট্রাইপ পাইথন মডিউল অন্তর্ভুক্ত করার জন্য Google ক্লাউড অ্যাপ ইঞ্জিন পাইথন রানটাইমের জন্য এটি প্রয়োজনীয়।

requirements.txt

...
stripe
...

bopis/views.py প্রস্তুত করা হচ্ছে

bopis/views.py-এর শীর্ষে, django.shortcuts থেকে render এবং JsonResponse থেকে django.shortcuts django.http । উপরন্তু, স্ট্রাইপ পাইথন ক্লায়েন্ট লাইব্রেরিতে কল সমর্থন করার জন্য আমাদের stripe আমদানি করতে হবে।

...
from django.shortcuts import render
from django.http import JsonResponse
import stripe
...

3. স্ট্রাইপ সঙ্গে কাজ

Stripe.com এ একটি অ্যাকাউন্ট তৈরি করুন

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

6731d123c56feb67.png

একবার আপনি একটি অ্যাকাউন্ট তৈরি করে লগ ইন করলে, আপনি একটি ড্যাশবোর্ড দেখতে পাবেন যা এইরকম দেখাচ্ছে৷

6d9d165d2d1fbb8c.png

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

bopis/views.py আপডেট করুন

আপনার অ্যাপ্লিকেশানের উভয় সেটের কী প্রয়োজন, তাই views.py-এ সেগুলি আপডেট করুন৷

আপনি গোপন কীটি সরাসরি stripe.api_key বৈশিষ্ট্যে সেট করতে পারেন এবং এটিকে স্ট্রাইপ বিকাশকারী ড্যাশবোর্ডে পাওয়া গোপন কীটির মান নির্ধারণ করতে পারেন। তারপর STRIPE_PUBLIC_KEY নামে একটি গ্লোবাল ভেরিয়েবল তৈরি করুন এবং এটি প্রকাশযোগ্য কীতে সেট করুন।

অতিরিক্তভাবে, স্ট্রাইপকে আপনার পরিচালনা করা একটি ওয়েব পৃষ্ঠাতে পুনঃনির্দেশিত করতে হবে, তাই আসুন আপনার অ্যাপ্লিকেশনের সর্বজনীনভাবে পৌঁছানো যোগ্য ডোমেন অন্তর্ভুক্ত করার জন্য একটি অতিরিক্ত গ্লোবাল ভেরিয়েবল তৈরি করি।

এই পরিবর্তনের শেষে, আপনার কাছে এরকম কিছু থাকবে:

stripe.api_key = 'sk_test_abcde-12345'
STRIPE_PUBLIC_KEY = 'pk_test_edcba-54321'
YOUR_DOMAIN = 'https://<GCP_PROJECT_ID>.appspot.com'

এবং স্ট্রাইপ সেটআপের জন্য আপনাকে যা করতে হবে।

4. চেকআউট কার্যকারিতা

শপিং কার্টের মোট মূল্য ফাংশন আপডেট করুন

বর্তমানে, send_shopping_cart_total_price ফাংশন শুধুমাত্র শপিং কার্টের মূল্য উল্লেখ করে একটি বার্তা পাঠায়। চেকআউট পৃষ্ঠায় একটি URL খুলতে একটি প্রস্তাবিত পদক্ষেপ যোগ করা যাক।

def send_shopping_cart_total_price(conversation_id):
  """Sends shopping cart price to the user through Business Messages.

  Args:
    conversation_id (str): The unique id for this user and agent.
  """
  cart_price = get_cart_price(conversation_id)

  message_obj = BusinessMessagesMessage(
      messageId=str(uuid.uuid4().int),
      representative=BOT_REPRESENTATIVE,
      text=f'Your cart\'s total price is ${cart_price}.',
      suggestions=[
          BusinessMessagesSuggestion(
              action=BusinessMessagesSuggestedAction(
                  text='Checkout',
                  postbackData='checkout',
                  openUrlAction=BusinessMessagesOpenUrlAction(
                      url=f'{YOUR_DOMAIN}/checkout/{conversation_id}'))),
      ]
    )

  send_message(message_obj, conversation_id)

যখন ব্যবহারকারী এই প্রস্তাবিত অ্যাকশনে ট্যাপ করে, তখন তাদের একটি ওয়েবপৃষ্ঠায় নির্দেশিত করা হয় যা তাদের মোট মূল্য এবং স্ট্রাইপের মাধ্যমে অর্থপ্রদান শুরু করার জন্য একটি বোতাম দেখায়।

আসুন একটি সাধারণ ওয়েবপেজ তৈরি করি যা এই প্রবাহকে সমর্থন করবে।

প্রোজেক্ট সোর্স কোডে, bopis নামের ডিরেক্টরিটি খুঁজুন। bopis-এর মধ্যে টেমপ্লেট নামে একটি নতুন ডিরেক্টরি তৈরি করুন, এবং templates মধ্যে bopis নামে আরেকটি ডিরেক্টরি তৈরি করুন। টেমপ্লেট ডিরেক্টরির মধ্যে অ্যাপের নাম নির্দিষ্ট করার জন্য এটি একটি জ্যাঙ্গো ডিজাইন প্যাটার্ন। এটি জ্যাঙ্গো অ্যাপের মধ্যে টেমপ্লেটের বিভ্রান্তি কমাতে সাহায্য করে।

আপনার এখন bopis/templates/bopis/ এ একটি পাথ সহ একটি ডিরেক্টরি থাকা উচিত। ওয়েব পেজ পরিবেশন করার জন্য আপনি এই ডিরেক্টরিতে HTML ফাইল তৈরি করতে পারেন। জ্যাঙ্গো এগুলিকে ব্রাউজারে রেন্ডার করা টেমপ্লেট হিসাবে উল্লেখ করে। আসুন checkout.html দিয়ে শুরু করা যাক।

এই ডিরেক্টরিতে, checkout.html তৈরি করুন। নিম্নলিখিত কোড স্নিপেট একটি চেকআউট বোতাম এবং কার্টের মূল্য প্রদর্শন করে। স্ট্রাইপ চেকআউট শুরু করার জন্য এটি জাভাস্ক্রিপ্টও অন্তর্ভুক্ত করে।

{% load static %}

<!DOCTYPE html>
<html>
  <head>
    <title>Purchase from Bonjour Meal</title>

    <script src="https://js.stripe.com/v3/"></script>
    <style>
      .description{
        font-size: 4em;
      }
      button {
        color: red;
        padding: 40px;
        font-size: 4em;
      }
    </style>
  </head>
  <body>
    <section>
      <img
        src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
        alt="Bonjour Meal Restaurant"
      />
      <div class="product">
        <div class="description">
          <h3>Your Bonjour Meal Total</h3>
          <h5>${{cart_price}}</h5>
        </div>
      </div>
      <button type="button" id="checkout-button">Checkout</button>
    </section>
  </body>
  <script type="text/javascript">
    // Create an instance of the Stripe object with your publishable API key
    var stripe = Stripe("{{stripe_public_key}}");
    var checkoutButton = document.getElementById("checkout-button");

    checkoutButton.addEventListener("click", function () {
      fetch("/create-checkout-session/{{conversation_id}}", {
        method: "POST",
      })
        .then(function (response) {
          return response.json();
        })
        .then(function (session) {
          return stripe.redirectToCheckout({ sessionId: session.id });
        })
        .then(function (result) {
          // If redirectToCheckout fails due to a browser or network
          // error, you should display the localized error message to your
          // customer using error.message.
          if (result.error) {
            alert(result.error.message);
          }
        })
        .catch(function (error) {
          console.error("Error:", error);
        });
    });
  </script>
</html>

যখন URL অনুরোধ করা হয় তখন আমাদের এই ওয়েবপৃষ্ঠার একটি রুট প্রয়োজন৷ চেকআউট সাজেস্টেডঅ্যাকশনে একটি openUrlAction মান সেট করা আছে {YOUR_DOMAIN}/checkout/{conversation_id} । এটি https://<GCP-Project-ID>.appspot.com/checkout/abc123-cba321-abc123-cba321 মত কিছুতে অনুবাদ করে। এই রুটটি তৈরি করার আগে, আসুন HTML টেমপ্লেটের মধ্যে পাওয়া জাভাস্ক্রিপ্টটি পর্যালোচনা করি।

...
  <script type="text/javascript">
    // Create an instance of the Stripe object with your publishable API key
    var stripe = Stripe("{{stripe_public_key}}");
    var checkoutButton = document.getElementById("checkout-button");

    checkoutButton.addEventListener("click", function () {
      fetch("/create-checkout-session/{{conversation_id}}", {
        method: "POST",
      })
        .then(function (response) {
          return response.json();
        })
        .then(function (session) {
          return stripe.redirectToCheckout({ sessionId: session.id });
        })
        .then(function (result) {
          // If redirectToCheckout fails due to a browser or network
          // error, you should display the localized error message to your
          // customer using error.message.
          if (result.error) {
            alert(result.error.message);
          }
        })
        .catch(function (error) {
          console.error("Error:", error);
        });
    });
  </script>
...

চলুন একসাথে উপরের কোড স্নিপেট মাধ্যমে যান.

  1. প্রথমে এটি একটি পাবলিক কী দিয়ে একটি স্ট্রাইপ সত্তা তৈরি করে যা ভিউ ফাংশন থেকে প্রসঙ্গের মাধ্যমে পাস করা হয়, আরেকটি জ্যাঙ্গো প্যারাডাইম।
  2. তারপর, স্নিপেটটি আইডি checkout-button সহ পৃষ্ঠায় একটি উপাদানের সন্ধান করে।
  3. একটি ঘটনা শ্রোতা যে উপাদান যোগ করা হয়.

এই ইভেন্ট শ্রোতাকে ট্রিগার করা হবে যখন একজন ব্যবহারকারী এই বোতামটিতে ক্লিক বা আলতো চাপবেন যা URL এর মাধ্যমে আপনার নির্দিষ্ট করা ওয়েব সার্ভারে একটি POST অনুরোধ শুরু করে: {YOUR_DOMAIN}/create-checkout-session/{conversation_id}.

আপনি নীচের স্নিপেটগুলিতে ওয়েব সার্ভারের যুক্তি দেখতে পারেন৷ ব্যবহারকারী যখন " checkout-button " আইডি দিয়ে বোতামে ট্যাপ করে তখন আমরা আশা করতে পারি এটি একটি স্ট্রাইপ সেশন আইডি ফেরত দেবে যা কার্টের মূল্য নির্দিষ্ট করে স্ট্রাইপ API ব্যবহার করে তৈরি করা হয়েছে।

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

চেকআউট পৃষ্ঠাকে সমর্থন করতে এবং সেশন আইডি তৈরি করতে urlpatterns অ্যারেতে নতুন পাথ যোগ করা শুরু করা যাক। urls.py-এ urlpatterns অ্যারেতে নিম্নলিখিত যোগ করুন।

... 
path('checkout/<str:conversation_id>', bopis_views.payment_checkout),
path('create-checkout-session/<str:conversation_id>', bopis_views.create_checkout_session),
...

তারপর checkout.html টেমপ্লেট ফেরত দিতে এবং স্ট্রাইপ চেকআউট সেশন তৈরি করতে views.py-এ ভিউ ফাংশন তৈরি করা যাক।

... 

def payment_checkout(request, conversation_id):
  """Sends the user to a payment confirmation page before the payment portal.

  Args:
    request (HttpRequest): Incoming Django request object
    conversation_id (str): The unique id for this user and agent.

  Returns:
    Obj (HttpResponse): Returns an HTTPResponse to the browser
  """

  cart_price = get_cart_price(conversation_id)
  context = {'conversation_id': conversation_id,
             'stripe_public_key': STRIPE_PUBLIC_KEY,
             'cart_price': cart_price
            }
  return render(request, 'bopis/checkout.html', context)


@csrf_exempt
def create_checkout_session(request, conversation_id):
  """Creates a Stripe session to start a payment from the conversation.

  Args:
    request (HttpRequest): Incoming Django request object
    conversation_id (str): The unique id for this user and agent.

  Returns:
    Obj (HttpResponse): Returns an HTTPResponse to the browser
  """
  cart_price = get_cart_price(conversation_id)
  try:
    checkout_session = stripe.checkout.Session.create(
        payment_method_types=['card'],
        line_items=[
            {
                'price_data': {
                    'currency': 'usd',
                    'unit_amount': int(cart_price*100),
                    'product_data': {
                        'name': 'Bonjour Meal Checkout',
                        'images': ['https://storage.googleapis.com/bonjour-rail.appspot.com/apple-walnut-salad.png'],
                    },
                },
                'quantity': 1,
            },
        ],
        mode='payment',
        success_url=YOUR_DOMAIN + '/success/' + conversation_id,
        cancel_url=YOUR_DOMAIN + '/cancel/' + conversation_id,
    )

    return JsonResponse({
        'id': checkout_session.id
    })

  except Exception as e:
    # Handle exceptions according to your payment processor's documentation
    # https://stripe.com/docs/api/errors/handling?lang=python
    return HttpResponse(e)

...

এই দুটি ফাংশনই ব্যবহারকারীর সাথে শপিং কার্ট সংযুক্ত করতে এবং তারপর স্ট্রাইপের মূল্য নির্ধারণ করতে ব্যবহারকারীর কাছ থেকে চার্জ করা উচিত বলে কথোপকথন_আইডি ব্যবহার করে।

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

প্রবাহের দ্বিতীয়ার্ধটি হল কিভাবে আমরা ব্যবহারকারীর পেমেন্ট সংক্রান্ত স্ট্রাইপ থেকে প্রতিক্রিয়া পাওয়ার পরে ব্যবহারকারীকে কথোপকথনে ফিরিয়ে আনি।

5. স্ট্রাইপ প্রতিক্রিয়া

যখন একজন ব্যবহারকারী আপনার অর্থপ্রদানের প্রবাহে নিযুক্ত হন, তখন তারা হয় সফল হয় বা অর্থপ্রদান সম্পূর্ণ করতে ব্যর্থ হয়। create_checkout_session ফাংশনে, আমরা একটি success_url এবং একটি cancel_url সংজ্ঞায়িত করেছি। স্ট্রাইপ অর্থপ্রদানের অবস্থার উপর নির্ভর করে এই দুটি URL এর মধ্যে একটিতে পুনঃনির্দেশিত করবে। urls.py-এ এই দুটি রুট সংজ্ঞায়িত করা যাক এবং তারপর এই দুটি সম্ভাব্য ফ্লোকে সমর্থন করার জন্য bopis/views.py-এ দুটি ভিউ ফাংশন যোগ করুন।

urls.py ফাইলে এই লাইন যোগ করুন।

... 
    path('success/<str:conversation_id>', bopis_views.payment_success),
    path('cancel/<str:conversation_id>', bopis_views.payment_cancel),
...

এবং সংশ্লিষ্ট মতামত এই মত দেখাবে:

... 

def payment_success(request, conversation_id):
  """Sends a notification to the user prompting them back into the conversation.

  Args:
    request (HttpRequest): Incoming Django request object
    conversation_id (str): The unique id for this user and agent.

  Returns:
    Obj (HttpResponse): Returns an HTTPResponse to the browser
  """
  message_obj = BusinessMessagesMessage(
      messageId=str(uuid.uuid4().int),
      representative=BOT_REPRESENTATIVE,
      suggestions=[
          BusinessMessagesSuggestion(
              reply=BusinessMessagesSuggestedReply(
                  text='Check on order', postbackData='check-order')),
      ],
      text='Awesome it looks like we\'ve received your payment.')

  send_message(message_obj, conversation_id)

  return render(request, 'bopis/success.html')


def payment_cancel(request, conversation_id):
  """Sends a notification to the user prompting them back into the conversation.

  Args:
    request (HttpRequest): Incoming Django request object
    conversation_id (str): The unique id for this user and agent.

  Returns:
    Obj (HttpResponse): Returns an HTTPResponse to the browser
  """
  message_obj = BusinessMessagesMessage(
      messageId=str(uuid.uuid4().int),
      representative=BOT_REPRESENTATIVE,
      suggestions=[
          BusinessMessagesSuggestion(
              action=BusinessMessagesSuggestedAction(
                  text='Checkout',
                  postbackData='checkout',
                  openUrlAction=BusinessMessagesOpenUrlAction(
                      url=f'{YOUR_DOMAIN}/checkout/{conversation_id}'))),
      ],
      text='It looks like there was a problem with checkout. Try again?')

  send_message(message_obj, conversation_id)

  return render(request, 'bopis/cancel.html')

...

আপনি DOMAIN ধ্রুবক-এ যেমন উল্লেখ করেছেন স্ট্রাইপ ডোমেনে আবার পুনঃনির্দেশ করে, যার মানে আপনাকে একটি টেমপ্লেটের মাধ্যমে একটি HTML প্রতিক্রিয়া রেন্ডার করতে হবে বা ওয়েবসাইটটি খুব খালি দেখাবে। আসুন checkout.html সহ bopis/templates/bopis/ ডিরেক্টরিতে দুটি সাধারণ HTML ফাইল তৈরি করি।

bm-django-echo-bot/bopis/ templates/bopis/success.html

{% load static %}

<html>
<head>
  <title>Business Messages Payment Integration Sample!</title>
  <style>
    p{
      font-size: 4em;
    }
  </style>
</head>
<body>
  <section>

    <p>
      Checkout succeeded - We appreciate your business!
      <br/><br/>
      For support related questions, please email
      <a href="mailto:bm-support@google.com">bm-support@google.com</a>.

    </p>
  </section>
</body>
</html>

bm-django-echo-bot/bopis/ templates/bopis/cancel.html

{% load static %}

<html>
<head>
  <title>Checkout canceled</title>
  <style>
    p{
      font-size: 4em;
    }
    </style>
</head>
<body>
  <section>
    <p>Checkout canceled - Forgot to add something to your cart? Shop around then come back to pay!</p>
  </section>
</body>
</html>

এই দুটি টেমপ্লেটের সাহায্যে, একজন ব্যবহারকারী যিনি আপনার স্ট্রাইপ ইন্টিগ্রেশনের মাধ্যমে একটি অর্থপ্রবাহ সম্পূর্ণ করেন, তাকে উপযুক্ত URL-এ পুনঃনির্দেশিত করা হয় এবং সংশ্লিষ্ট টেমপ্লেটের সাথে উপস্থাপন করা হয়। তারা ব্যবসায়িক বার্তাগুলির মাধ্যমে একটি বার্তাও পাবে যাতে তারা কথোপকথনে ফিরে যেতে পারে।

6. পেমেন্ট পান!

অভিনন্দন, আপনি সফলভাবে আপনার ব্যবসা বার্তা এজেন্টের সাথে একটি পেমেন্ট প্রসেসর সংহত করেছেন!

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

d6d80cf9c9fc621.png44db8d6441dce4c5.png

এরপর কি?

আপনি প্রস্তুত হলে, ব্যবসা বার্তাগুলিতে আপনি অর্জন করতে পারেন এমন আরও জটিল মিথস্ক্রিয়া সম্পর্কে জানতে নিম্নলিখিত বিষয়গুলির মধ্যে কয়েকটি পরীক্ষা করুন:

রেফারেন্স ডক্স