Thursday, 11 February 2016

Accepting payments with Stripe in APEX, Part 1

I've just been investigating a payment gateway for an APEX application. I already knew about the recent startup Stripe, and their fees seemed just as good (if not better) than the other well-known contenders - I figured there would be a good place to start.

Now, I haven't actually worked with the others, but so far, I'm very impressed with the system/API available. From my little bit of research, all the card information will be stored on Stripe's servers, so we need not deal with storing and encrypting customers card information. With that, we are left with this general workflow:

  1. Include a form for customers to enter there card information
  2. The form gets submitted to Stripe's servers
  3. Returned is a token. We use this to then complete the charge

For this first part, I'll be focusing on the form. In particular, Stripe provides a form for us that we can re-use. Check out the documentation on the form here - https://stripe.com/docs/tutorials/checkout. Keep in mind, you can just as easily develop your own form if you have your own design in mind.

The basic example (for a form) they give on the docs is:

<form action="" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="[redacted]"
    data-amount="2000"
    data-name="Demo Site"
    data-description="2 widgets"
    data-image=""
    data-locale="auto">
  </script>
</form>

Side note: In your account, you can retrieve your API tokens (and test tokens) from: https://dashboard.stripe.com/account/apikeys

So, if you add that to a static region on your page, you will see a nice checkout button and form:




What would then happen after submitting the payment information, is the form would get submitted, with some additional parameters being sent in the POST request. Being on APEX, this won't do since the whole page is wrapped around a form - resulting in this being an embedded form (unsupported).

Looking at the documentation some more, they have a more advanced example giving us more control over what happens once the Pay button is selected.

We still need to leave a reference to checkout.js on our page, so for now this can live in our region where the pay button will live. The next part will be to add a regular APEX button to our region - with the action being Defined by a Dynamic Action.

Then, we need a dynamic action for when the button is clicked - with the true action being to execute a block of JavaScript code (the handler could be set up on page load, but just chucked it in one spot for simplicity)

var handler = StripeCheckout.configure({
    key: '[redacted]',
    locale: 'auto',
    token: function(token) {
        console.log(token);
    }
});

handler.open({
    name: 'Demo Site',
    description: '2 widgets',
    currency: "aud",
    amount: 2000
});


So, now with our advanced implementation, we are left with much the same form:




