FAQ

1. What OS version and API level should I use for Android or Android Commerce Application development?

See Project Setup.

2. Can I send multiple merchandises at once to the payment app?

See Adding/Display Items Quickly.

3. Is tokenization a.k.a card on file supported?

Yes. Please review the payment APIs for more information.

4. Is EMV pre-authorization supported, e.g. for bar tabs?

Yes, see perform-preauth.

5. Is it possible to develop a POS application using Kotlin?

Yes, the PSDK library on Android supports both Java and Kotlin.

6. What is the difference between Verifone SDK and Payment SDK?

VerifoneSDK in Verifone Developer Portal Document is an Android plug-in for the application development on Engage. The Payment SDK is the global SDK used by internal and external developers to communicate with Verifone terminals.

7. Does the Navigator (Accessibility Feature) follow all the AID guidelines?

Yes. The Verifone Navigator earned certification for accessibility and usability from the Royal National Institute of Blind People, a United Kingdom-based charity. Further, Navigator meets PCI requirements – an information security standard mandated and administered by the Payment Card Industry Security Standards Council to reduce credit card fraud.

8. What is a CP application?

A CP application is a Commerce Platform application that uses Commerce Platform Framework to implement a loyalty requirement. CP applications can be loyalty applications, APMs, applications implementing dynamic currency change, etc.

9. How do I query for SAF transactions?

Please reference reports.

10. What is the difference between handleHostAuthorizationEvent and handleHostFinalizeTransactionEvent?

handleHostAuthorizationEvent: The actual host processing logic needs to be done here (send/receive) and the response result needs to be sent to the payment app for further processing.

handleHostFinalizeTransactionEvent: This is called at the end of the transaction to complete your transaction based on the transaction processing result of the payment app. For example, after the host authorized, if the payment app decided to decline the transaction for XYZ reason, your reversal logic would be here based on your solution requirement, and possibly the disconnect logic for payment host to give a few examples.

How should I handle it correctly?

You use the handleHostAuthorizationEvent for any transaction that should go to the Host. You use the handleHostFinalizeTransactionEvent if the transaction declines after the host decision. For example, in the case of signature decline or failure in 2nd Gen AC (in the case of non-quick Chip).

Couldn’t we just send the first request to the host since it has already approved it?

Typically, yes.

Is there something wrong with the way I handle payments?

In cases where there is no need to pass data back to the Host in the handleHostFinalizeTransactionEvent, you can simply call:

transactionManager.respondToHostFinalizeTransaction(
        "123456",
        HostDecisionType.HOST_AUTHORIZED,
        emvData,
        Decimal.valueOf(authAmount)
);

This will allow PSDK to proceed with finalizing the transaction.

11. Can I enable / disable the tip during the transaction?

The parameter below must be enabled if the POS wants to pass a tip. If the POS wants the payment app to never show a tip UI, the POS should pass $0 when it wants to do a transaction with no tip.

Configuration: com.verifone/Merchant.1/TipEnabled

12. How do I enable the detailed notification in the transaction flow?

The parameter Terminal.1/PosRequiresNotification has been deprecated and is no longer needed to enable detailed notification.

13. How can I configure the APN?

You need to raise a Jira Service Desk (JSD) ticket case with the parameters to be set. Verifone will provide an APK/IMG file to be installed on the device to set the APN configuration.

14. Is the Basket Manager mandatory?

No.

15. Define the following SDK packages:

  • Carbon SDK: This is a Developer SDK.

  • Payment SDK: This is the latest SDK which will be used in future projects.

  • Developer SDK: Legacy. This is the old SDK. It supports only Android. The new applications developed by third parties will be using PSDK.

  • Verifone SDK / Commerce SDK: This is a plugin for Android Studio to develop Commerce Applications on Engage. This is not supported for Android application development.

16. How do I request for the developer boards?

These are for Verifone internal and are orderable. Contact the Verifone technical support.

