Attaching Square Reader SDK Payment to a Square Order

Hi everyone!

I’m trying to integrate the Square Reader SDK - Android, into my attended Kiosk application. I’ve come across a couple of hurdles along the way and need some clarifications.

  1. Since the Reader SDK isn’t allowed in rooted devices, what kind of root detection should we utilize to ensure the app blocks any rooted devices? I’m currently thinking of using “RootBeer”. Link: GitHub - scottyab/rootbeer: Simple to use root checking Android library and sample app
    Will this suffice?

  2. My kiosk application will be using an API which uses Square Java (Maven-based) API to place orders to the Square end. The merchants should see the orders placed via the kiosk application on their Square application. But, the Reader SDK doesn’t allow itemized transactions. So, how can I attach a payment done via the Reader SDK to a Square Order placed by the Square Java SDK? Or, is there a way to pass a tender or similar mechanism to mark the order as “Paid” once we accept a payment via the Reader SDK, since until we attach a payment to the order, they don’t get displayed to the merchant?

Please assist me with these. Thank you.

:wave: I’m Square Dev AI, here to help answer your question!
Based on the information you’ve provided, the following documentation will help answer your question:

Additional Documentation

Reader SDK Quickstart
Reader SDK Overview
Build on Android: Point of Sale API

If this documentation helped you find a solution, please check the box indicating that this reply solves the problem.
Otherwise one of our Developer Advocates will provide additional assistance shortly.

  1. The Reader SDK indeed doesn’t support rooted devices. While Square doesn’t provide a specific recommendation for root detection libraries, using a well-maintained and popular library like RootBeer should generally be a good approach. However, it’s important to note that no root detection method can guarantee 100% accuracy due to the nature of rooting.

  2. The Reader SDK doesn’t support itemized transactions, meaning transactions processed with the Reader SDK appear on buyer receipts and in the Seller Dashboard with an optional note and the total transaction amount. Unfortunately, there’s no direct way to attach a payment made via the Reader SDK to a Square Order placed by the Square Java SDK. The Reader SDK transactions are attributed to the authorized location but cannot be tied to a specific order.

This answer was reviewed by @Bryan-Square.

Hi @Bryan-Square, thanks for the response. In that case, I’m fine with keeping the payments made via the Reader SDK and the orders made via the Java SDK separate. I want to know how can I mark the order placed via the Java SDK as paid with a custom tender. Yes, in this case I won’t be able to attach the actual payment but at least I need to close the order with a payment so it appears paid on the seller dashboard. How can I achieve this?

Since Reader SDK doesn’t support orders created with the Orders API you’ll have to complete them by making an external payment. This will unfortunately cause a double entry on the Square account. :slightly_smiling_face:

Thanks for the clarifications.

Hi @Bryan-Square, I have some follow-ups.

  1. For the transactions made through Reader SDK, do you automatically create an Order for it as well? Or does it stay as only a Transaction?

  2. My final requirement is to use your Java SDK to place orders to the Square POS and take Payments via a Square Device. I need to attach the order created via the Java SDK to the Square Payment. We’re clear that Reader SDK does not allow this.
    i. Does the Point of Sale API (Build on Android: Point of Sale API) allow attaching Square Orders to Square Payments?
    ii. Does the Terminal API (Terminal API Overview) allow attaching Square Orders to Square Payments?

Please assist with these queries.

At this time the only in person payment option that will allow you to create an order and pay for it in person on Square hardware is the Terminal API in the US. You can create the order with our SDK then pass that order to the Terminal for processing payments. :slightly_smiling_face:

1 Like