(This is just test card information supplied with by Stripe - see: https://stripe.com/docs/testing)

So, when the user submits the payment information, the token function will be called. With that we are returned with the following information:


Further, if we look in our dashboard on Stripe for the account, we should see this activity logged:



So, with that information, you would then want to initiate a request to a PL/SQL process to make the actual charge to the customers card. A post for another day.

6 comments:

  1. Yes - my recommendation is to write a stored procedure to handle the post/get and bind to it from Apex. It is easier to manage. Either way you go payment sites use HTTPS so you will need to register the SSL certificate in your Oracle DB and insure your user id has ACL permissions to the url (then you can post/get all you want with the proper credentials)

    ReplyDelete
  2. I integrated a lot of payment systems in the past, starting at HTMLDB 1.6. My recommendation is the same as Jb Williams to use APEX as a front end only, do everything in a dedicated package, including all the calls, url_redirects, url_http, etc.

    ReplyDelete
    Replies
    1. Hello Learco, I just saw your reply to the post. I am really new in this world of Payments online; Do you have some blog where you have something based in your knowledge about online payment?
      This is my personal email: geova.kelly.c@gmail.com thanks in advance!

      Delete
    2. Hi Learco, I'm facing difficulties to integrate payment gateway with oracle apex 5.1. I would be grateful to you if you could help me to implement this. How can I reach you to talk details. My email address is here . mahmud.munir@gmail.com. Thanks in advance.

      Delete
  3. Hi learco Brizzi can you share your work i am quite new to this and i am trying the same.
    my mail : imarcofoxx@gmail.com

    ReplyDelete
  4. مقایسه اپلیکیشن های پرداخت
    بهترین اپلیکیشن پرداخت را باید کاربران حوزه فین تک مشخص نمایند ولی از بابت مقایسه اپلیکیشن‌های می توان نتیجه گیری کرد که کاربران به اپلیکیشن ۷۲۴ بیشترین امتیاز را در کافه بازار داده‌اند
    استعلام خلافی قبضینو
    و همچنین حجم کم اپلیکیشن ۷۲۴ یکی از ویژگی‌های آن است. اما از نظر امکانات اپلیکیشن تاپ و آپ در وضعیت بهتری نسبت به بقیه هستند. خدماتی همچون خرید طرح ترافیک فقط توسط اپر سبد محصولات خود اضافه نکرده، در حالی که اپلیکیشن آپ خدمات خوبی در این حوزه ارائه می‌کند. از سوی دیگر اپلیکیشن ۷۸۰ نسبت به بقیه اپلیکیشن‌ها از خدمات باشگاه مشتریان بهتری برخوردار است و تقریبا در همه زمان‌ها کمپین جایزه و قرعه کشی برگزار می‌کند.
    استعلام قبض قبضینو
    هیچ یک از اپلیکیشن های پرداخت معرفی شده امکان استعلام خلافی جرایم رانندگی را ندارد و برخی نیز بعدا اقدام به پرداخت خلافی کرده اند.
    قبضینو
    سامانه پرداخت قبض قبضیو
    تیم توسعه و مدیریت سامانه پرداخت قبضینو که خود چند سالی در حوزه فین تک و پرداخت خرد و پرداخت آنلاین قبض و استعلام خلافی تجربه عملیاتی مستقیم دارند، با توجه به شرایط بازار و نیاز کنونی آن، اقدام
    پرداخت خلافی قبضینو
    به طراحی یک محصول جدید با نام تجاری قبضینو کردند. قبضینو که ازمحصولات گروه آیان است، به طور تخصصی در حوزه پرداخت‌های دوره‌ای خرد فعالیت می‌کند و اولین شاخه از محصولات آن، پرداخت قبض است. علی رغم گسترش زیرساخت‌های پرداخت در طی سال‌های اخیر متاسفانه در حوزه مدیریت و پرداخت قبض همچنان چالش‌های فراوانی وجود دارد. دو چالش اصلی موجود در این حوزه به شرح زیر است:
    پرداخت قبض قبضینو
    نیاز به قبض کاغذی برای پرداخت
    تعداد زیاد قبض پرداختی در هر دوره
    متاسفانه برای چالش‌های اشاره شده، راه‌حلی جامع توسط اپلیکیشن‌های معرفی شده در این مقاله ارائه نشده است. از همین رو گروه آیان با تمرکز بر روی این دو چالش تصمیم گرفت با توسعه اپلیکیشن قبضینو هر دو مورد را به صورت اصولی حل کند. در مورد مساله اول قبضینو به دلیل اینکه قابلیت استعلام اتوماتیک همه قبوض از جمله قبض آب، برق، تلفن ثابت، موبایل، خلافی و گاز را دارد، دیگر نیاز قبض کاغذی را حذف می کند. کاربران یکبار اطلاعات قبض خود را در اپلیکیشن و یا سایت قبضینو وارد کرده و از دفعات بعدی خود سیستم به صورت خودکار اقدام به استعلام و جمع آوری اطلاعات قبوض کاربران می کند. به این ترتیب کاربران در اولین فرصت از صادر شدن قبض‌های جدید خود مطلع می شوند.
    ریز خلافی قبضینو

    از سوی دیگر به دلیل زیرساخت استعلامی که فراهم شده، قبض‌های کاربران پس از استعلام در قالب یک صورت حساب به او نمایش داده می شوند و کاربر می تواند به صورت تجمعی قبض‌های خود را پرداخت کند. به عبارتی به جای آنکه در هر ماه کاربران مجبور به پرداخت تعداد زیادی قبض باشند، با استفاده از قبضینو می توانند قبض‌های خود را به صورت جمع شده و با یک پرداخت تسویه کنند. قبضینو با ارسال اعلان در زمان‌های مقرر، کاربران خود را از قبض‌های جدید صادر شده مطلع می کند.

    از دیگر امکانات اپلیکیشن قبضیو امکان استعلام خلافی خودرو و مشاهده ریز خلافی و جرایم رانندگی و امکان پرداخت قبض جریمه است.

    در جهت راحتی کاربران، خدمات پرداخت اینترنتی قبضینو هم به صورت وبی و هم به صورت اپلیکیشن موبایل در نسخه‌های اندروید و ios در اختیار کاربران است. از اقدامات آینده قبضینو ارائه نرم افزار پرداخت با NFC و استعلام قبض همراه اول است

    ReplyDelete