17. PSDK requires some services, such as payment applications and payment services, to be disabled. Why?

This is really no longer necessary on any CM5 builds currently in the field.

18. Is it necessary to disable the Payment Service on CM5 to use PSDK? If yes, then how do I do that?

No, the Payment Service running does not affect the ability to use PSDK.

19. A POS application written for CM5 or Carbon will also run on an Android BYOD with an e280. What installation package should be there on the e280 device? Should it have GPA or SDI?

An e280 device requires SDI. The Android BYOD SW (Israel) is specifically configured for SDI. However, we don’t really have a way for a third party to build a POS apk which would work for BYOD with an e280/e285 running SDI.

20. How to handle the compatibility between various PSDK versions and Payment Application on the terminal?

The compatibility issues are handled by the PSDK. There is no need to undertake any action for ensuring compatibility.

21. Does Verifone publish the source for the Verifone applications?

No, we do not.

22. Do I need to download anything on the BYOD apart from the application that I am creating?

Please see the comment from question 19 above.

23. What are the platforms that support PSDK?

Android, iOS, Windows, and Linux are the supported platforms. Please see Platforms and Features for a description.

24. Does PSDK maintain states?

Yes. States can be retrieved through classes which are used in our labs.

25. Are the classes extensible and overriding?

Yes. Many classes are also abstract and need to be extended.

26. How to handle negative situation? For example, the transaction is complete, but the status (failure message/connection lost) of transaction result is not updated.

The callbacks will be notified with timeout messages and the application must handle these messages accordingly.

27. Is PSDK ready for distribution to external POS vendors?

Yes, it is.

28. What is the architecture difference between Developer SDK and PSDK?

Developer SDK binds to the Payment Service APK whereas PSDK connects directly to the Payment Application via socket. Developer SDK supports only Android and PSDK supports multi-platform.

29. What is the difference between TransactionManager.print() and Binding with the PrintService?

PrintService gives better control on the print module. A listener registered with PrintService provides more notification w.r.t print errors. This, however, is available only for on-device integration. For off-device use TransactionManager.print().

30. Are there any best practices for writing a Middleware to integrate POS with Verifone device?

No, there are no prescribed best practices. You can use the standard android platform offerings like Sockets to implement this.

31. Can the receipt printing question being asked at the end of the transaction be disabled?

Yes, this can be disabled through terminal configuration:

com.verifone/Terminal.1/PrintReceiptInPosEnabled, however, the proper configuration here would depend on whether they want the AGPA generated receipt html at all.

The application can handle the printing itself using TransactionManager.print().

32. How to enable alternate payment logos on the payment screen?

This can be done by adding/updating following in the android manifest file in the CP application:

<receiver
        android:name=".CommerceReceiver"
        android:enabled="true"
        android:exported="true">
        <meta-data
                android:name="com.verifone.commerce.manifest.altpaymenticon"
                android:resource="@mipmap/alt_payment_logo"/>

33. Is Webview component supported?

Yes, the application can use webview but webview accessing outside link is not enabled by default. You might end up getting an error Failed to load resource: net::ERR_CACHE_MISS. However, you can access internal resource files.

If you want to access outside links, then you must add the following in manifest file: <uses-permission android:name=”com.verifone.permission.EXTERNAL_WEBVIEW”/>

34. How to enable manual key entry?

You can enable it using the following configuration:

Transaction Option->Merchant.1->ManualPurchaseEnabled. Please note that this is specific to android terminals.

ArrayList<PresentationMethod> methods = new ArrayList();
methods.add(PresentationMethod.KEYED);
payment.setRequestedCardPresentationMethods(methods);

35. What are the supported CSS style attributes for printing?

Please reference the following table:

CSS Style Sheet.

36. When should I use Void and Refund transactions?

PSDK does not provide a method to check if a transaction can be voided or must be refunded. It can also depend on what the acquirer supports (and allows).

But in general, you should be able to void the last transaction. For older transactions, use refund.

37. We hear about Android solutions on h/w CM5, T650, and X990. Our focus was on CM5; however, trinity devices can also be used. Please provide more information on this.

CM5 is still being supported. Eventually, there is a possibility of consolidating everything on Trinity platform, but this is work in progress. However, for customers using either CM5 or Trinity, it should not matter because they are exposed to only PSDK. PSDK should seamlessly work on either CM5 or on Trinity.

The message to convey here is that Verifone has a singular integration point for POS developers, which is to use the PSDK. This integration will allow the developer POS solution to run on Verifone payment terminals going forward, eliminating one-off or repeated integrations for each terminal targeted for your POS.

38. We are not offering GPA Android Development Kit to VIPs as opposed to the Engage solution. What is the Verifone process through which we offer customized solutions to the customers?

In this question, the following entities can be referred as the customer- the developer, merchant, and acquirer. There are elements of customization in the platform, but there is no model for replacing Verifone Payment Application (and corresponding host service & card reader service).

39. Does Peripheral service communicate with SDI?

Yes, it does. Refer to the below link for more information on peripheral services including printing and barcode scanning.

40. Is there a way to get a temporary access or login to the Verifone File Signing portal, which can help us demonstrate the signing process during our training?

Most of the customers are going to use Verifone Managed Services where Verifone signs and gives back the application.

Please reference Signing portal.

41. How to sign an application for production?

Production signing of the application can be done through a VFS Verifone File Signing service hosted by Verifone. This provides the means for Verifone and Customers to sign Android APKs.

42. How to get access to the VFS portal?

Access to VFS portal is confined. It also depends on the use case. First the customer must be identified as to whether Verifone will be developing software for their platform, or the customer alone, or both. Then a sponsor is requested, and the signing keys are created. The key signing keys are also usually created at that time.

43. What is the difference between Payment Application and POS Application?

Payment application is a service on the device which implements all the transaction workflows. It performs all payment activities. It can be customized through configuration. POS application is application which links with the PSDK library and uses the PSDK APIs to drive the payment application service to perform transactions.

44. What is the difference between Payment Service and Android Payment Application and Android POS Application?

Payment Service: This is no longer used.

Android Payment Application:

  • Performs Payment Activities.

  • Perform customization without any changes to the core.

POS Application: POS links with PSDK and initiates the transactions.

45. Do I need to convert the Engage side of the device to DEV?

It’s not required to develop PSDK applications.

46. How to perform different types of transactions?

You can perform different transaction flows either using Connect Express or by using PSDK APIs.

47. How to initialize PSDK in debug mode?

You can add the key TransactionManager::DEBUG_MODE_STUB_EVENT_KEY with the value CommerceConstants::MODE_STUB during the initialization call and PSDK will return stub events in debug mode.

48. How to initialize PSDK with multiple terminals

These are some of the requirements and best practices for using PSDK to communicate with multiple terminals.

  • POS software is expected to instantiate a separate instance of PSDK for each terminal by passing an instance id to the create psdk api.

  • Once an instance id has been set, the POS is expected to remember this id and use it when initializing psdk in the future to retrieve the saved terminal information.

  • For SCA terminals, a unique listener port should be set for receiving unsolicited messages from the terminal using the key PsdkDeviceInformation::UNSOLICITED_PORT_KEY.

  • A unique listener should be set in each PSDK instance, in-order to receive event notifications. If you want to set the same listener for all the PSDK instances, one suggestion is for you to introduce an id property in your CommerceListener implementation, and use that to identify the events received.

49. How view logfile in iOS

By using the configureLogFile api you can setup your own log file, these steps are required to view the file created.

  • Add these keys to the app’s Info.plist, so the log file is shown in the iOS File app. UIFileSharingEnabled = true and LSSupportsOpeningDocumentsInPlace = true.

  • Set the complete path to the log file when using the configureLogFile api (example function is found in the iOS reference app).