Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Recommendations
Filter
tutorials digital payments
blogthis article demonstrates how to integrate samsung pay in-app payments into your android application, covering everything from account setup to release. follow these steps to ensure a smooth integration process so you can start accepting payments with samsung pay quickly. figure 1: steps of implementing samsung pay set up and configure samsung pay register as a partner to begin accepting payments through samsung pay, first you need to register as a samsung pay partner and complete your samsung pay developer profile. visit the samsung account website go to the samsung account web site and do one of the following: if this is your first time on the site, click “create account” at the top right corner to create an account. for a smooth approval, use a business email (not personal) for registering your account. if you already have a samsung account, simply log in. complete your developer profile follow these steps to enable your samsung pay developer account: go to the samsung pay developer portal and log in with a business account. become a pay partner by creating a business account. provide appropriate data which exactly matches your business and legal documents. read the terms and conditions carefully and accept them. submit your partnership request. the approval process generally takes a few days. if you encounter any issues, please contact developer support for assistance. configure your service and app while working with the samsung pay, you will encounter the terms “service” and “app.” let’s unpack them below. understanding services and apps service: an interface to the samsung pay system that provides the payment facilities. the service talks with the samsung pay system and collaborates with the partner system and payment gateway for processing payments. app: an app works like a bridge between the service and the partner application. the app ensures the communication and security between the partner application and the service. create an in-app payment service to create an in-app payment service, from the samsung pay partner portal, follow the steps below: select service management, under my projects in the top-right corner menu, in the service management screen, click create new service. select the in-app online payment service type, then click save and next. enter the service information, attach a valid csr file for secure payment, and then click save and next. fill in the required details to define your in-app service. if you have created one previously, you can also use it instead. then click save and next to advance to the next step. define a tentative debug date by clicking generate new date. click add samsung account to add the samsung accounts that will be used for testing purposes. click done. figure 2: creating an in-app payment service this completes the creation of your service and links it with your application. wait for it to be approved. the team will contact you promptly once your request has been processed. in case of any delays, feel free to reach out to 1:1 support for assistance. samsung pay feature development now that your partner account set up is complete, it's time to integrate samsung pay functionality into your android application. next we will integrate the samsung pay sdk and implement core payment features to enable seamless in-app transactions in your app. download and add the sdk go to the downloads page in samsung pay and scroll down to the android section to download the samsung pay sdk. sdk components the samsung pay sdk has the following components: java library (samsungpay_x.xx.xx.jar): contains the classes and interfaces to integrate with the samsung pay. sample apps: demonstrates the implementation of samsung pay apis to simplify the process of building your own. add the sdk to your project create a folder called ‘libs’ if one does not already exist, and move the sdk .jar file into this folder. /app ├── libs/ │ └── samsungpay_x.xx.xx.jar ├── src/main/ │ ├── kotlin/ │ ├── res/ │ └── androidmanifest.xml configure gradle and dependencies update settings.gradle.kts add the ‘libs’ folder with the other repositories, if it is not there already. dependencyresolutionmanagement { repositories { google() mavencentral() flatdir { dirs 'libs' } } } add the sdk dependency in app/build.gradle.kts add the samsung pay sdk as a dependency for your application. dependencies { implementation(files("libs/samsungpay_x.xx.xx.jar")) } sync the gradle to apply the changes. configure android app manifest add the following configurations in your androidmanifest.xml. this ensures the compatibility and proper functioning of your application. add the element <queries> <package android:name="com.samsung.android.spay" /> </queries> add metadata <meta-data android:name="spay_sdk_api_level" android:value="2.xx" /> <!-- latest version is recommended] --> implement functionality now that the samsung pay sdk integration is complete, let us use this sdk to implement the complete functionality of the samsung pay sdk in your android application. here we will go through the complete flow of initiating a payment using the samsung pay sdk. check samsung pay availability initiating a payment starts by checking if samsung wallet is available for payment or not. initialize the samsung pay service with your partner credentials, then verify if samsung pay is supported. if available, display the samsung pay button in your app. val serviceid = "partner_service_id" val bundle = bundle() bundle.putstring(samsungpay.partner_service_type, samsungpay.servicetype.inapp_payment.tostring()) val partnerinfo = partnerinfo(serviceid, bundle) val samsungpay = samsungpay(context, partnerinfo) samsungpay.getsamsungpaystatus(object : statuslistener { override fun onsuccess(status: int, bundle: bundle) { when (status) { samsungpay.spay_not_supported -> samsungpaybutton.setvisibility(view.invisible) samsungpay.spay_not_ready -> { samsungpaybutton.setvisibility(view.invisible) val errorreason = bundle.getint(samsungpay.extra_error_reason) if (errorreason == samsungpay.error_setup_not_completed) samsungpay.activatesamsungpay() else if (errorreason == samsungpay.error_spay_app_need_to_update) samsungpay.gotoupdatepage() } samsungpay.spay_ready -> samsungpaybutton.setvisibility(view.visible) } } override fun onfail(errorcode: int, bundle: bundle) { samsungpaybutton.setvisibility(view.invisible) log.d(tag, "checksamsungpaystatus onfail() : $errorcode") } }) set up payment details and request the payment after the availability check is completed, you need to set up the payment details such as merchant information, transaction information, order number, and so on, before requesting the payment. the following code snippets show how to accomplish this. make customsheet create a simple custom payment sheet with amounts and items for the transaction. this sheet will be displayed during the payment process. you can customize the sheet according to your requirements. private fun makeupcustomsheet(): customsheet { val amountboxcontrol = amountboxcontrol(amount_control_id, mbinding.currency.selecteditem.tostring()) amountboxcontrol.additem( product_item_id, mcontext.getstring(r.string.amount_control_name_item), mdiscountedproductamount, "" ) amountboxcontrol.additem( product_tax_id, mcontext.getstring(r.string.amount_control_name_tax), mtaxamount + maddedbillingamount, "" ) amountboxcontrol.additem( product_shipping_id, mcontext.getstring(r.string.amount_control_name_shipping), mshippingamount + maddedshippingamount, "" ) amountboxcontrol.setamounttotal(totalamount, amountformat) val sheetupdatedlistener = sheetupdatedlistener { controlid: string, sheet: customsheet -> log.d(tag, "onresult control id : $controlid") updatecontrolid(controlid, sheet) } val customsheet = customsheet() customsheet.addcontrol(amountboxcontrol) return customsheet } make customsheetpaymentinfo create payment information with merchant details, order number, and card brand preferences. private fun maketransactiondetailswithsheet(): customsheetpaymentinfo { // get brandlist (supported card brands) val brandlist = getbrandlist() val customsheetpaymentinfo: customsheetpaymentinfo val customsheetpaymentinfobuilder = customsheetpaymentinfo.builder() customsheetpaymentinfobuilder.setaddressinpaymentsheet(mrequestaddressoptions.requestaddresstype) customsheetpaymentinfo = customsheetpaymentinfobuilder .setmerchantid("your_merchant_id") .setmerchantname("your_merchant_name") .setordernumber("your_order_number") .setaddressinpaymentsheet(customsheetpaymentinfo.addressinpaymentsheet.do_not_show) .setallowedcardbrands(brandlist) .setcardholdernameenabled(mbinding.cardbrandcontrol.displaycardholdername.ischecked) .setcustomsheet(makeupcustomsheet()) .build() return customsheetpaymentinfo } request the payment initiate the samsung pay payment process with transaction details and handle payment callbacks. mpaymentmanager.startinapppaywithcustomsheet( maketransactiondetailswithsheet(), object : customsheettransactioninfolistener{ override fun oncardinfoupdated( selectedcardinfo: cardinfo?, sheet: customsheet? ) { // update your controls if needed based on business logic for card information update. // updatesheet() call is mandatory pass the updated customsheet as parameter. try { paymentmanager.updatesheet(customsheet) } catch (e: java.lang.illegalstateexception) { e.printstacktrace() } catch (e: java.lang.nullpointerexception) { e.printstacktrace() } } override fun onsuccess( customsheetpaymentinfo: customsheetpaymentinfo?, paymentcredential: string?, extrapaymentdata: bundle? ) { // triggered upon successful payment, providing customsheetpaymentinfo and paymentcredential. // for example, you can send the payment credential to your server for further processing with pg. or you could send it directly to the pg as per business need. sendpaymentdatatoserver(paymentcredential) } override fun onfailure(errcode: int, errordata: bundle?) { // fired when the transaction fails, offering error codes and details. log.d(tag, "onfailure() : $errcode") showerrordialog(errcode, errordata) } }) testing and release test and validate to ensure a seamless and reliable integration of samsung pay, thorough testing is essential. this process validates transaction performance and guarantees a positive user experience for making a robust business impact. testing goes beyond error detection; it aims to comprehensively assess the quality and functionality of your samsung pay integration. release after successful testing, the next step is to secure release version approval from samsung through the samsung pay developers portal. once approved, your application can be launched, allowing you to monitor user satisfaction and optimize performance. conclusion by integrating samsung pay in-app payments, you’ve enabled secure, convenient transactions for samsung pay users. this implementation expands your payment options while providing a seamless checkout experience. additional resources for additional information on this topic, refer to the resources below. samsung pay faqs samsung pay in-app payment documentation
Yasin Hosain
Develop Samsung Pay
doc3 2 samsung pay sdk flutter plugin 3 2 1 flutter plugin overview the samsung pay sdk flutter plugin allows developers to integrate select features of samsung wallet into flutter-based android apps running on samsung devices it acts as a bridge between the flutter environment and the native samsung pay sdk, enabling secure and seamless payments through samsung pay purpose the primary aim of this plugin is to bring samsung pay sdk functionality into the flutter ecosystem—making it easier for developers to integrate mobile wallet capabilities without deep native android coding supported operations the samsung pay sdk flutter plugin supports the following major operations in-app payment lets users pay for goods and services within a partner app using samsung wallet push provisioning enables users to add bank cards directly to samsung wallet from the issuer’s app by providing required card details what’s included in the plugin package to support seamless integration, the flutter plugin package typically includes samsung pay sdk flutter plugin dart interface, platform channel code, and native android sdk wrappers java/kotlin contains all classes, interfaces, and native libraries needed to communicate with samsung pay services api reference documentation detailed descriptions of each supported api method and parameters usage guidance for implementing features like getsamsungpaystatus , activatesamsungpay , and transaction callbacks sample merchant & issuer apps complete working examples of how to accept in-app payments push provision a card into samsung wallet handle callback responses and errors demonstrates full implementation using flutter ui and platform logic benefits of using the flutter plugin cross-platform development with native payment features faster time to market by avoiding full native sdk integration pre-built sample apps and apis to accelerate onboarding seamless integration with samsung’s trusted payment environment 3 2 2 samsung pay sdk flutter plugin architecture the following diagram illustrates the high-level architecture and core interactions between the samsung pay sdk flutter plugin and a partner app at this level, the plugin enables partner apps to leverage samsung pay for key operations such as push provisioning for issuers and in-app payments for merchants key components and roles partner app - a flutter-based app developed by a merchant or issuer it integrates samsung pay features to support in-app or online payments merchants push provisioning and management issuers samsung pay sdk flutter plugin - the plugin layer embedded in the partner app it enables direct communication between the flutter app and samsung pay services on the device by bridging native sdk apis samsung pay app - the native samsung pay samsung wallet application on the user’s device it securely handles payment authorization, tokenization, card management, and transaction ui financial network - the back-end payment ecosystem, including payment gateways pgs acquirers and issuers card associations e g , visa, mastercard these entities work together to process transactions initiated through samsung pay under merchant agreements 3 2 3 setting up flutter plugin environment establishing a stable and well-configured development environment is essential for the successful integration of the samsung pay sdk flutter plugin into your partner app the following prerequisites and recommendations will help ensure a smooth setup and implementation prerequisites & requirements platform compatibility ensure your app is targeting android devices that support samsung pay for detailed android system requirements, refer to the [samsung pay android sdk overview] service registration to use the plugin, merchants and issuers must first register a service through the samsung pay developer portal this includes obtaining a valid service id sid and service type required for integration refer to the [service registration guide] for step-by-step instructions download the flutter plugin obtain the official samsung pay sdk flutter plugin package, which includes plugin libraries and dependencies api documentation sample flutter apps for merchant and issuer use cases the plugin has the following directory structure folder contents docs api reference documentation libs samsungpaysdkflutter_v1 03 00 flutter plugin – contains the samsung pay apis to be used by your partner app samples sample apps 3 2 4 integrate samsung pay sdk flutter plugin be sure to do the following before attempting to use the plugin if not already part of your environment, download and install an ide android studio is recommended download the samsung pay sdk flutter plugin configure your ide to integrate the samsung pay sdk flutter plugin with your partner app go to pubspec yaml and enter the following dependency dependencies samsung_pay_sdk_flutter path plugin_directory_path\ [note] if your plugin path is c \users\username\downloads, the dependency will be like below dependencies samsung_pay_sdk_flutter path c \users\username\downloads\ for android proguard rules and dexguard, please check the android sdk overview 3 2 5 common flow once the setup is complete, you're ready to start integrating samsung pay features into your partner app using the samsung pay sdk flutter plugin the plugin provides apis for the following core functionalities supported operations via apis check samsung wallet status activate the samsung wallet app update the samsung wallet app checking samsung wallet status the first step is to create a samsungpaysdkflutter instance this instance checks whether samsung wallet is supported and ready to use on the user’s device based on the result, your app will determine whether to display the samsung pay button for both merchant payments and issuer push provisioning important the partner app must initialize partnerinfo, passing the serviceid and servicetype these are assigned in the samsung pay developers portal and are used for partner verification blocked list checking version control between the plugin and the samsung wallet app string serviceid; map<string,dynamic> data; static final samsungpaysdkflutterplugin = samsungpaysdkflutter partnerinfo serviceid 'partner_app_service_id', data {spaysdk partner_service_type servicetype app2app name tostring } ; after setting partnerinfo, your partner app can now call getsamsungpaystatus this method of the samsungpay class must be called before using any other feature in the samsung pay sdk flutter plugin future<void> getsamsungpaystatus statuslistener? statuslistener the result is delivered to statuslistener and provides onsucccess and onfail events check the android sdk common flow for more details the following sample code shows how to use the getsamsungpaystatus api method myhomepage samsungpaysdkflutterplugin getsamsungpaystatus statuslistener onsuccess status, bundle async { showstatus status, bundle ; }, onfail errorcode, bundle { showerror errorcode, bundle ; } ; activating the samsung wallet app the samsungpaysdkflutter class provides the following api method to activate the samsung wallet app on a device future<void> activatesamsungpay activatesamsungpay is called to activate the samsung wallet app on the same device on which the partner app is running first, the partner app must check the samsung wallet status with a getsamsungpaystatus call if the status is spay_not_ready and extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to user, then call activatesamsungpay to launch the samsung wallet app so the user can sign in here’s an example of how to code this samsungpaysdkflutterplugin activatesamsungpay ; updating the samsung wallet app the samsungpaysdkflutter class provides the following api method to update the samsung wallet app on the device future<void> gotoupdatepage gotoupdatepage is called to update samsung wallet app on the same device on which the partner app is running as with all api calls, the partner app must first check the samsung wallet status with getsamsungpaystatus if this returns spay_not_ready and extra_error_reason is error_spay_app_need_to_update, then the partner app needs to display an appropriate message to the user and call gotoupdatepage , which launches the samsung wallet update page the following code sample reflects how to update samsung wallet samsungpaysdkflutterplugin gotoupdatepage ; 3 2 6 in-app online merchant applications can initiate secure in-app payments by interacting with the samsung pay sdk flutter plugin this process allows apps to display a custom payment sheet, retrieve card information, and handle payment requests smoothly within the app the following functionalities are ready to perform a variety of payment operations checking registered/enrolled card information before displaying the samsung pay button, a partner app can query card brand information for the user’s currently enrolled payment cards in samsung wallet to determine if payment is supported with the enrolled card to query the card brand, use the requestcardinfo api method of the samsungpaysdkflutter class the merchant app does not need to set a value for it now however, before calling this method, cardinfolistener must be registered so its listener can provide onresult and onfailure events the following snippet shows how to retrieve the list of supported card brands from samsung wallet samsungpaysdkflutterplugin requestcardinfo cardinfolistener {onresult paymentcardinfo showcardlist paymentcardinfo ; }, onfailure errorcode, bundle { showerror errorcode, bundle ; } ; creating a transaction request upon successful initialization of the samsungpaysdkflutter class, the merchant app needs to create a transaction request with payment information using the custom payment sheet to initiate a payment transaction with samsung wallet’s custom payment sheet, your merchant app must populate the following mandatory fields in customsheetpaymentinfo merchant name - as it will appear in samsung wallet’s payment sheet, as well as the user's card account statement customsheet - is called when the user changes card on the custom payment sheet in samsung wallet optionally, the following fields can be added to the payment information merchant id - can be used for the merchant’s own designated purpose at its discretion unless the merchant uses an indirect pg like stripe or braintree if an indirect pg is used, this field must be set to the merchant’s payment gateway id fetched from the samsung pay developers portal order number - usually created by the merchant app via interaction with a pg this number is required for refunds and chargebacks in the case of visa cards, the value is mandatory the allowed characters are [a-z][a-z][0-9,-] and the length of the value can be up to 36 characters address - the user’s billing and/or shipping address allowed card brands - specifies card brands accepted by the merchant if no brand is specified, all brands are accepted by default if at least one brand is specified, all other card brands not specified are set to "card not supported’ on the payment sheet here’s the 'customsheetpaymentinfo' structure string? merchantid; string merchantname; string? ordernumber; addressinpaymentsheet? addressinpaymentsheet; list<brand>? allowedcardbrand; paymentcardinfo? cardinfo; bool? iscardholdernamerequired; bool? isrecurring; string? merchantcountrycode; customsheet customsheet; map<string,dynamic>? extrapaymentinfo; your merchant app sends this customsheetpaymentinfo to samsung wallet via the applicable samsung pay sdk flutter plugin api methods upon successful user authentication in direct mode, samsung wallet returns the above "payment info" structure and a result string the result string is forwarded to the pg by your merchant app to complete the transaction it will vary based on the pg you’re using the following example demonstrates how to populate customsheet in the customsheetpaymentinfo class list<brand> brandlist = []; brandlist add brand visa ; brandlist add brand mastercard ; brandlist add brand americanexpress ; customsheetpaymentinfo customsheetpaymentinfo= customsheetpaymentinfo merchantname "merchantname", customsheet customsheet ; customsheetpaymentinfo setmerchantid "123456" ; customsheetpaymentinfo setmerchantname "sample merchant" ; customsheetpaymentinfo setaddressinpaymentsheet addressinpaymentsheet need_billing_send_shipping ; customsheetpaymentinfo setcardholdernameenabled true ; customsheetpaymentinfo setrecrringenabled false ; customsheetpaymentinfo setcustomsheet customsheet ; customsheetpaymentinfo allowedcardbrand = brandlist; return customsheetpaymentinfo; requesting payment with a custom payment sheet the startinapppaywithcustomsheet method of the samsungpaysdkflutter class is applied to request payment using a custom payment sheet in samsung wallet the two methods are defined as follows startinapppaywithcustomsheet - initiates the payment request with a custom payment sheet the payment sheet persists for 5 minutes after the api is called if the time limit expires, the transaction fails updatesheet - updates the custom payment sheet if any values on the sheet are changed as of api level 1 5, a merchant app can update the custom sheet with a custom error message refer to updating sheet with custom error message when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from it, the user can select a registered card for payment and change the billing and shipping addresses, as necessary the result is delivered to customsheettransactioninfolistener, which provides the following events onsuccess - called when samsung wallet confirms payment it provides the customsheetpaymentinfo object and the paymentcredential json string customsheetpaymentinfo is used for the current transaction it contains amount, shippingaddress, merchantid, merchantname, ordernumber api methods exclusively available in the onsuccess callback comprise getpaymentcardlast4dpan – returns the last 4 digits of the user's digitized personal/primary identification number dpan getpaymentcardlast4fpan – returns the last 4 digits of the user's funding personal/primary identification number fpan getpaymentcardbrand – returns the brand of the card used for the transaction getpaymentcurrencycode – returns the iso currency code in which the transaction is valued getpaymentshippingaddress – returns the shipping/delivery address for the transaction getpaymentshippingmethod – returns the shipping method for the transaction for pgs using the direct model network tokens , the paymentcredential is a json object containing encrypted cryptogram which can be passed to the pg pgs using the indirect model gateway tokens like stripe, it is a json object containing reference card reference – a token id generated by the pg and status i e , authorized, pending, charged, or refunded refer to payment credential sample for details oncardinfoupdated - called when the user changes the payment card in this callback, updatesheet method must be called to update current payment sheet onfailure - called when the transaction fails, returns the error code and errordata bundle for the failure here’s how to call the startinapppaywithcustomsheet method of the samsungpaysdkflutter class class customsheettransactioninfolistener{ function paymentcardinfo paymentcardinfo, customsheet customsheet oncardinfoupdated; function customsheetpaymentinfo customsheetpaymentinfo, string paymentcredential, map<string, dynamic>? extrapaymentdata onsuccess; function string errorcode, map<string, dynamic> bundle onfail; customsheettransactioninfolistener {required this oncardinfoupdated, required this onsuccess, required this onfail} ; } void oncardinfoupdated cardinfo selectedcardinfo, customsheet customsheet { amountboxcontrol amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol; amountboxcontrol updatevalue product_item_id, 1000 ; amountboxcontrol updatevalue product_tax_id, 50 ; amountboxcontrol updatevalue product_shipping_id, 10 ; amountboxcontrol updatevalue product_fuel_id, 0, "pending" ; amountboxcontrol setamounttotal 1060, amountconstants format_total_price_only ; customsheet updatecontrol amountboxcontrol ; } } void startinapppaywithcustomsheet customsheetpaymentinfo customsheetpaymentinfo,customsheettransactioninfolistener? customsheettransactioninfolistener { try{ methodchannelsamsungpaysdkflutter? startinapppaywithcustomsheet customsheetpaymentinfo, customsheettransactioninfolistener ; }on platformexception catch e { print e ; } } override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle {} override fun onfailure errorcode int, errordata bundle? {} 3 2 7 push provisioning the app-to-app service, also known as push provisioning, allows issuer apps to seamlessly add payment cards to the samsung wallet on a user’s samsung device—directly from within the app—using the samsung pay sdk flutter plugin this integration enhances the user experience by eliminating the need to manually launch samsung wallet or scan physical cards requesting registered card list in the samsung wallet the getallcards method of the cardmanager class is used to request a list of all cards currently registered/enrolled in samsung wallet on the same device running the issuer’s app to succeed, the issuer app must pass valid partnerinfo to 'cardmanager' for caller verification 'cardfilter' narrows the card list returned by samsung wallet to the issuername specified please be noted that getsamsungpaystatus must be called before getallcards getallcards could not return a cards list when getsamsungpaystatus responds with a code other than spay_ready as of api level sdk version 1 4, cardfilter retrieves this information from the samsung pay developers portal certain issuers may need to register multiple issuer name s with the portal, depending on their app and/or the requirements of their token service provider tsp the getallcards parameter cardfilter matches the issuer name s specified with those registered in the portal only complete matches are returned this method is typically called when your partner app wants to check the card status it does not need to be called every time the partner app resumes therefore, you should create the card list with the 'oncreate ' method, rather than the 'onresume ' method the result of a getallcards call is delivered to getcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides the list of all filtered cards and their status card information includes cardid, cardstatus, and extra cardinfo data onfail - called when the operation fails here’s an example of how to use the 'getallcards ' api method in your issuer app samsungpaysdkflutterplugin getallcards getcardlistener onsuccess list { showcardlist list ; }, onfail errorcode, bundle { showerror errorcode, bundle ; } ; getting wallet information the samsungpay class provides the getwalletinfo api method, which is called to request wallet information from the samsung wallet app prior to calling the addcard api, when you want to avoid duplicate provisioning your issuer app uses this information to uniquely identify the user and the samsung wallet app on a particular device wallet device management id, device id, and wallet user id void getwalletinfo statuslistener? statuslistener the following example demonstrates how to use it string serviceid; spaysdk partner_service_type servicetype app2app name tostring samsungpaysdkflutter partnerinfo serviceid "", data {} ; samsungpay=samsungpay context,partnerinfo val keys = arraylist<string> keys add samsungpay wallet_dm_id keys add samsungpay device_id keys add samsungpay wallet_user_id samsungpaysdkflutterplugin getwalletinfo statuslistener onsuccess status, bundle async { val deviceid string? = walletdata getstring samsungpay device_id val walletuserid string? = walletdata getstring samsungpay wallet_user_id }, onfail errorcode, bundle { util showerror context, errorcode, bundle ; } ; adding a card to samsung wallet your issuer app calls the addcard api method of cardmanager to add a card to samsung wallet by providing the required card details, your app can make it convenient and easy for users to add their bank-issued debit/credit cards to samsung wallet directly from your app without additional steps, like switching between apps for most issuers, getwalletinfo suffices for requesting current wallet information the response from samsung wallet tells the issuer app whether or not the user’s card has already been added to samsung wallet or is ineligible for provisioning it is therefore recommended that you call getwalletinfo before displaying the add to samsung pay button if the card is eligible, display the “add” button and, if the user taps it, call addcard the addcard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcard api method in your issuer app string cardtype = walletcard card_type_credit_debit; string tokenprovider = addcardinfo provider_abcd; string testpayload = "testpayloadcardinfoforflutterplugin"; map<string, dynamic> carddetail = {}; carddetail[addcardinfo extra_provision_payload] = testpayload; var addcardinfo = addcardinfo cardtype, tokenprovider,carddetail ; myapp samsungpaysdkflutterplugin addcard addcardinfo, addcardlistener onsuccess status, card { print "success $status / data $card" ; },onfail errorcode, bundle { util showerror context, errorcode, bundle ; print "error $errorcode / data $bundle" ; },on-progress currentcount, totalcount, bundle { print "currentcount $currentcount / totalcount $totalcount / data $bundle" ; } ; adding a co-badge card to samsung pay co-badge payment cards include two payment brands or networks when adding a co-badge card using push provisioning, you need to supply the card details for both networks one as the primary and the other as the secondary issuer app calls the addcobadgecard api method of cardmanager to add a co-badge card to samsung pay in most cases, calling getwalletinfo will suffice to request current wallet information the response from samsung pay indicates whether the user's co-badge card has already been added to samsung pay or is ineligible for provisioning therefore, it is advisable to call getwalletinfo before displaying the add to samsung pay button if the co-badge card is eligible, display the "add" button and, upon user tapping, call addcobadgecard important please remember to refer to the relevant issuer implementation guide s and specifications provided by each card network and ensure that your partner app and server adhere to their specific requirements the addcobadgecard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcobadgecard api method in your issuer app note samsung pay does not provide detailed payload information; generate the provisioning payload in accordance with your card networks specifications string cardtype = walletcard card_type_credit_debit; string primarytokenprovider = addcardinfo provider_abcd; //provide your primary card network payload string testprimarypayload = "thisistestprimarypayloadcardinfo1234567890"; string secondarytokenprovider = addcardinfo provider_efgh; //provide your secondary card network payload string testsecondarypayload = "thisistestsecondarypayloadcardinfo1234567890"; map<string, dynamic> primarycarddetails={}; primarycarddetails[addcardinfo extra_provision_payload] = testprimarypayload; map<string, dynamic> secondarycarddetails={}; secondarycarddetails[addcardinfo extra_provision_payload] = testsecondarypayload; var primaryaddcardinfo = addcardinfo cardtype, primarytokenprovider, primarycarddetails ; var secondaryaddcardinfo = addcardinfo cardtype, secondarytokenprovider, secondarycarddetails ; myapp samsungpaysdkflutterplugin addcobadgecard primaryaddcardinfo, secondaryaddcardinfo, addcardlistener onsuccess status, card { print "success $status / data $card" ; },onfail errorcode, bundle { print "error $errorcode / data $bundle" ; },on-progress currentcount, totalcount, bundle { print "currentcount $currentcount / totalcount $totalcount / data $bundle" ; } ; 3 2 8 sample apps sample applications sample apps with ux strategies are included here to aid you in understanding the sdk and implementing it in your application sample source code and apks can be downloaded from download section sample merchant app the sample merchant app shows you how to implement the payment sheet’s dynamic controls to leverage additional customer order and payment data and/or create a more custom ui look and feel the following payment sheet controls are available addresscontrol plaintextcontrol amountboxcontrol spinnercontrol controls are applied to suit a particular purpose or need check this android sdk sample merchant app for details sample issuer app the samsung pay sdk flutter plugin also provides a sample issuer app to showcase samsung pay sdk features for more information, refer to the javadoc samsung pay sdk api reference and sample code
tutorials mobile
blogas businesses strive to enhance their mobile payment capabilities and provide seamless transaction experiences to users, integrating third-party payment solutions like samsung pay has become increasingly common. however, amid the excitement of implementing these solutions, developers often encounter challenges and pitfalls that can hinder the integration process and impact the overall user experience. in this blog, we show some of the most common mistakes developers make when integrating the samsung pay sdk, and offer practical insights and best practices to overcome these hurdles and ensure successful implementation and testing. pitfall 1: using an unofficial email id to implement the samsung pay sdk, the first step is to establish a partnership between your company and samsung. when submitting a partnership request, do so using your company's official email domain. this precaution is crucial, as partnership requests originating from non-official email addresses are prone to rejection by the samsung relationship manager. pitfall 2: providing the wrong issuer name while creating your service while creating a service for the push provisioning feature, you have to add the issuer names, meaning the names of your financial institution or bank. you must make sure to provide the correct names that have been registered with the card networks such as visa, mastercard and so on. if incorrect names are provided, the getallcard() api returns an empty list even though the card has already been added to the samsung wallet. to confirm your issuer name, first add your card to the samsung wallet application. tap on the card in the wallet application, open the more menu, and select customer services. the correct issuer name is listed on the “customer services” pane. to correct your issuer name for services that you have created: select my projects > service management. select the service name to open the service details page. select edit info. you can delete the incorrect issuer name and enter a new one. pitfall 3: using service id with an invalid effective date a common error that occurs during sdk integration is the error_expired_or_invalid_debug_key (-310) error. this error occurs in two cases: using a newly created service id without generating an expiration date of the service: after creating a service, if you check the edit info of the service details page, you will find that the debug effective data is blank. hence, you have to generate a date right after creating the service. using a service id with an expired debugging date: the service id provided by samsung pay portal remains valid for 90 days. after that time, the service expires. therefore, you must generate a date for debugging every 90 days. to generate or extend the validity date of the service: select my projects > service management. select the service name to open the service details page. select edit info. click generate new date. provide a samsung account for testing the application. this account is placed on the allow list for testing. click generate. the new expiration date of your service appears on the page. remember to extend the date after 90 days if you continue testing your application past that point. pitfall 4: configuring the release service with insufficient information it is essential to include the apk file when setting up the release service. failure to include the apk file will result in samsung pay’s relationship manager rejecting the service, leading to delays in the release process. additionally, ensure that you have correctly integrated the appropriate service id into your release application. pitfall 5: testing your application with a mismatched configuration samsung wallet uses the service id, package name, and apk signature for partner verification. if you test your application with an apk signature different from the one already registered in the samsung pay portal, samsung pay recognizes that the apk signature is inconsistent with the service id and produces the error code -6 (not_allowed). in conclusion, navigating the integration of the samsung pay sdk can present you with many challenges. but, armed with the knowledge shared here, you can steer clear of some potential pitfalls and ensure a smoother implementation process. by prioritizing thorough testing, adhering to best practices, and maintaining clear communication with samsung's support channels, you can mitigate risks and deliver a seamless payment experience to users.
Ummey Habiba Bristy
tutorials mobile
blogsamsung has invested tremendous effort in the digital economy from the very beginning and continuously facilitates millions of people who use samsung wallet. samsung wallet is one of the most used digital wallets right now in the cashless industry. it is a medium that fuels up digital currency transactions by its ease-of-use and security. to support various businesses, samsung has developed the samsung pay sdk which allows you to use samsung wallet’s features effortlessly. the samsung pay android sdk consists of android-based apis to perform transactions using samsung wallet. it helps to implement simple payment solutions, which boost your businesses' growth to the next level. to understand the business and possibilities, visit the samsung pay sdk portal for more information. what is push provisioning? push provisioning is one of the major features of the samsung pay sdk. it allows an issuer bank to push the payment experience to a digital wallet. it simplifies the process of adding a payment card as it can be done with a single tap of a finger. the normal process is time consuming since it involves multiple steps, and the user needs to enter their card information. with push provisioning, the process is easier as it can be done with a single tap, and it's also secure because the process is performed from the issuer application. this tutorial demonstrates how to implement the push provisioning feature in an issuer application with the samsung pay sdk. figure 1: samsung pay push provisioning concept prerequisite to use the samsung pay sdk, you must be an official samsung partner. for information about the partnership process, see the samsung pay member guide. as a samsung pay sdk partner, you can utilize this tutorial while implementing push provisioning. sdk integration to download the samsung pay sdk, go to samsung developers portal > samsung pay > download . when the download is complete, a .jar file called “samsungpaysdk_x.xx.xx_release.jar” can be found under the libs folder. add the samsung pay sdk .jar file to the libs folder of your android project using android studio or file explorer. navigate to the build.gradle file of your application module and enter the following dependency to the dependencies block: implementation files('libs/samsungpaysdk_x.xx.xx_release.jar') if the target sdk version is 30 or higher (android 11 or r-os), include the following <queries> element in androidmanifest.xml. for more information, see declare package visibility needs. <queries> <package android:name="com.samsung.android.spay" /> </queries> since we are using the latest sdk, set the api level to 2.18. we recommend using the updated version of the samsung pay sdk for a better user experience. implement the following code in the <application> element of androidmanifest.xml: <meta-data android:name="spay_sdk_api_level" android:value="2.18" /><!-- most recent sdk version is recommended to leverage the latest apis--> configure the debug or release mode for your project as follows: for testing and qa, set the debug mode value to y. this mode requires the allowed samsung account(s) list to test. for market release to end users, set the debug mode value to n. <meta-data android:name="debug_mode" android:value="n" /><!--set to y if debug mode--> let’s get started since the main functionalities in this tutorial are based on push provisioning, we need to initialize the samsungpay and cardmanager classes first. these two classes take the same parameters to construct, which are context and an instance of the partnerinfo class. the partnerinfo object contains information about partners, which is to validate the request from the issuer application. private val partnerinfo = partnerinfoholder.getinstance(context).partnerinfo private val samsungpay= samsungpay(context,partnerinfo) private val cardmanager = cardmanager(context, partnerinfo) check if samsung wallet is ready since the samsung pay sdk depends on samsung wallet, you need to ensure that samsung wallet is prepared for transactions. check the samsung wallet status before the sdk api call using the getsamsungpaystatus() method. if you get the "spay_ready" status, you can proceed further to call any api. for more details, see the programming guide. samsungpay.getsamsungpaystatus(object : statuslistener { override fun onsuccess(status: int, bundle: bundle?) { if(status == spaysdk.spay_ready){ //enable samsung pay sdk functionalities } else{ //disable samsung pay sdk functionalities } } override fun onfail(status: int, bundle: bundle?) { //disable samsung pay sdk functionalities } }) check if the card is added during development, you may need to know whether the card is already added to samsung wallet or not. to get a list of cards that have already been added to the wallet, use the getallcards() method. for card-related operations, such as getting cards from samsung wallet, the cardmanager class is the responsible one to perform. this means that the getallcards() method is a property of the cardmanager class. this method takes a bundle and an interface as parameters, so it returns the result based on the operation. notethe getsamsungpaystatus() method must be called before the getallcards() method. the getallcards() method cannot return a card list if the getsamsungpaystatus() method responds with a code other than spay_ready. tipone of the most common issues during development is that the getallcards() method returns empty data even though a card has been added. the main reason for this issue is that the card issuer name and issuer name on the samsung pay portal are not the same. for more information, see the faq & troubleshooting page. val getcardlistener: getcardlistener = object : getcardlistener { override fun onsuccess(cards: list<card>) { //show cards } override fun onfail(errorcode: int, errordata: bundle) { //show error } } cardmanager.getallcards(null, getcardlistener) configure your payload the getwalletinfo() method is designed to request wallet information from the samsung wallet application prior to performing the add card operation. wallet information can be mandatory or optional for token providers for payload configuration. for visa, wallet information is mandatory, and you have to use it while building the payload. val keys = arraylist<string>() keys.add(samsungpay.wallet_dm_id) keys.add(samsungpay.device_id) keys.add(samsungpay.wallet_user_id) val statuslistener: statuslistener = object : statuslistener { override fun onsuccess(status: int, walletdata: bundle) { val deviceid: string? = walletdata.getstring(samsungpay.device_id) val walletaccountid: string? = walletdata.getstring(samsungpay.wallet_user_id) //build payload } override fun onfail(errorcode: int, errordata: bundle) { //show error } } samsungpay.getwalletinfo(keys, statuslistener) complete the push provisioning the last command to execute the push provisioning operation in our tutorial is the addcard() method, which is required to perform the push provisioning in samsung wallet. the payload we have created must be delivered with the addcard() method as a parameter. the payload is a tricky part where partners can sometimes get confused or misguided. to be clear, samsung does not provide the payload for push provisioning. the payload is defined between the issuer and the token provider, and it varies based on different issuers and token providers. samsung only delivers the payload to the token provider without consuming anything. the addcard() method also takes a callback as a parameter to return the result based on the operation. tipfor push provisioning of a payment card, samsung pay does not store any card information nor provide any payload for adding cards. so, the issuer needs to provide the payload in a format that is defined in the token provider specification. the issuer and the token provider have their own agreement of data sharing, payload, and encryption. samsung pay is only a medium for this process. val tokenizationprovider = addcardinfo.provider_abcd val carddetail = bundle() carddetail.putstring(extra_provision_payload, payload) var cardtype = card.card_type_credit_debit val addcardinfo = addcardinfo(cardtype, tokenizationprovider, carddetail) val addcardlistener: addcardlistener = object : addcardlistener { override fun onsuccess(status: int, card: card) { //show successful message } override fun onfail(errorcode: int, errordata: bundle) { //show error } override fun onprogress(currentcount: int, totalcount: int, bundledata: bundle) { //extra event for operation count } } cardmanager.addcard(addcardinfo, addcardlistener) summary push provisioning is the powerful experience of sharing information to a digital wallet, and digital wallets transform this experience to the next level by facilitating transactions within seconds. samsung wallet handles these operations and helps the digital payment system to its next step. for more information about the samsung pay sdk, visit the samsung pay developers portal. if you face any issues during sdk implementation, contact the developer support team.
Yasin Hosain
Learn Code Lab
codelabintegrate in-app payment into merchant apps using samsung pay sdk objective learn how to integrate in-app payment with your merchant apps using samsung pay sdk partnership request to use the samsung pay sdk, you must become an official samsung partner once done, you can fully utilize this code lab you can learn more about the partnership process by visiting samsung pay page, here in samsung developers notein accordance with the applicable samsung partner agreements, this code lab covers setup and use of the samsung pay sdk for purposes of integrating the samsung pay app with partner apps the use cases and corresponding code samples included are representative examples only and should not be construed as either recommended or required overview the samsung pay sdk is an application framework for integrating selected samsung pay features with android-based partner apps on samsung devices in-app payment, which allows customers to pay for products and services with samsung pay, is one of the operations supported alongside push provisioning and open favorite cards partner apps can leverage the samsung pay sdk to perform different operations ― push provisioning and open favorite cards for issuers; in-app payment for merchants key components include partner app app developed by merchant or issuer for making online or offline payments and provisioning payment cards through samsung pay samsung pay sdk sdk integrated into the partner app for direct communication with samsung pay samsung pay app pay app with which the samsung pay sdk communicates financial network comprises the payment gateways, acquirers, card associations, and issuers that participate in transaction processing under agreement with the merchant most common use case for in-app payment the merchant app allows the user to make payments with samsung pay upon user selection of the samsung pay option, the merchant app calls the apis included in the samsung pay sdk to initiate a transaction with the samsung pay app the samsung pay app responds with the tokenized payment information necessary to complete the transaction the merchant app forwards this payment information to the designated payment gateway pg , either directly through the merchant's web server or indirectly via the samsung-pg interface server for standard transaction processing for more detailed information, see the official samsung pay sdk programming guide set up your environment you will need the following samsung wallet or samsung pay app depending on the country a compatible mobile device with android marshmallow 6 0 or android api level 23 or later android os versions samsung pay sdk android studio latest version recommended java se development kit jdk 11 or later sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! in-app payment sample code 1 90 mb integrate the samsung pay sdk with your app the following steps comprise the general process for integrating the samsung pay sdk with your app sign up for the samsung pay developers site by clicking sign up and register your samsung account or create it if you don't already have one , then sign in follow the on-screen instructions for adding your app and creating a new service to generate the service id you'll need to use in your project download the samsung pay sdk by going to resources > sdk download add the samsung pay sdk jar file samsungpay jar to your android project using android studio or file explorer develop your partner app with the required api calls and callbacks for samsung pay integration upload a release version of your app to the samsung pay developers site for approval upon samsung approval, publish your partner app to the google play store and samsung galaxy apps notethe service id is already provided in the sample code for this code lab however, this service id is for test purposes only and cannot be used for an actual application or service using the provided test service id enforces your app to use the fixed properties below service id 0915499788d6493aa3a038 package name com test beta pay app version 1 0/ 1 or higher start your project after downloading the sample code containing the project files, in android studio click open to open existing project locate the downloaded android project sampleonlinepay from the directory and click ok add the samsungpaysdk_2 18 00_release jar file from the sdk's libs folder to your android project's libs folder go to gradle scripts > build gradle module sampleonlinepay app and enter the following to the dependencies block implementation files 'libs/samsungpaysdk_2 18 00_release jar' if the target sdk version is 30 android 11 or the r-os , you must include the following <queries> element in androidmanifest xml <queries> <package android name="com samsung android spay" /> </queries> configure the api level as of sdk version 1 4, enhanced version control management has been introduced to improve backward compatibility and handle api dependency from country and service type for example, if a partner integrates the latest sdk—for instance, api level 2 18—but continues to use apis based on level 1 4, the partner app remains compatible with samsung pay apps supporting api level 1 4 without upgrading the samsung pay app implement the following in application tag of androidmanifest xml <meta-data android name="spay_sdk_api_level" android value="2 17" /> // most recent sdk version is recommended to leverage the latest apis add an xml layout and modify the activity next, replace the xml layout in res > layout > activity_main xml this layout shows the sample item information such as image, name, and price <?xml version="1 0" encoding="utf-8"?> <layout xmlns tools="http //schemas android com/tools" xmlns app="http //schemas android com/apk/res-auto" xmlns android="http //schemas android com/apk/res/android"> <androidx constraintlayout widget constraintlayout android layout_width="match_parent" android layout_height="match_parent" tools context=" mainactivity"> <imageview android id="@+id/imageview" android layout_width="350dp" android layout_height="184dp" android layout_margintop="100dp" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" app layout_constrainttop_totopof="parent" android src="@drawable/galaxy_s23_ultra_image"/> <imageview android id="@+id/samsung_pay_button" android layout_width="wrap_content" android layout_height="75dp" app layout_constraintbottom_tobottomof="parent" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" android src="@drawable/pay_rectangular_full_screen_black" android visibility="invisible"/> <textview android id="@+id/textview" android layout_width="wrap_content" android layout_height="wrap_content" android layout_margintop="10dp" android text="galaxy s23 ultra" android textsize="16sp" android textstyle="bold" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" app layout_constrainttop_tobottomof="@+id/imageview" /> <textview android id="@+id/textview2" android layout_width="wrap_content" android layout_height="wrap_content" android layout_margintop="5dp" android text="$1,199 00" android textsize="14sp" app layout_constraintend_toendof="parent" app layout_constrainthorizontal_bias="0 517" app layout_constraintstart_tostartof="parent" app layout_constrainttop_tobottomof="@+id/textview" /> </androidx constraintlayout widget constraintlayout> </layout> since you added a data binding layout, you need to inflate the xml file differently go to java > com > test > beta > pay > mainactivity kt, and declare the databinding variable in the mainactivity class private lateinit var databinding activitymainbinding replace the standard setcontentview declaration with the data binding version inside the oncreate method databinding = databindingutil setcontentview this, r layout activity_main check samsung pay status in the mainactivity, create the samsungpay instance to determine if the device supports samsung pay and if the samsung pay button can be displayed as the user's payment option, check the samsung pay status samsungpay requires a valid partnerinfo from the merchant app, which consists of service id and service type during onboarding, the samsung pay developers site assigns the service id and service type in the mainactivity, declare the partnerinfo variable private lateinit var partnerinfo partnerinfo then, set the partnerinfo in the oncreate method val bundle = bundle bundle putstring spaysdk partner_service_type, spaysdk servicetype inapp_payment tostring partnerinfo = partnerinfo service_id, bundle after setting partnerinfo, call the getsamsungpaystatus method via updatesamsungpaybutton function inside the oncreate method updatesamsungpaybutton the getsamsungpaystatus method of the samsungpay class must be called before using any other feature in the samsung pay sdk write the updatesamsungpaybutton function as follows private fun updatesamsungpaybutton { val samsungpay = samsungpay this, partnerinfo samsungpay getsamsungpaystatus object statuslistener { override fun onsuccess status int, bundle bundle { when status { spaysdk spay_ready -> { databinding samsungpaybutton visibility = view visible // perform your operation } spaysdk spay_not_ready -> { // samsung pay is supported but not fully ready // if extra_error_reason is error_spay_app_need_to_update, // call gotoupdatepage // if extra_error_reason is error_spay_setup_not_completed, // call activatesamsungpay databinding samsungpaybutton visibility = view invisible } spaysdk spay_not_allowed_temporally -> { // if extra_error_reason is error_spay_connected_with_external_display, // guide user to disconnect it databinding samsungpaybutton visibility = view invisible } spaysdk spay_not_supported -> { databinding samsungpaybutton visibility = view invisible } else -> databinding samsungpaybutton visibility = view invisible } } override fun onfail errorcode int, bundle bundle { databinding samsungpaybutton visibility = view invisible toast maketext applicationcontext, "getsamsungpaystatus fail", toast length_short show } } } tipfor the list and detailed definition of status codes such as spay_ready, refer to checking samsung pay status noteas of sdk version 1 5, if the device has android lollipop 5 1 android api level 22 or earlier versions, the getsamsungpaystatus api method returns a spay_not supported status code merchant apps using sdk 1 4 or earlier must check their app's android version activate the samsung pay app the samsungpay class provides an api method called activatesamsungpay to activate the samsung pay app on the same device where the partner app is running if the getsamsungpaystatus returns spay_not_ready and the extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to the user then, call activatesamsungpay to launch samsung pay app and request the user to sign in in updatesamsungpaybutton function, add the code to call activatesamsungpay method via doactivatesamsungpay function when the status is spay_not_ready // if extra_error_reason is error_spay_setup_not_completed, // call activatesamsungpay val extraerror = bundle getint samsungpay extra_error_reason if extraerror == samsungpay error_spay_setup_not_completed { doactivatesamsungpay spaysdk servicetype inapp_payment tostring } create the doactivatesamsungpay function as below private fun doactivatesamsungpay servicetype string { val bundle = bundle bundle putstring samsungpay partner_service_type, servicetype val partnerinfo = partnerinfo service_id, bundle val samsungpay = samsungpay this, partnerinfo samsungpay activatesamsungpay } create a transaction request upon successfully initializing the samsungpay class, the merchant app should create a transaction request with payment information samsung pay offers two types of online payment sheet―normal and custom the normal payment sheet has fixed display items ― items, tax, and shipping the custom payment sheet offers more dynamic controls for customizing the ui, together with additional customer order and payment data for this code lab, use the custom payment sheet and populate the fields in customsheetpaymentinfo to initiate a payment transaction /* * make user's transaction details * the merchant app should send paymentinfo to samsung pay via the applicable samsung pay sdk api method for the operation * being invoked * upon successful user authentication, samsung pay returns the "payment info" structure and the result string * the result string is forwarded to the pg for transaction completion and will vary based on the requirements of the pg used * the code example below illustrates how to populate payment information in each field of the paymentinfo class */ private fun maketransactiondetailswithsheet customsheetpaymentinfo? { val brandlist = brandlist val extrapaymentinfo = bundle val customsheet = customsheet customsheet addcontrol makeamountcontrol return customsheetpaymentinfo builder setmerchantid "123456" setmerchantname "sample merchant" setordernumber "amz007mar" // if you want to enter address, please refer to the javadoc // reference/com/samsung/android/sdk/samsungpay/v2/payment/sheet/addresscontrol html setaddressinpaymentsheet customsheetpaymentinfo addressinpaymentsheet do_not_show setallowedcardbrands brandlist setcardholdernameenabled true setrecurringenabled false setcustomsheet customsheet setextrapaymentinfo extrapaymentinfo build } private fun makeamountcontrol amountboxcontrol { val amountboxcontrol = amountboxcontrol amount_control_id, "usd" amountboxcontrol additem product_item_id, "item", 1199 00, "" amountboxcontrol additem product_tax_id, "tax", 5 0, "" amountboxcontrol additem product_shipping_id, "shipping", 1 0, "" amountboxcontrol setamounttotal 1205 00, amountconstants format_total_price_only return amountboxcontrol } private val brandlist arraylist<spaysdk brand> get { val brandlist = arraylist<spaysdk brand> brandlist add spaysdk brand visa brandlist add spaysdk brand mastercard brandlist add spaysdk brand americanexpress brandlist add spaysdk brand discover return brandlist } request payment with a custom payment sheet the startinapppaywithcustomsheet method of the paymentmanager class is applied to request payment using a custom payment sheet in samsung pay when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from there, the user can select a registered card for payment and change the billing and shipping addresses as necessary the payment sheet lasts for 5 minutes after calling the api if the time limit expires, the transaction fails in the mainactivity class, declare the paymentmanager variable private lateinit var paymentmanager paymentmanager then, in oncreate , set an onclicklistener method before calling the updatesamsungpaybutton function to trigger the startinapppaywithcustomsheet function when the samsungpaybutton is clicked databinding samsungpaybutton setonclicklistener { startinapppaywithcustomsheet } lastly, create a function to call startinapppaywithcustomsheet method of the paymentmanager class /* * paymentmanager startinapppaywithcustomsheet is a method to request online in-app payment with samsung pay * partner app can use this method to make in-app purchase using samsung pay from their * application with custom payment sheet */ private fun startinapppaywithcustomsheet { paymentmanager = paymentmanager applicationcontext, partnerinfo paymentmanager startinapppaywithcustomsheet maketransactiondetailswithsheet , transactioninfolistener } /* * customsheettransactioninfolistener is for listening callback events of online in-app custom sheet payment * this is invoked when card is changed by the user on the custom payment sheet, * and also with the success or failure of online in-app payment */ private val transactioninfolistener paymentmanager customsheettransactioninfolistener = object paymentmanager customsheettransactioninfolistener { // this callback is received when the user changes card on the custom payment sheet in samsung pay override fun oncardinfoupdated selectedcardinfo cardinfo, customsheet customsheet { /* * called when the user changes card in samsung pay * newly selected cardinfo is passed and partner app can update transaction amount based on new card if needed * call updatesheet method this is mandatory */ paymentmanager updatesheet customsheet } override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle { /* * you will receive the payloads shown below in paymentcredential parameter * the output paymentcredential structure varies depending on the pg you're using and the integration model direct, indirect with samsung */ toast maketext applicationcontext, "onsuccess ", toast length_short show } // this callback is received when the online payment transaction has failed override fun onfailure errorcode int, errordata bundle? { toast maketext applicationcontext, "onfailure ", toast length_short show } } run the app after building the apk, you can run the sample merchant app and see how it connects to samsung pay upon clicking the button at the bottom of the screen to thoroughly test the sample app, you must add at least one card to the samsung pay app you're done! congratulations! you have successfully achieved the goal of this code lab now, you can integrate in-app payment with your app by yourself! if you face any trouble, you may download this file in-app payment complete code 2 26 mb to learn more about developing apps for samsung pay devices, visit developer samsung com/pay
Learn Code Lab
codelabintegrate samsung pay sdk flutter plugin into merchant apps for in-app payment objective learn how to integrate in-app payment with your flutter-based merchant apps using samsung pay sdk flutter plugin partnership request to use the samsung pay sdk flutter plugin, you must become an official samsung partner once done, you can fully utilize this code lab you can learn more about the partnership process by visiting samsung pay in samsung developers overview the samsung pay sdk flutter plugin allows developers to use samsung wallet features in flutter applications it is the wrapper of samsung pay sdk, which is an application framework for integrating samsung wallet features on galaxy devices the samsung pay sdk flutter plugin offers in-app payment feature that gives customers the opportunity to pay for products and services with samsung wallet set up your environment you will need the following samsung wallet app version 5 6 53, 5 8 0 samsung pay sdk flutter plugin android studio latest version recommended java se development kit jdk 11 or later flutter sdk a compatible galaxy device with android q 10 0 or android api level 29 or later android os versions noteflutter sdk must be installed and set up properly when developing flutter applications after downloading, follow the installation guide appropriate to your operating system after proper installation and setup, configure your android studio to include the flutter plugin for intellij check this editor guide for the detailed steps sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! in-app payment flutter plugin sample code 20 4 mb start your project in android studio, click open to open an existing project locate the flutterinapppayment project from the directory, and click ok go to file > settings > languages & frameworks > flutter to change the flutter sdk path input the directory path where your flutter sdk is installed and click apply install the plugin and configure the api level add samsungpaysdkflutter_v1 01 00 folder in the project go to samsungpaysdkflutter_v1 01 00 > pubspec yaml file and click on pub get in right side of the action ribbon or run flutter pub get in the command line next, go to flutterinapppayment > pubspec yaml and add the samsungpaysdkflutter_v1 01 00 plugin under dependencies samsung_pay_sdk_flutter path /samsungpaysdkflutter_v1 01 00 warningbe careful of line alignment of pubspec yaml file, as the indentations indicate the structure and hierarchy of the data from the terminal, run flutter pub get command or click on pub get in the right side of the action ribbon configure the api level samsung pay sdk flutter plugin supports samsung pay sdk version 2 18 or later hence, we must set a valid api version latest version 2 19 of samsung pay sdk go to android > app > src > main > androidmanifest xml and add the api level in the meta-data of application tag <meta-data android name="spay_sdk_api_level" android value="2 19" /> // most recent sdk version is recommended to leverage the latest apis add the samsung pay button go to the main project, flutterinapppayment project > lib > main dart here, the ui is created using the build widget this widget shows the sample item information such as image, name, and price add a bottomnavigationbar before the end of the body of scaffold to display the samsung pay button bottomnavigationbar visibility visible isspaystatusready, child inkwell ontap { requestpaymentwithsamsungwallet ; }, child image asset 'assets/pay_rectangular_full_screen_black png' , , , check samsung pay status in main dart > myhomepage class, create an instance of samsungpaysdkflutter with valid partnerinfo service id and service type during onboarding, the samsung pay developers site assigns the service id and service type these data are used for partner verification static final samsungpaysdkflutterplugin = samsungpaysdkflutter partnerinfo serviceid service_id, data {spaysdk partner_service_type servicetype inapp_payment name} ; notethe service id is already provided in the sample code for this code lab however, this service id is for test purposes only and cannot be used for an actual application or service to change the service id in your actual application, the value of the variable service_id should be modified to check whether samsung pay is supported on your galaxy device, call the getsamsungpaystatus api and change the samsung pay button visibility accordingly in checksamsungpaystatus method, apply the following code void checksamsungpaystatus { //update ui according to samsung pay status myhomepage samsungpaysdkflutterplugin getsamsungpaystatus statuslistener onsuccess status, bundle async { if status == "2" { setstate { isspaystatusready = true; } ; } else { setstate { isspaystatusready = false; } ; _showtoast context,"spay status not ready" ; } }, onfail errorcode, bundle { setstate { isspaystatusready = false; } ; _showtoast context,"spay status api call failed" ; } ; } inside initstate method, call checksamsungpaystatus to ensure that getsamsungpaystatus api is called before any other api is called checksamsungpaystatus ; notethe getsamsungpaystatus api must be called before using any other feature in the samsung pay sdk flutter plugin create a custom payment sheet samsung pay sdk flutter plugin offers a custom type payment sheet called customsheet to customize the ui with additional payment related data here, create customsheet using the following controls amountboxcontrol it is a mandatory control to build a customsheet it provides the monetary details of the transaction addresscontrol it is used to display the billing and shipping address in makeamountcontrol method, add items and total price to build amountboxcontrol amountboxcontrol additem strings product_item_id, "item", 1199 00, "" ; amountboxcontrol additem strings product_tax_id, "tax", 5 0, "" ; amountboxcontrol additem strings product_shipping_id, "shipping", 1 0, "" ; amountboxcontrol setamounttotal 1205 00, spaysdk format_total_price_only ; in makebillingaddress method, add the following code to create billingaddresscontrol set sheetitemtype as zip_only_address while creating billingaddresscontrol to get the zip code as we are expecting to get the user's billing address from samsung wallet, set sheetupdatedlistener addresscontrol billingaddresscontrol = addresscontrol strings billing_address_id, sheetitemtype zip_only_address name ; billingaddresscontrol setaddresstitle strings billing_address ; billingaddresscontrol sheetupdatedlistener = billinglistener; return billingaddresscontrol; notefrom samsung pay sdk version 2 19 onwards, users can only add zip code as their billing address only the zip code is fetched from the user's samsung wallet instead of the full billing address implement this listener in makeupcustomsheet method to update the custom sheet when the user updates their billing address sheetupdatedlistener sheetupdatedlistener = sheetupdatedlistener onresult string controlid, customsheet sheet { if controlid == strings billing_address_id { var addresscontrol = sheet getsheetcontrol controlid as addresscontrol; setstate { postalcode = addresscontrol address! postalcode; } ; } myhomepage samsungpaysdkflutterplugin updatesheet sheet ; } ; create the shipping address in buildshippingaddressinfo method to add it in shipping addresscontrol this is the shipping address from the merchant app maddress = address addressee "jane smith", addressline1 "123 main st", addressline2 "suite 456", city "anytown", state "st", countrycode "usa", postalcode "12345", phonenumber "+1 555-123-4567", email "example@email com" ; add this address in makeshippingaddress method shippingaddresscontrol address = buildshippingaddressinfo ; finally, complete the makeupcustomsheet method by adding amountboxcontrol, billingaddresscontrol, and shippingaddresscontrol customsheet addcontrol makeamountcontrol ; customsheet addcontrol makebillingaddress sheetupdatedlistener ; customsheet addcontrol makeshippingaddress ; create a transaction request to start the payment process, the merchant app should create a transaction request with payment information in maketransactiondetailswithsheet method, add the merchant name and custom sheet in customsheetpaymentinfo customsheetpaymentinfo customsheetpaymentinfo = customsheetpaymentinfo merchantname "in app payment flutter app", customsheet makeupcustomsheet ; your merchant app must fill the following mandatory fields in customsheetpaymentinfo customsheetpaymentinfo merchantid = "123456"; customsheetpaymentinfo setordernumber "amz007mar" ; customsheetpaymentinfo setmerchantcountrycode "us" ; customsheetpaymentinfo addressinpaymentsheet = addressinpaymentsheet need_billing_send_shipping; request payment with a custom payment sheet the startinapppaywithcustomsheet api is called to request payment using a custom payment sheet in samsung pay this api requires customsheetpaymentinfo and customsheettransactioninfolistener first, implement this listener before starting the payment customsheettransactioninfolistener transactionlistener { customsheettransactioninfolistener customsheettransactioninfolistener = customsheettransactioninfolistener oncardinfoupdated paymentcardinfo paymentcardinfo, customsheet customsheet { myhomepage samsungpaysdkflutterplugin updatesheet customsheet ; }, onsuccess customsheetpaymentinfo customsheetpaymentinfo, string paymentcredential, map<string, dynamic>? extrapaymentdata { print "payment success" ; }, onfail string errorcode, map<string, dynamic> bundle { print "payment failed" ; } ; return customsheettransactioninfolistener; } lastly, call startinapppaywithcustomsheet api to start the payment in the requestpaymentwithsamsungwallet method void requestpaymentwithsamsungwallet { myhomepage samsungpaysdkflutterplugin startinapppaywithcustomsheet maketransactiondetailswithsheet , transactionlistener ; } run the app build the app by running flutter build apk --debug in the command line or going to build > flutter > build apk deploy the app on the device test it by clicking on samsung pay button to proceed with the payment transaction to thoroughly test the sample app, you must add at least one payment card to the samsung wallet app you're done! congratulations! you have successfully achieved the goal of this code lab now, you can integrate in-app payment with your flutter app by yourself! if you are having trouble, you may download this file in-app payment flutter plugin complete code 62 0 mb to learn more about developing apps for samsung pay devices, visit developer samsung com/pay
Develop Samsung Pay
doc5 2 android sdk samsung pay sdk samsung pay android sdk v2 22 00 1 5 mb jan 14, 2025 open source announcement open source announcement samsung pay sdk 231 98 kb sept 12, 2023
Develop Samsung Pay
doc5 3 spay sdk flutter plugin samsung pay sdk flutter plugin samsung pay sdk flutter plugin v1 03 00 1 4 mb nov 21, 2025 api reference api_reference_spaysdk_flutterpluginv1 03 00 1 0 mb nov 21, 2025
Develop Samsung Pay
doc3 1 android sdk 3 1 1 introduction the samsung pay sdk allows android-based partner apps—such as merchant apps and issuer banking apps—to securely integrate features of integration wallet, enabling in-app payments, push provisioning, and more the following major operations are supported in-app payment - gives customers the option of paying for products and services with samsung wallet push provisioning - allows customers add a bank card to samsung wallet from the issuer app by providing the required card details to integrate your partner application with the samsung pay sdk, the following components are included your sdk download samsungpay jar - contains classes and interfaces of the samsung pay sdk which need to be integrated to partner apps javadoc - provides descriptions of the apis included in the samsung pay sdk, along with sample code showing how to use them sample merchant app and sample issuer app showing how samsung pay apis can be coded in a finished android project all major operations of samsung pay sdk are implemented for demonstration purposes 3 1 2 samsung pay sdk architecture the following diagram shows a high-level architecture revealing the general interactions between the samsung pay sdk and a partner app viewed at this level, the partner apps leverage the samsung pay sdk to perform the operations shown ― push provisioning and opening favorite cards for issuers; online payments for merchants ― with samsung pay the key components involved are partner app - merchant- or issuer-developed app for making online/offline payments and provisioning payment cards through samsung wallet samsung pay sdk - sdk integrated into the partner app for direct communication with samsung wallet samsung wallet app - wallet app that the samsung pay sdk communicates with financial network - comprises the payment gateways, acquirers, card associations, and issuers that participate in transaction processing under agreement with the merchant the main classes comprising the samsung pay sdk include samsungpay – used by the partner app to get the samsung pay sdk information and the status of samsung wallet app on the device paymentmanager – provides payment/transaction functionality cardmanager – manages card list get, add, update functionality watchmanager – manages all functions related to samsung pay watch cardinfolistener – interface for requestcardinfo result from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet 3 1 3 uses cases in-app payment the most common in-app online payment use case take the following form merchant app presents user with the option of making payment with samsung wallet upon the user selecting the samsung pay option, the merchant app calls the apis included in the samsung pay sdk to initiate a transaction with samsung wallet app samsung wallet app responds with the tokenized payment information necessary to complete the transaction merchant app forwards this payment information to the designated payment gateway pg , either directly through the merchant's web server, or indirectly via the samsung-pg interface server for normal transaction processing app-to-app push provisioning the push provisioning use case ― adding payment cards to samsung wallet from the card issuer’s app ― typically takes this form the user logs into the issuer app the issuer app checks if samsung wallet is activated on the device and ready to use if it is in the ready status, the issuer app displays an add button for cards not currently registered/enrolled with the samsung wallet app if the add card option is selected, the issuer app calls an api to push the proper payload data to samsung wallet while the card is being provisioned, samsung wallet stays in background 3 1 4 setting up sdk development environment the importance of maintaining a good development environment cannot be overstated for integrating the samsung pay sdk with your partner app, the following prerequisites and recommendations help ensure a successful sdk implementation system requirements the samsung pay sdk is designed exclusively for samsung mobile devices supporting samsung pay and running android lollipop 5 1 android api level 22 or later versions of the android os the sdk’s in-app payments functionality requires android 6 0 m android api level 23 or later versions of the android os note as of sdk version 1 5, if the device runs android lollipop 5 1 android api level 22 or an earlier version, the getsamsungpaystatus api method returns a spay_not supported status code merchant apps still using samsung pay sdk 1 4 or earlier not recommended must check the android version running their app use the following snippet to determine the os version running on a device and whether or not to display the samsung pay button in your partner app import android os build; // in-app payment supported on android m or above // check android version of the device if build version sdk_int < build version_codes m { //hide samsung pay button} service registration to develop a samsung pay sdk service, merchants and issuers need to register for an account with samsung pay developers in order to create the appropriate service type for their applications here are some helpful links inside the portal become a member https //pay samsung com/developers/tour/memberguide create services https //pay samsung com/developers/tour/svcguide register apps https //pay samsung com/developers/tour/appsguide manage services and apps https //pay samsung com/developers/tour/svcnappsguide add samsung pay sdk to your project be sure to do the following before attempting to use the sdk if not already part of your environment, download and install an ide android studio is recommended download the samsung pay sdk the sdk package has the following directory structure folder contents docs javadoc – api reference documentation libs samsungpay jar sdk java archive file – contains the samsung pay apis to be used by your partner app samples sample apps configure your ide to integrate the samsung pay sdk with your partner app a add samsungpay jar to the libs folder of your android project b go to gradle scripts > build gradle and enter the following dependency dependencies { compile files 'libs/samsungpay jar' } c import the sdk package into your code import com samsung android sdk samsungpay v2; d proguard rules - if your app s have any issue with proguard, the following rules are recommended to enter in debug mode dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key e when dexguard is employed, the following additional rules apply -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level android r os targetsdkversion 30 informationfrom android r os if the target sdk version is 30 , you must include the following <queries> element in the androidmanifest <?xml version="1 0" encoding="utf-8"?> <manifest xmlns android="http //schemas android com/apk/res/android" xmlns tools="http //schemas android com/tools" package="xxx xxx xxx xxx"> <queries> <package android name="com samsung android spay" /> <package android name="com samsung android samsungpay gear" /> </queries> 3 1 5 configuring api level api level attributes as of sdk version 1 4, enhanced version control management has been introduced to improve backward compatibility and handle api dependency from country and service type for example, if a partner integrates the latest sdk―for instance, api level 2 22―but continues to use apis based in level 1 4, the partner app remains compatible with samsung wallet apps supporting api level 1 4 without the necessity of upgrading the samsung pay app the chief characteristics and properties of the api level include every api starting from version 1 4 has an api level assigned based on the sdk version number in which it is introduced the sdk’s javadoc reference can be filtered by api level so you can determine the minimum api level you need to configure in the metadata section of your app’s androidmanifest file the earliest possible version is 1 4 this lets you use the api level defined in your androidmanifest without having to trigger an upgrade of the samsung wallet app on the user’s device implement the following usage in your androidmanifest <application <meta-data android name="spay_sdk_api_level" android value="2 22" /> // most recent sdk version is recommended to leverage the latest apis but it need to be set to 2 17 for russia </application> partner app verification in partner verification process samsung pay sdk verify your registered app, version in samsung pay portal and service it also determines device and app compatibility your app needs to verify the presence of the samsung wallet app on the device, its status, and whether or not its version is sufficient to support your implementation of the sdk 3 1 6 common terminology terminology description aavs automatic add value service aidl android interface definition language for communication merchant a business entity engaged in retail e-commerce that provides an online checkout service for purchasing its products and/or services to registered end users issuer financial institution empowered to issue credit and/or debit payment cards to qualified consumers and businesses payment gateway pg e-commerce app service provider equipped to authorize credit card payments for e-businesses, online retailers, bricks and clicks, or traditional brick and mortar payment token secure method for payment ensuring that a cardholder’s information is not exploited by unauthorized parties samsung pay samsung’s proprietary mobile wallet app and payment system samsung pay service the server and service components of samsung pay samsung pay watch samsung pay app on samsung galaxy watches to support payment system eligibility check a query by third-party apps to check whether or not samsung pay is supported/activated/ready-to-use on a samsung device mst magnetic secure transmission tui trusted user interface 3 1 7 api common flow once setup is complete, you’re ready to add the sdk code within your partner app for calling the sdk’s apis and receiving callbacks when a partner app calls one of the sdk’s apis, the following interaction flow is processed to check whether the caller is authenticated and authorized before responding to the request the steps of the interaction are enumerated below step 1 the partner app calls a samsung pay sdk api the partner app initiates a call to the samsung pay sdk this could be to request in-app payment push provisioning status checks, etc step 2 sdk validates the preconditions the sdk performs initial checks before proceeding is samsung wallet installed on the device? is the integrity of the samsung pay system intact e g , no tampering or missing files ? step 3 sdk initiates communication with samsung wallet if preconditions are met, the sdk uses aidl android interface definition language to securely open a communication channel with the samsung wallet app step 4 samsung wallet app status validation samsung wallet app checks has the samsung pay setup been completed on the device? does the app require a mandatory update? is the samsung pay sdk api level used by the partner app compatible? step 5 partner app eligibility verification sdk triggers a backend verification with the samsung pay server to confirm the app’s package name, service id, and csr match what’s registered on the samsung pay developers portal the app is authorized to use the requested samsung pay functionality step 6 samsung wallet responds to sdk based on the above validations samsung wallet responds via aidl to the sdk it sends status codes, eligibility results, or additional prompts if needed e g , update required step 7 sdk triggers callback in the partner app the sdk invokes a callback function in the partner app this informs the app whether it can proceed with payment/provisioning an error or restriction has occurred step 8 partner app executes business logic based on sdk callback if successful initiate samsung pay payment ui or push provisioning complete transaction or card enrollment via the wallet app if unsuccessful inform the user offer fallback payment options provide guidance on enabling/updating samsung wallet 3 1 8 checking samsung pay status the first step in integrating the samsung pay sdk into your partner app is to create a samsung pay instance and check the status of samsung pay on the user's device this check determines whether the device supports samsung pay and if the samsung pay button should be shown as a payment or provisioning option the samsung pay button serves two key purposes for merchant apps, it enables users to select samsung pay for in-app payments for issuer apps, it allows users to add a card directly to samsung pay via push provisioning setting partnerinfo for verification before checking the status, the partner app must configure and pass a valid partnerinfo object to the samsungpay instance this is essential for verifying the calling app and enabling further sdk functionality the partnerinfo must include serviceid sid a unique identifier assigned by the samsung pay developer portal servicetype defines the type of service e g , merchant or issuer this value is also assigned during service registration samsung pay uses partnerinfo for validating the app’s identity and registration performing sdk version and api compatibility checks verifying allowlist/blocklist status note servicetype is required without it, you cannot call other samsung pay apis once partnerinfo is set correctly, you can proceed to call getsamsungpaystatus to check if samsung pay is available and ready for use on the device val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle after setting partnerinfo, your partner app can now call getsamsungpaystatus this method of the samsungpay class must be called before using any other feature in the samsung pay sdk noteif you want to get the status of samsung pay watch, you have to use the watchmanager class instead of the samsungpay class fun getsamsungpaystatus callback statuslistener copy the result is delivered to statuslistener and provides the following events onsuccess ‒ called when the requested operation is successful it provides the status of the request, as well as extra bundle data related to the request onfail ‒ called when the request operation fails it returns the error code and extra bundle data related to the request the samsung pay status code returned is one of the following spay_not_supported - indicates samsung wallet is not supported on this device; typically returned if the device is incompatible with samsung pay or if the samsung wallet app is not installed spay_not_ready - indicates samsung wallet is not completely activated; usually returned if the user did not complete a mandatory update or if the user has not signed in with a valid samsung account in which case, the partner app can activate or update the samsung wallet app on the device according to the 'extra_error_reason' bundle keys below error_spay_setup_not_complete - tells the partner app to display a popup message asking if the user wishes to activate samsung pay if the user agrees, the partner app calls activatesamsungpay to activate the samsung wallet app error_spay_app_need_to_update - tells the partner app to display a popup message asking if the user wishes to update samsung pay if user agrees, the partner app calls gotoupdatepage to open the app update page error_partner_info_invalid - indicates that partner app information is invalid; typically, the partner app is using a sdk version that is not allowed, an invalid service type, or the wrong api level error_partner_sdk_api_level - tells the partner app it is using the wrong api level to resolve the error condition, the partner app must set a valid api level error_partner_service_type - tells the partner app that it did not set a service type, or that the service type it did set is invalid service type is set in partnerinfo spay_ready - indicates that samsung pay is activated and ready to use; typically returned after the user completes all mandatory updates and signs in extra bundle data can have the following values extra_country_code - for both onsuccess and onfail , this is the current device’s country code iso 3166-1 alpha-2 set by samsung pay if the partner app is not supported in this particular country, the partner app can decide not to display samsung pay button extra_error_reason - for onfailure , this is the reason for failure set by samsung pay when the returned status code is spay_ready, the partner app can safely display the samsung pay button for user selection as a payment option, push provisioning, and so on the following sample code shows how to use the getsamsungpaystatus api method val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo /* * method to get the samsung pay status on the device * partner issuers, merchants applications must call this method to * check the current status of samsung pay before doing any operation */ samsungpay getsamsungpaystatus object statuslistener { override fun onsuccess status int, bundle bundle { when status { samsungpay spay_not_supported -> // samsung pay is not supported samsungpaybutton setvisibility view invisible samsungpay spay_not_ready -> { // activate samsung pay or update samsung pay, if needed samsungpaybutton setvisibility view invisible val errorreason = bundle getint samsungpay extra_error_reason if errorreason == samsungpay error_setup_not_completed { // display an appropriate popup message to the user samsungpay activatesamsungpay } else if errorreason == samsungpay error_spay_app_need_to_update { // display an appropriate popup message to the user samsungpay gotoupdatepage } else { toast maketext context, "error reason $errorreason", toast length_long show } } samsungpay spay_ready -> // samsung pay is ready samsungpaybutton setvisibility view visible else -> // not expected result samsungpaybutton setvisibility view invisible } } override fun onfail errorcode int, bundle bundle { samsungpaybutton setvisibility view invisible log d tag, "checksamsungpaystatus onfail $errorcode" } } 3 1 9 activating the samsung wallet app the samsungpay class provides the following api method to activate the samsung wallet app on a device fun activatesamsungpay activatesamsungpay is called to activate the samsung wallet app on the same device on which the partner app is running first, however, the partner app must check the samsung pay status with a getsamsungpaystatus call see section 4 2 above if the status is spay_not_ready and extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to user, then call activatesamsungpay to launch the samsung wallet app so the user can sign in here’s an example of how to code this val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay activatesamsungpay 3 1 10 updating the samsung wallet app the samsungpay class provides the following api method to update the samsung wallet app on the device fun gotoupdatepage gotoupdatepage is called to update samsung wallet app on the same device on which the partner app is running as with all api calls, the partner app must first check the samsung pay status with getsamsungpaystatus if this returns spay_not_ready and extra_error_reason is error_spay_app_need_to_update, then the partner app needs to display an appropriate message to the user and call gotoupdatepage , which launches the samsung pay update page the following code sample reflects how to update samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay gotoupdatepage 3 1 11 in-app online the main classes and interfaces involved here are samsungpay– class for a merchant app to get samsung pay sdk information and the status of samsung pay on the device paymentmanager – class to provide payment/transaction functionality cardinfolistener – interface for requestcardinfo result callbacks from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet; payment information is provided with a success callback and must be used by the merchant app for processing the payment the flow pictured next captures the essential online payment api process between merchant apps integrated with the samsung pay sdk and samsung wallet and the merchant’s payment gateway pg 3 1 12 api flow for in-app payments the api flow for samsung pay in-app payments involves a series of operations that ensure secure, seamless, and verified payment processing between the merchant app, samsung wallet, and the payment gateway pg these steps are illustrated in the flow diagram above and described below check the ready status of samsung pay use samsungpay getsamsungpaystatus to verify whether samsung pay is installed and supported on the device samsung pay is activated and ready for transactions the user has completed mandatory updates and account setup start the payment manager to establish the service binding and verify the merchant app establish a binding between your app and the samsung wallet app validate that the merchant app is authorized and registered prepare the sdk to handle payment operations get payment card information and the payment amount, including updates this step also includes displaying eligible cards to the user allowing the user to select a card for the transaction collecting or updating the payment amount get/update the user’s billing and shipping addresses, including an updated payment amount if shipping charges will be incurred if required by the transaction retrieve or update the user’s billing and shipping address recalculate and update the total payment amount e g , shipping cost impact authenticate the user trigger authentication via trusted user interface tui , using biometrics or other secure methods supported by samsung wallet submit payment information to pg this ensures the user has authorized the transaction send the tokenized payment data received from samsung pay to your designated payment gateway pg for transaction processing this can be done via a direct merchant server-to-pg connection, or samsung pg interface server if applicable verify transaction success or failure receive confirmation of transaction success or failure from the payment gateway communicate the result back to the user and update your app's ui and backend accordingly 3 1 13 token modes network vs gateway to complete the payment, the merchant’s designated payment gateway pg handles one of two types of tokens gateway tokens indirect or network tokens direct the samsung pay sdk supports both types the essential difference between the two types is who decrypts the token information network tokens require that the merchant app handles decryption of the token bundle or work with the pg to handle decryption, whereas gateway token decryption is handled by the pg via the samsung-pg interface server network token mode direct user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information is passed from the samsung pay app to the pg through the merchant app via the pg sdk applying the merchant's private key, pg decrypts the payment information structure and processes the payment through the acquirer and payment network upon receiving authorization or rejection, pg notifies the merchant app through its pg sdk gateway token mode indirect user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information and the partner id are passed to the samsung-pg interface server samsung-pg interface server sends a transaction authorization request to the pg on behalf of the merchant; pg authenticates the partner id before generating a transaction reference id reference id is passed to merchant app via sdk callback merchant app then passes the reference id to the pg for payment process execution samsung-pg interface server returns the payment token to the pg i e , gateway token it received from samsung pay app in step 2 pg continues payment processing with the acquirer and payment network the result approved/declined is returned to the merchant app on the device for display to the user check with your pg to determine its specific requirements for payment processing regardless of the pg model employed, direct or indirect, the goal is to offer samsung pay as a secure payment method within your merchant app the most common use case involves the following general steps to make a purchase, the user selects to “buy” or got to checkout after adding items to a shopping cart now in checkout, the user selects a payment option; for example, either the merchant’s “standard” method or samsung pay upon selecting samsung pay, the user is presented with a payment sheet that allows for card selection and shipping address confirmation with the option to add/modify information for this order, whereupon the user makes payment card selection from the list of enrolled cards chooses to change or add the delivery address enters required address information in the form presented and saves it authenticates the payment method, amount, and delivery with a biometric verification fingerprint, iris… or pin 3 1 14 checking registered/enrolled card information before displaying the samsung pay button, a partner app can query card brand information for the user’s currently enrolled payment cards in samsung wallet to determine if payment is supported with the enrolled card for example, if a merchant app accepts one card brand exclusively but the user has not registered any cards matching this brand in samsung wallet, the merchant app needs to determine whether or not to display the samsung pay button for this purchase checkout to query the card brand, use the requestcardinfo api method of the paymentmanager class the requestfilter is optional bundle data reserved for future use the merchant app does not need to set a value for it now however, before calling this method, cardinfolistener must be registered so its listener can provide the following events onresult - called when the samsung pay sdk returns card information from samsung wallet; returns information about enrolled cards or is empty if no card is registered onfailure - called when the query fails; for example, if sdk service in the samsung wallet app ends abnormally the following snippet shows how to retrieve the list of supported card brands from samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val paymentmanager = paymentmanager context, partnerinfo paymentmanager requestcardinfo bundle , cardinfolistener // get card brand list //cardinfolistener is for listening requestcardinfo callback events val cardinfolistener cardinfolistener = object cardinfolistener { // this callback is received when the card information is received successfully override fun onresult cardresponse list<cardinfo> { var visacount = 0 var mccount = 0 var amexcount = 0 var dscount = 0 var brandstrings = "card info " var brand spaysdk brand? for i in cardresponse indices { brand = cardresponse[i] brand when brand { spaysdk brand americanexpress -> amexcount++ spaysdk brand mastercard -> mccount++ spaysdk brand visa -> visacount++ spaysdk brand discover -> dscount++ else -> { /* other card brands */ } } } brandstrings += " vi = $visacount, mc = $mccount, ax = $amexcount, ds = $dscount" log d tag, "cardinfolistener onresult $brandstrings" toast maketext context, "cardinfolistener onresult" + brandstrings, toast length_long show } /* * this callback is received when the card information cannot be retrieved * for example, when sdk service in the samsung wallet app dies abnormally */ override fun onfailure errorcode int, errordata bundle { //called when an error occurs during in-app cryptogram generation toast maketext context, "cardinfolistener onfailure " + errorcode, toast length_long show } } 3 1 15 creating a transaction request upon successful initialization of the samsungpay class, the merchant app needs to create a transaction request with payment information note as of sdk v2 0 00, the normal payment sheet is deprecated all merchant apps must now use the custom payment sheet, which offers more dynamic controls for tailoring the ui look and feel with additional customer order and payment data merchant app developers choosing to temporarily continue offering the normal sheet will need to configure their android manifest to reflect the pre-2 0 00 version of the sdk used to implement their app’s existing normal sheet, although this is not recommended in all cases, merchant app developers should update their apps with the latest version of the sdk as soon as possible to avoid timing out using an earlier version of the sdk when responding to samsung pay callbacks using the custom payment sheet to initiate a payment transaction with samsung pay’s custom payment sheet, your merchant app must populate the following mandatory fields in customsheetpaymentinfo merchant name - as it will appear in samsung pay’s payment sheet, as well as the user's card account statement amount - the constituent transaction properties currency, item price, shipping price, tax, total price which together determine the total amount the user is agreeing to pay the merchant cautionnot populating the mandatory fields throws an illegalargumentexception optionally, the following fields can be added to the payment information merchant id- can be used for the merchant’s own designated purpose at its discretion unless the merchant uses an indirect pg like stripe or braintree if an indirect pg is used, this field must be set to the merchant’s payment gateway id fetched from the samsung pay developers portal merchant id is mandatory if a merchant requests with a mada token, this field should be included in the payload order number - usually created by the merchant app via interaction with a pg this number is required for refunds and chargebacks in the case of visa cards, the value is mandatory the allowed characters are [a-z][a-z][0-9,-] and the length of the value can be up to 36 characters address - the user’s billing and/or shipping address see applying an addresscontrol for details allowed card brands - specifies card brands accepted by the merchant if no brand is specified, all brands are accepted by default if at least one brand is specified, all other card brands not specified are set to "card not supported’ on the payment sheet here’s the 'customsheetpaymentinfo' structure class customsheetpaymentinfo parcelable { private val version string? = null private val merchantid string? = null private val merchantname string? = null private val ordernumber string? = null private val addressinpaymentsheet addressinpaymentsheet = addressinpaymentsheet do_not_show private val allowedcardbrand list<spaysdk brand>? = null private val cardinfo cardinfo? = null private val iscardholdernamerequired = false private val isrecurring = false private val merchantcountrycode string? = null private val customsheet customsheet? = null private val extrapaymentinfo bundle? = null } your merchant app sends this customsheetpaymentinfo to samsung wallet via the applicable samsung pay sdk api methods upon successful user authentication in direct mode, samsung wallet returns the above "payment info" structure and a result string the result string is forwarded to the pg by your merchant app to complete the transaction it will vary based on the pg you’re using note if you want to add any other information for any card brand, you can add them in the extrapaymentinfo bundle the following example demonstrates how to populate customsheet in the customsheetpaymentinfo class see sample merchant app using custom payment sheet below for example usage of each customsheet control /* * make user's transaction details * the merchant app should send customsheetpaymentinfo to samsung wallet via * the applicable samsung pay sdk api method for the operation being invoked */ private fun makecustomsheetpaymentinfo customsheetpaymentinfo { val brandlist = arraylist<spaysdk brand> // if the supported brand is not specified, all card brands in samsung wallet are // listed in the payment sheet brandlist add paymentmanager brand visa brandlist add paymentmanager brand mastercard brandlist add paymentmanager brand americanexpress /* * make the sheetcontrols you want and add them to custom sheet * place each control in sequence with amountboxcontrol listed last */ val customsheet = customsheet customsheet addcontrol makebillingaddresscontrol customsheet addcontrol makeshippingaddresscontrol customsheet addcontrol makeplaintextcontrol customsheet addcontrol makeshippingmethodspinnercontrol customsheet addcontrol makeamountcontrol val extrapaymentinfo = bundle /* * you can add transaction type for mada card brand * the supported values are purchase and preauthorization * if you don't set any value, the default value is purchase */ extrapaymentinfo putstring spaysdk extra_online_transaction_type, spaysdk transactiontype preauthorization tostring val customsheetpaymentinfo = customsheetpaymentinfo builder setmerchantid "123456" setmerchantname "sample merchant" // merchant requires billing address from samsung wallet and // sends the shipping address to samsung wallet // show both billing and shipping address on the payment sheet setaddressinpaymentsheet customsheetpaymentinfo addressinpaymentsheet need_billing_send_shipping setallowedcardbrands brandlist setcardholdernameenabled true setrecurringenabled false setcustomsheet customsheet setextrapaymentinfo extrapaymentinfo build return customsheetpaymentinfo } 3 1 16 requesting payment with a custom payment sheet the startinapppaywithcustomsheet method of the paymentmanager class is applied to request payment using a custom payment sheet in samsung wallet the two methods are defined as follows startinapppaywithcustomsheet - initiates the payment request with a custom payment sheet the payment sheet persists for 5 minutes after the api is called if the time limit expires, the transaction fails updatesheet - must be called to update current payment sheet as of api level 1 5, a merchant app can update the custom sheet with a custom error message refer to updating sheet with custom error message when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from it, the user can select a registered card for payment and change the billing and shipping addresses, as necessary the result is delivered to customsheettransactioninfolistener, which provides the following events onsuccess - called when samsung pay confirms payment it provides the customsheetpaymentinfo object and the paymentcredential json string customsheetpaymentinfo is used for the current transaction it contains amount, shippingaddress, merchantid, merchantname, ordernumber api methods exclusively available in the onsuccess callback comprise getpaymentcardlast4dpan – returns the last 4 digits of the user's digitized personal/primary identification number dpan getpaymentcardlast4fpan – returns the last 4 digits of the user's funding personal/primary identification number fpan getpaymentcardbrand – returns the brand of the card used for the transaction getpaymentcurrencycode – returns the iso currency code in which the transaction is valued getpaymentshippingaddress – returns the shipping/delivery address for the transaction getpaymentshippingmethod – returns the shipping method for the transaction for pgs using the direct model network tokens , the paymentcredential is a json object containing encrypted cryptogram which can be passed to the pg pgs using the indirect model gateway tokens like stripe, it is a json object containing reference card reference – a token id generated by the pg and status i e , authorized, pending, charged, or refunded refer to payment credential sample for details oncardinfoupdated - called when the user changes the payment card in this callback, updatesheet method must be called to update current payment sheet onfailure - called when the transaction fails; returns the error code and errordata bundle for the failure here’s how to call the startinapppaywithcustomsheet method of the paymentmanager class /* * customsheettransactioninfolistener is for listening callback events of in-app custom sheet payment * this is invoked when card is changed by the user on the custom payment sheet, * and also with the success or failure of online in-app payment */ private val transactionlistener = object customsheettransactioninfolistener { // this callback is received when the user changes card on the custom payment sheet in samsung pay override fun oncardinfoupdated selectedcardinfo cardinfo, customsheet customsheet { /* * called when the user changes card in samsung wallet * newly selected cardinfo is passed so merchant app can update transaction amount * based on different card if needed , */ val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 //item price amountboxcontrol updatevalue product_tax_id, 50 0 // sales tax amountboxcontrol updatevalue product_shipping_id, 10 0 // shipping fee amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" // additional item status amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only // grand total customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e java lang illegalstateexception { e printstacktrace } catch e java lang nullpointerexception { e printstacktrace } } /* * this callback is received when the payment is approved by the user and the transaction payload * is generated payload can be an encrypted cryptogram network token mode or the pg's token * reference id gateway token mode */ override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle { /* * called when samsung pay creates the transaction cryptogram, which merchant app then sends * to merchant server or pg to complete in-app payment */ try { val dpan = response cardinfo cardmetadata getstring spaysdk extra_last4_dpan, "" val fpan = response cardinfo cardmetadata getstring spaysdk extra_last4_fpan, "" toast maketext context, "dpan " + dpan + "fpan " + fpan, toast length_long show } catch e java lang nullpointerexception { e printstacktrace } toast maketext context, "transaction onsuccess", toast length_long show } override fun onfailure errorcode int, errordata bundle { // called when an error occurs during cryptogram generation toast maketext context, "transaction onfailure $errorcode", toast length_long show } } private fun startinapppaywithcustomsheet { // show custom payment sheet try { val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle paymentmanager = paymentmanager context, partnerinfo // request payment using samsung wallet paymentmanager startinapppaywithcustomsheet makecustomsheetpaymentinfo , transactionlistener } catch e illegalstateexception { e printstacktrace } catch e numberformatexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } catch e illegalargumentexception { e printstacktrace } } when an address is provided by samsung wallet, onaddressupdated is called whenever address information is updated in the custom payment sheet you can use the updatesheet method to update the shipping fee or any other relevant information in the payment sheet set the errorcode to determine if the address provided by samsung wallet app is invalid, out of delivery, or does not exist for example, when the merchant does not support the product delivery to the designated location billing address from samsung wallet is not valid for tax recalculation for all such cases, the merchant app should call updatesheet with one of the following error codes error_shipping_address_invalid error_shipping_address_unable_to_ship error_shipping_address_not_exist error_billing_address_invalid error_billing_address_not_exist the sample code included below under applying the address control demonstrates how to use the updatesheet method for 'addresscontrol' in the payment sheet 3 1 17 payment credential sample the paymentcredential is the resulting output of the startinapppaywithcustomsheet method the structure varies depending on the pg you’re using and the integration model—direct or indirect the following paymentcredential is for a visa card for pg using direct network token mode – e g first data, adyen, visa cybersourse sample paymentcredential json output using jwe-only { "billing_address" {"city" "billingcity","country" "usa","state_province" "ca","street" "billingaddr1","zip_postal_code" "123456"}, "card_last4digits" "1122", "3ds" {"data" "eyjhbgcioijsu0exxzuilcjrawqioijcak91a1h2afv4wu5wofiwvgs2y25oactzwwfqzxhiehrvz0vfdhlhyy9npsisinr5cci6ikppu0uilcjjagfubmvsu2vjdxjpdhldb250zxh0ijoiulnbx1blssisimvuyyi6ikexmjhhq00ifq fg2oouvhdgkkivyba2s5kturpwueujkzeyxz7n6kalhqahszv3p5jabaoj-rokcznfjdg3qierzjktu7zxst9gwv4oclahpfdw64w0x6ttaxeyjiivkjug-edxxtwajeyeikgc68wehf1cltsqg4zlwi6upvcaywdppbn0hl0c5wcf5az4wabytv_fda5ahguypne70keqrtwdlacw9mzejx2xth7msd9ohoulr8luq-7gha17jhoobwgmoq9q0haocnm0ljwiuhkoryyu-njulnbkk8fzus_aiumgdv2yn9ygfqilmculb0vwuf0yekx6isgaxi0zqhliusjkcz_w auzzxog46lnrtk3q qe2llws30vzh-zduue8b045cnfrm2p-rjzgbnzchels3v26n64cfg1av5mtp5f-fswbj3ntp5x4v1nk8fmdy0uspxzemfvl5badgac7w9frxt6x5xv1fqu6-q-zkbxcb9bygownt983bckoe1bd5djxfbodlrc4j68ikdjc5m3lebdx6hv0aqzkmilch-jevl3awqykbny4vj7m3fizw7u1prli2zfwukxdfs4vwv3bpm4qudemvnhxj qtymdmn4ne93juljnmwkjg","type" "s","version" "100"}, "merchant_ref" "merchantid", "method" "3ds", "recurring_payment" false } decrypt using the merchant’s private key below is sample private key -----begin rsa private key----- miieowibaakcaqea4lzyjqr+dqd/xleoxct9jwtjxhd2ptjke9djtmijki0h2oc2ghow4ujhhy/1jvft2+zcnjtoxuvlp+76/dwa3bcwfrj+fpp6x5kkylpb+djdyo1ttumltnqcwymjb3u7jbc+xr4vkfrzqjxke7xhn/sbb82ue8c3smzvkynuji<…> -----end rsa private key----- the decrypted output will be similar to this { "amount" "1000", "currency_code" "usd", "utc" "1490266732173", "eci_indicator" "5", "tokenpan" "1234567890123456", "tokenpanexpiration" "0420", //the format is **mmyy** "cryptogram" "ak+zkbpmcorcabcd3agraoacfa==" } note for amex, it needs to be displayed in the format “yymmdd”, so i would like to add this processing the payload depending on the structure of the payment processing api provided by your pg, your merchant app can send either of these directly to the pg entire paymentcredential output extracted “3ds” part only consult your pg documentation for specific guidance when using indirect model e g stripe in indirect gateway token mode, paymentcredential is the pg’s token reference id and its status here’s a sample of the json output { "reference" "tok_18rje5e6szui23f2mefakep7", "status" "authorized" } for stripe, your merchant app should be able to pass this token object directly to charge or another appropriate payment processing api provided by the pg 3 1 18 push provisioning the following diagram illustrates the flows of the app-to-app apis for payment card push provisioning the main classes involved are samsung pay – for fetching samsung wallet app status and wallet information on the device paymentmanager – for push provisioning and invoking favorite cards payment functionalities cardmanager – for payment card management watchmanager – for all functions related to samsung pay watch 3 1 19 requesting registered card list in the samsung pay the getallcards method of the cardmanager class is used to request a list of all cards currently registered/enrolled in samsung wallet on the same device running the issuer’s app to succeed, the issuer app must pass valid partnerinfo to 'cardmanager' for caller verification 'cardfilter' narrows the card list returned by samsung wallet to the issuername specified please be noted that getsamsungpaystatus must be called before getallcards getallcards could not return a cards list when getsamsungpaystatus responds with a code other than spay_ready noteto get the cards list of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class as of api level sdk version 1 4, cardfilter retrieves this information from the samsung pay developers portal certain issuers may need to register multiple issuer name s with the portal, depending on their app and/or the requirements of their token service provider tsp the getallcards parameter cardfilter matches the issuer name s specified with those registered in the portal only complete matches are returned this method is typically called when your partner app wants to check the card status it does not need to be called every time the partner app resumes therefore, you should create the card list with the 'oncreate ' method, rather than the 'onresume ' method the result of a getallcards call is delivered to getcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides the list of all filtered cards and their status card information includes cardid, cardstatus, and extra cardinfo data onfail - called when the operation fails here’s an example of how to use the 'getallcards ' api method in your issuer app val cardfilter = bundle // since api level 1 4, cardfilter param is ignored partner does not need to use it here // it is retrieved from the samsung pay developers portal cardfilter putstring cardmanager extra_issuer_name, issuername cardmanager getallcards null, object getcardlistener{ override fun onsuccess cards mutablelist<card>? { // getting card status is success if cards == null || cards isempty { log e tag, "no card is found" return } else { // perform operation with card data for s in cards { log d tag, "cardid " + s cardid + "cardstatus " + s cardstatus // get extra card data if s cardinfo != null { val cardid = s cardid // since api level 2 13, id from card network val last4fpan = s cardinfo getstring cardmanager extra_last4_fpan val last4dpan = s cardinfo getstring cardmanager extra_last4_dpan val cardtype = s cardinfo getstring cardmanager extra_card_type val cardissuername = s cardinfo getstring cardmanager extra_issuer_name log d tag, "last4fpan $last4fpan last4dpan $last4dpan cardid $cardid" } } } } override fun onfail errorcode int, errordata bundle? { // getting card status is failed } } 3 1 20 getting wallet information the samsungpay class provides the getwalletinfo api method, which is called to request wallet information from the samsung wallet app prior to calling the addcard api, when you want to avoid duplicate provisioning your issuer app uses this information to uniquely identify the user and the samsung wallet app on a particular device wallet device management id, device id, and wallet user id note to get wallet information of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class fun getwalletinfo list<string> keys, statuslistener callback the following example demonstrates how to use it // set the serviceid assigned by the samsung pay developers portal during service creation val serviceid = "sampleserviceid" val bundle = bundle bundle putstring samsungpay extra_issuer_name, "issuer name" bundle putstring samsungpay partner_service_type, servicetype app2app tostring val pinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, pinfo // add bundle keys to get wallet information from samsung pay // this information can be delivered to the partner server for an eligibility check val keys = arraylist<string> keys add samsungpay wallet_user_id keys add samsungpay device_id samsungpay getwalletinfo keys, object statuslistener{ override fun onsuccess status int, walletdata bundle { // log d tag, "dowalletinfo onsuccess callback is called" ; // for visa, deviceid can be set to "clientdeviceid" as defined by visa val deviceid = walletdata getstring samsungpay device_id // for visa, walletuserid can be set to "clientwalletaccountid" as defined by visa val walletuserid = walletdata getstring samsungpay wallet_user_id } override fun onfail errorcode int, errordata bundle? { log e tag, "onfail callback is called, errorcode " + errorcode ; // check the extra error codes in the errordata bundle for all the reasons in // samsungpay extra_error_reason, when provided } } 3 1 21 adding a card to samsung pay your issuer app calls the 'addcard ' api method of cardmanager to add a card to samsung wallet by providing the required card details, your app can make it convenient and easy for users to add their bank-issued debit/credit cards to samsung wallet directly from your app without additional steps, like switching between apps note if you want to add a card to samsung pay watch, you have to use the 'watchmanager' class instead of the cardmanager class for most issuers, getwalletinfo suffices for requesting current wallet information the response from samsung wallet tells the issuer app whether or not the user’s card has already been added to samsung wallet or is ineligible for provisioning it is therefore recommended that you call getwalletinfo before displaying the add to samsung pay button if the card is eligible, display the “add” button and, if the user taps it, call addcard important remember to obtain the governing issuer implementation guide s and specifications from the respective card network and implement each network’s required handling in your partner app and server the 'addcard ' result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcard api method in your issuer app val cardtype = card card_type_credit val tokenizationprovider string = addcardinfo provider_abcd // samsung pay does not provide detailed payload information; generate the provisioning payload in // accordance with your card network specifications val testpayload = "thisistestpayloadcardinfo1234567890" //bin bank identification number can be set to issuerid it is mandatory for some card network val issuerid = "123456" val carddetail = bundle carddetail putstring extra_provision_payload, testpayload carddetail putstring extra_issuer_id, issuerid val addcardinfo = addcardinfo cardtype, tokenizationprovider, carddetail cardmanager addcard addcardinfo, object addcardlistener { override fun onsuccess status int, card card? { log d tag, "onsuccess callback is called" ; } override fun onfail errorcode int, errordata bundle? { log d tag, "onfail callback is called" ; // check some extra error codes in the errordata bundle // such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } override fun onprogress currentcount int, totalcount int, bundledata bundle? { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } 3 1 22 adding a co-badge card to samsung pay co-badge payment cards combine two payment brands/networks to add a co-badge card through push provisioning, you must provide two different card network details one for the primary card network and another for the secondary card network issuer app calls the addcobadgecard api method of cardmanager to add a co-badge card to samsung pay in most cases, calling getwalletinfo will suffice to request current wallet information the response from samsung pay indicates whether the user's co-badge card has already been added to samsung pay or is ineligible for provisioning therefore, it is advisable to call getwalletinfo before displaying the add to samsung pay button if the co-badge card is eligible, display the "add" button and, upon user tapping, call addcobadgecard important please remember to refer to the relevant issuer implementation guide s and specifications provided by each card network and ensure that your partner app and server adhere to their specific requirements the addcobadgecard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcobadgecard api method in your issuer app notesamsung pay does not provide detailed payload information; generate the provisioning payload in accordance with your card networks specifications string cardtype = card card_type_credit; string primarytokenizationprovider = addcardinfo provider_abcd; //provide your primary card network payload string testprimarypayload = "thisistestprimarypayloadcardinfo1234567890"; string secondarytokenizationprovider = addcardinfo provider_efgh; //provide your secondary card network payload string testsecondarypayload = "thisistestsecondarypayloadcardinfo1234567890"; bundle primarycarddetail = new bundle ; primarycarddetail putstring addcardinfo extra_provision_payload, testprimarypayload ; addcardinfo primaryaddcardinfo = new addcardinfo cardtype, primarytokenizationprovider, primarycarddetail ; bundle secondarycarddetail = new bundle ; secondarycarddetail putstring addcardinfo extra_provision_payload, testsecondarypayload ; addcardinfo secondaryaddcardinfo = new addcardinfo cardtype, secondarytokenizationprovider, secondarycarddetail ; cardmanager addcobadgecard primaryaddcardinfo, secondaryaddcardinfo, new addcardlistener { @override public void onsuccess int status, card card { log d tag, "onsuccess callback is called" ; } @override public void onfail int error, bundle errordata { log d tag, "onfail callback is called" ; check some extra error codes in the errordata bundle such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } @override public void onprogress int currentcount, int totalcount, bundle bundledata { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } ; 3 1 23 sample applications sample apps, use cases, and ux strategies are included here to aid you in understanding the sdk and implementing it in your application sample source code and apks can be downloaded from download section sample merchant app included with the samsung pay sdk to demonstrate its features, the sample merchant app shows you how to implement the payment sheet’s dynamic controls to leverage additional customer order and payment data and/or create a more custom ui look and feel the following payment sheet controls are available addresscontrol plaintextcontrol amountboxcontrol spinnercontrol controls are applied to suit a particular purpose or need for example, displaying a promotion notice in the payment sheet using the plaintextcontrol applying an addresscontrol this control is used to display the billing or shipping address on the payment sheet based on samsung pay’s my info user profile or addresses provided by your merchant app during the transaction request when creating the control, controlld and sheetitemtype are needed to distinguish the billing address from the shipping address otherwise, your merchant app sets the following properties address title – displays a merchant-defined title on the payment sheet if empty, the default title such as “billing address” is displayed address – provides various methods to retrieve address details the merchant app can retrieve the phone number using the 'getphonenumber' method of 'customsheetpaymentinfo' address starting from api level 1 5, the addressee’s email address has also been added retrieve the email address using 'getemail' you can also set a display option for the shipping address with 'setdisplayoption' for more information, see the samsung pay sdk-api reference javadoc and the sample code included with the samsung pay sdk sheetupdatedlistener – used to capture the response from the samsung wallet app; merchant app must deliver to the samsung wallet app an amountboxcontrol to display payment information on a custom payment sheet when the onresult callback is called, the updatesheet method must also be called to update the current payment sheet errorcode – used for containing error codes directly related to the address the workflows for billingaddresscontrol the workflow for shippingaddresscontrol the following sample code demonstrates use of addresscontrol on the payment sheet fun makebillingaddresscontrol addresscontrol { val billingaddresscontrol = if !iszipcodeonly { // for billing address addresscontrol billing_address_id, sheetitemtype billing_address billingaddresscontrol addresstitle = "billing address" } else { /* * for billing address with zip code only * since api level 2 19, sheetitemtype zip_only_address * for us country only */ addresscontrol billing_address_id, sheetitemtype zip_only_address billingaddresscontrol addresstitle = "zip code" } //this callback is received when controls are updated billingaddresscontrol sheetupdatedlistener = sheetupdatedlistener return billingaddresscontrol } //listener for billing or zip code only billing address fun sheetupdatedlistener sheetupdatedlistener { return sheetupdatedlistener { updatedcontrolid string, customsheet customsheet -> log d tag, "onresult billingaddresscontrol updatedcontrolid $updatedcontrolid" val addresscontrol = customsheet getsheetcontrol updatedcontrolid as addresscontrol val billaddress = addresscontrol address //validate only zipcode or billing address and set errorcode if needed if addresscontrol sheetitem sheetitemtype == sheetitemtype zip_only_address { val errorcode int = validatezipcodebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } else { val errorcode = validatebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } // update transaction values val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 amountboxcontrol updatevalue product_tax_id, 50 0 amountboxcontrol updatevalue product_shipping_id, 10 0 amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol try { // call updatesheet for the full amountboxcontrol; mandatory paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } } // for shipping address fun makeshippingaddresscontrol addresscontrol { val shippingaddresscontrol = addresscontrol shipping_address_id, sheetitemtype shipping_address shippingaddresscontrol addresstitle = "shipping address" val shippingaddress = customsheetpaymentinfo address builde setaddressee "name" setaddressline1 "addline1" setaddressline2 "addline2" setcity "city" setstate "state" setcountrycode "usa" setpostalcode "zip" setphonenumber "555-123-1234" setemail "user@samsung com" build shippingaddresscontrol address = shippingaddress /* * set address display option on custom payment sheet * if displayoption is not set, then default addresscontrol is displayed on custom payment sheet * the possible values are combination of below constants * {display_option_addressee} * {display_option_address} * {display_option_phone_number} * {display_option_email} */ var displayoption_val = addressconstants display_option_addressee // addressee is mandatory displayoption_val += addressconstants display_option_address displayoption_val += addressconstants display_option_phone_number displayoption_val += addressconstants display_option_email shippingaddresscontrol displayoption = displayoption_val return shippingaddresscontrol } here’s how these controls display on a custom payment sheet billing address control zip code billing address control shipping address control applying a plaintextcontrol this control is used for displaying a title with two lines of text or a single line of text without a title on the payment sheet when allocating this control, a controlid is needed the merchant app sets both the title, as applicable, and the text diagrammed below is the flow between your merchant app and samsung pay plaintextcontrol flow the merchant app code invoking this class would look something like the following fun makeplaintextcontrol plaintextcontrol { val plaintextcontrol = plaintextcontrol "exampleplaintextcontrolid" plaintextcontrol settext "plain text [example]", "this is example of plaintextcontrol" return plaintextcontrol } and this is how it displays on the custom payment sheet applying an amountboxcontrol amountboxcontrol is used for displaying purchase amount information on the payment sheet it requires a controlid and a currencycode, and consists of item s and amounttotal, defined as follows and diagrammed on the next page item – consists of id, title, price, and extraprice if there is an extraprice in amountboxcontrol, its text is displayed on the payment sheet even though there is an actual numerical price value if there is no extraprice, then currencycode with the price value is displayed amounttotal – consists of price and displayoption the displayoption allows predefined strings only your merchant app can set the text to “estimated amount”, “amount pending”, “pending”, “free”, and so forth the ui format for the string is different for each option note the setamounttotal api may accept strings that are not predefined as an argument, but it generates an invalid parameter condition or returns an error code in such cases for details, see the javadoc samsung pay sdk-api reference, available in the documentation folder of your downloaded sdk package here’s a coding example to demonstrate the use of amountboxcontrol in a payment sheet fun makeamountcontrol amountboxcontrol { val amountboxcontrol = amountboxcontrol amount_control_id, "usd" amountboxcontrol additem product_item_id, "item", 1000 0, "" amountboxcontrol additem product_tax_id, "tax", 50 0, "" amountboxcontrol additem product_shipping_id, "shipping", 10 0, "" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only amountboxcontrol additem 3, product_fuel_id, "fuel", 0 0, "pending" return amountboxcontrol } the merchant app can also add new items using the 'additem' method of 'amountcontrolbox' during callback important your merchant app needs to call the updatevalue item_id method of amountboxcontrol to update each amount item then call customsheet updatecontrol to make the changes take effect in customsheet eventually, paymentmanager updatesheet 'customsheet' must be called to let samsung pay know that no further action is pending in the merchant app when the custom sheet is updated, the merchant can add new items to amountboxcontrol for example, if the user selects a specific card in the payment sheet which the merchant offers, a discount item can be added via the updatesheet // example for adding new item while updating values val amount = sheet getsheetcontroll "id_amount" amount updatevalue "itemid", 900 0 amount updatevalue "taxid", 50 0 amount updatevalue "shippingid", 10 0 amount updatevalue "fuelid", 0 0 // add “discount” item amount additem 4, "discountid", "discount", -60 0, "" amount setamounttotal 1000 0, amountconstants format_total_price_only sheet updatecontrol amount // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet sheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } applying the spinnercontrol this control is used for displaying spinner options on a payment sheet when creating the control, controlid, title, and sheetitemtype are needed to distinguish between the types of spinner to be displayed your merchant app sets the following properties with spinnercontrol title – the merchant-defined spinner title to appear the payment sheet sheetitemtype – provides various types of spinner a shipping_method_spinner and an installment_spinner are the two types of spinner available as of api level 1 6 note shipping_method_spinner can be used when the shipping address comes from the samsung wallet app; i e , when the customsheetpaymentinfo addressinpaymentsheet option is set to need_billing_and_shipping or need_ shipping_spay when the shipping address is provided by the merchant app send_shipping or need_billing_ send_shipping , it is not changeable in the payment sheet the shipping fee if applied must be pre-calculated on the merchant app side here’s an example of constructing a spinnercontrol within your merchant app // construct spinnercontrol for shipping method val spinnercontrol = spinnercontrol shippingmethod_spinner_id, "shipping method ", sheetitemtype shipping_method_spinner // let the user can select one shipping method option on the payment sheet spinnercontrol additem "shipping_method_1", getstring android r string standard_shipping_free spinnercontrol additem "shipping_method_2", getstring android r string twoday_shipping spinnercontrol additem "shipping_method_3", getstring android r string oneday_shipping spinnercontrol selecteditemid = "shipping_method_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol when spinnercontrol selecteditemid { "shipping_method_1" -> amountboxcontrol updatevalue product_shipping_id, 10 0 "shipping_method_2" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 1 "shipping_method_3" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 2 else -> amountboxcontrol updatevalue product_shipping_id, 10 0 } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_shipping_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } // construct spinnercontrol for installment plan val spinnercontrol = spinnercontrol installment_spinner_id, "installment", sheetitemtype installment_spinner spinnercontrol additem "installment_1", "1 month without interest" spinnercontrol additem "installment_2", "2 months with 2% monthly interest" spinnercontrol additem "installment_3", "3 months with 2 2% monthly interest" spinnercontrol selecteditemid = "installment_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol val totalinterest = 0 0 when spinnercontrol selecteditemid { "installment1" -> amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment2" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment3" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest else -> amountboxcontrol updatevalue product_total_interest_id, totalinterest } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_total_interest_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } update sheet with custom error message to display a custom error message on the payment sheet, use updatesheet with customerrormessage fun updatesheet sheet customsheet, errorcode int, customerrormessage string this api method is an extended version of the existing updatesheet sheet method which gives the merchant the ability to display a custom error message in the payment sheet’s authentication area it can be used to inform the user of any foreseen error scenarios encountered // update sheet with custom_messsage error code paymentmanager updatesheet customsheet, paymentmanager custom_message,"phone number entered is not valid please change your phone number " sample issuer app the samsung pay sdk also provides a sample issuer app to showcase samsung pay sdk features issuer app can add card to samsung wallet by selecting specific token service provider tsp from the dropdown menu to add cobadge card you need to select primary and secondary token service providers tsp from the dropdown menus for more information, refer to the samsung pay sdk api reference and sample code 3 1 24 api references
Develop Samsung Pay
apioverview package class tree index help package com samsung android sdk samsungpay v2 class spaysdk java lang object com samsung android sdk samsungpay v2 spaysdk direct known subclasses cardmanager, paymentmanager public abstract class spaysdk extends object this class allows to define samsung pay sdk information, common error codes, and constants since api level 1 1 nested class summary nested classes modifier and type class description static enum spaysdk brand this enumeration provides sdk supported card brands such as american express, mastercard, visa, discover, china unionpay, octopus, eci, pagobancomat, mada and elo static enum spaysdk servicetype this enumeration provides service types partners must set their service type in the partnerinfo when they call any apis static enum spaysdk transactiontype this value is specifically supported for mada tokens and will not apply to other token types field summary fields modifier and type field description static final string common_status_table this table shows the status codes used commonly status bundle keys bundle values spay_not_supported 0 extra_error_reason error_device_not_samsung -350 error_spay_pkg_not_found -351 error_spay_sdk_service_not_available -352 error_device_integrity_check_fail -353 error_spay_app_integrity_check_fail -360 error_android_platform_check_fail -361 spay_not_ready 1 extra_error_reason error_spay_setup_not_completed -356 error_spay_app_need_to_update -357 error_spay_internal -1 extra_error_reason error_server_internal -311 n/a n/a error_not_allowed -6 extra_error_reason error_invalid_parameter -12 error_sdk_not_supported_for_this_region -300 error_service_id_invalid -301 error_service_unavailable_for_this_region -302 error_partner_app_signature_mismatch -303 error_partner_app_version_not_supported -304 error_partner_app_blocked -305 error_user_not_registered_for_debug -306 error_service_not_approved_for_release -307 error_partner_not_approved -308 error_unauthorized_request_type -309 error_expired_or_invalid_debug_key -310 error_missing_information -354 error_unable_to_verify_caller -359 error_invalid_parameter -12 n/a n/a error_no_network -21 n/a n/a error_server_no_response -22 n/a n/a error_partner_info_invalid -99 extra_error_reason error_partner_sdk_api_level -10 error_partner_service_type -11 error_partner_sdk_version_not_allowed -358 error_initiation_fail -103 n/a n/a spay_not_allowed_temporally 3 extra_error_reason error_spay_connected_with_external_display -605 error_spay_fmm_lock -604 n/a n/a paymentmanager error_making_sheet_failed -115 n/a n/a static final string cryptogram_type_icc key to represent the icc cryptogram type of mastercard static final string cryptogram_type_ucaf key to represent the ucaf cryptogram type of mastercard static final string device_id key to represent unique device id static final string device_type_gear device type is gear static final string device_type_phone device type is phone static final int error_android_platform_check_fail this error indicates that android platform version check has failed for in-app payment, the samsung pay sdk requires android 6 0 m android api level 23 or later versions of the android os this is returned as extra_error_reason for spay_not_supported error static final int error_device_integrity_check_fail this error indicates that device integrity check has failed this is returned as extra_error_reason for spay_not_supported error static final int error_device_not_samsung this error indicates that the device is not a samsung device this is returned as extra_error_reason for spay_not_supported error static final int error_duplicated_sdk_api_called this error indicates that duplicate api called by partner static final int error_expired_or_invalid_debug_key this error indicates that debug key is invalid or expired this is returned as extra_error_reason for error_not_allowed error for example, if the partner app uses expired debug-api-key, then the partner app verification will be failed static final int error_initiation_fail this error indicates that session initiation or service binding has failed for example, if the service connection with samsung pay was not successful static final int error_invalid_parameter this error indicates that requested operation contains invalid parameter or invalid bundle key/value static final int error_missing_information this error indicates that some information of partner is missing this error code is returned as an extra_error_reason of error_not_allowed error for example, if the partner app does not deliver a required information to samsung pay to get the wallet information, then samsung pay will send this error to partner app also if the partner does not define the issuer name in samsung pay developer portal, samsung pay will send this error to partner app static final int error_no_network this error indicates that samsung pay is unable to connect to the server since there is no network for example, partner app tries to verify with server while network is not connected static final int error_none this error indicates that requested operation is success with no error static final int error_not_allowed this error indicates that requested operation is not allowed for example, partner app verification has failed in samsung pay server static final int error_not_found this error indicates that given card id is not found in samsung pay static final int error_not_supported this error indicates that requested operation is not supported in samsung pay static final int error_partner_app_blocked this error indicates that partner app version is removed/blocked by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is blocked, then the partner app verification will be failed static final int error_partner_app_signature_mismatch this error indicates that the app signature is different from the one registered from samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if different signature is used for signing apk, the partner app verification will be failed checking signature logic will be activated in case debug mode is "n" static final int error_partner_app_version_not_supported this error indicates that app version is not supported by samsung pay this is returned as extra_error_reason for error_not_allowed error for example, if the version registered from developer portal is higher than current version or no any version registered , then the partner app verification will be failed static final int error_partner_info_invalid this error indicates that partner information is invalid for example, partner app is using sdk version not allowed, invalid service type, wrong api level, and so on static final int error_partner_not_approved this error indicates that partner registration is not done on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is submitted but not approved, then the partner app verification will be failed static final int error_partner_sdk_api_level this error indicates that sdk api level is missing or invalid partner must set valid api level in the androidmanifest file static final int error_partner_sdk_version_not_allowed this error indicates that the partner app is using samsung pay sdk not allowed this is returned as extra_error_reason for error_partner_info_invalid error static final int error_partner_service_type this error indicates that the service type is invalid partner must set valid service type in partnerinfo when calling apis this is returned as extra_error_reason for spay_not_ready error static final int error_registration_fail this error indicates that the card provisioning has failed static final int error_sdk_not_supported_for_this_region this error indicates that the samsung pay sdk is not supported in particular region this is returned as extra_error_reason for error_not_allowed error for example, if the device is from the country that samsung pay sdk is not supported, then the partner app verification will be failed static final int error_server_internal this error indicates that server fails to proceed request due to unknown internal error this is returned as extra_error_reason for error_spay_internal error for example, if the server error occurred while the partner verification is going on, then the partner app verification will be failed static final int error_server_no_response this error indicates that server did not respond to the samsung pay request static final int error_service_id_invalid this error indicates that service id is not registered with the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if invalid service id was used in partner app, then the partner app verification will be failed static final int error_service_not_approved_for_release this error indicates that service version is not approved for release by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is not registered for release mode, then the partner app verification will be failed static final int error_service_unavailable_for_this_region this error indicates that sdk support is not available for partner's service in particular region static final int error_spay_app_integrity_check_fail this error indicates that samsung pay app integrity check has failed this is returned as extra_error_reason for spay_not_supported error static final int error_spay_app_need_to_update this error indicates that the samsung pay should be updated partner app need to ask user to update samsung pay app static final int error_spay_connected_with_external_display this error indicates that device is connected with an external display due to security reason, samsung pay cannot be launched at this moment in this case, partner can guide user to disconnect any external display if connected static final int error_spay_fmm_lock this error indicates that device is locked due to fmm find my mobile partner app needs to ask user to unlock the samsung pay app static final int error_spay_internal this error indicates that internal error has occurred while the requested operation is going on static final int error_spay_pkg_not_found this error indicates that the samsung pay application is not on the device this is returned as extra_error_reason for spay_not_supported error this could mean that the device does not support samsung pay static final int error_spay_sdk_service_not_available this error indicates that sdk service is not available on this device this is returned as extra_error_reason for spay_not_supported error static final int error_spay_setup_not_completed this error indicates that the samsung pay setup was not completed partner app need to ask user to set up samsung pay app static final int error_unable_to_verify_caller this error indicates that samsung pay is unable to verify partner app at this moment this is returned as extra_error_reason for error_not_allowed error for example, samsung pay tried to connect to the server and validate partner id, but the device does not have the network connectivity static final int error_unauthorized_request_type this error indicates that the partner is not authorized for this request type such as payment or enrollment this is returned as extra_error_reason for error_not_allowed error for example, if the merchant app calls enrollment api, then the partner app verification will be failed static final int error_user_canceled this error indicates that user has cancelled before completing the requested operation for example, user taps the cancel or back key on the payment sheet static final int error_user_not_registered_for_debug this error indicates that user account is not registered for using debug mode on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is in debug mode but the samsung account is not registered for the debug-api-key, then the partner app verification will be failed static final string extra_accept_combo_card key to represent that a merchant accepts combo card partner can use this key to let customers to choose debit/credit in case of combo card static final string extra_card_type key to represent card type the possible values are card card_type_credit_debit card card_type_credit card card_type_debit card card_type_gift card card_type_loyalty card card_type_transit static final string extra_country_code key to represent country code device country code iso 3166-1 alpha-2 static final string extra_cpf_holder_name key to get cpf holder name in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback static final string extra_cpf_number key to get cpf number in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback static final string extra_cryptogram_type key to represent the dsrp digital secure remote payments cryptogram type of mastercard static final string extra_device_card_limit_reached key to represent the maximum registered card number has reached or not static final string extra_device_type key to represent type of the device mobile or gear static final string extra_error_reason key to represent extra error reasons static final string extra_error_reason_message key to represent extra error reason messages static final string extra_issuer_name key to represent name of the issuer this key can be used in the bundle for partnerinfo string, bundle static final string extra_issuer_pkgname key to represent package name of the issuer app on android static final string extra_last4_dpan key to represent the last four digits of digitalized personal identification number dpan static final string extra_last4_fpan key to represent the last four digits of funding personal identification number fpan static final string extra_member_id key to represent member id of the issuer this is for korean issuers only static final string extra_merchant_ref_id key to set/get merchant reference id beyond marketplace app or service i e static final string extra_online_transaction_type static final string extra_partner_name key to represent name of the partner app this key can be used in the bundle for partnerinfo string, bundle static final string extra_request_id key to represent request id when a request is failed, tr will send this key to partner app static final string extra_require_cpf key to represent that a partner requires cpf partner can use this key to ask samsung pay to show cpf information in the payment sheet static final string extra_resolved_1 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_2 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_3 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_4 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_5 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_6 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_7 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string partner_service_type key to represent unique service type this key must be set in the bundle for partnerinfo string, bundle static final int spay_has_no_transit_card this code is returned if samsung pay doesn't have a registered transit card this is for korean issuers only static final int spay_has_transit_card this code is returned if samsung pay has a registered transit card this is for korean issuers only static final int spay_not_allowed_temporally samsung pay is not allowed temporally refer extra reason delivered with extra_error_reason static final int spay_not_ready samsung pay is not completely activated usually, this status code is returned if the user did not complete the mandatory update or if the user is not signed in with the samsung account yet in this case, partner app can call samsungpay activatesamsungpay api to launch samsung pay or can call samsungpay gotoupdatepage api to update samsung pay app static final int spay_not_supported samsung pay is not supported on this device usually, this status code is returned if the device is not compatible to run samsung pay or if the samsung pay app is not installed static final int spay_ready samsung pay is activated and ready to use usually, this status code is returned after user completes all the mandatory updates and is signed in static final string wallet_dm_id key to represent unique device management id static final string wallet_user_id key to represent user's wallet id method summary all methodsstatic methodsconcrete methods modifier and type method description static int getversioncode returns the version code of the samsung pay sdk static string getversionname returns the version name of the samsung pay sdk methods inherited from class java lang object equals, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait field details error_none public static final int error_none this error indicates that requested operation is success with no error see also constant field values error_spay_internal public static final int error_spay_internal this error indicates that internal error has occurred while the requested operation is going on see also constant field values error_not_supported public static final int error_not_supported this error indicates that requested operation is not supported in samsung pay see also constant field values error_not_found public static final int error_not_found this error indicates that given card id is not found in samsung pay see also constant field values error_not_allowed public static final int error_not_allowed this error indicates that requested operation is not allowed for example, partner app verification has failed in samsung pay server see also constant field values error_user_canceled public static final int error_user_canceled this error indicates that user has cancelled before completing the requested operation for example, user taps the cancel or back key on the payment sheet see also constant field values error_partner_sdk_api_level public static final int error_partner_sdk_api_level this error indicates that sdk api level is missing or invalid partner must set valid api level in the androidmanifest file minimum possible version is 1 4 also if the partner set the values defined in higher api level, samsung pay will send this error to partner app this is returned as extra_error_reason for error_partner_info_invalid error since api level 1 4 see also constant field values error_partner_service_type public static final int error_partner_service_type this error indicates that the service type is invalid partner must set valid service type in partnerinfo when calling apis this is returned as extra_error_reason for spay_not_ready error since api level 1 4 see also constant field values error_invalid_parameter public static final int error_invalid_parameter this error indicates that requested operation contains invalid parameter or invalid bundle key/value since api level 2 3 see also constant field values error_no_network public static final int error_no_network this error indicates that samsung pay is unable to connect to the server since there is no network for example, partner app tries to verify with server while network is not connected see also constant field values error_server_no_response public static final int error_server_no_response this error indicates that server did not respond to the samsung pay request see also constant field values error_partner_info_invalid public static final int error_partner_info_invalid this error indicates that partner information is invalid for example, partner app is using sdk version not allowed, invalid service type, wrong api level, and so on since api level 2 5 see also constant field values error_initiation_fail public static final int error_initiation_fail this error indicates that session initiation or service binding has failed for example, if the service connection with samsung pay was not successful see also constant field values error_registration_fail public static final int error_registration_fail this error indicates that the card provisioning has failed since api level 1 2 see also constant field values error_duplicated_sdk_api_called public static final int error_duplicated_sdk_api_called this error indicates that duplicate api called by partner since api level 2 1 see also constant field values error_sdk_not_supported_for_this_region public static final int error_sdk_not_supported_for_this_region this error indicates that the samsung pay sdk is not supported in particular region this is returned as extra_error_reason for error_not_allowed error for example, if the device is from the country that samsung pay sdk is not supported, then the partner app verification will be failed see also constant field values error_service_id_invalid public static final int error_service_id_invalid this error indicates that service id is not registered with the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if invalid service id was used in partner app, then the partner app verification will be failed since api level 2 5 see also constant field values error_service_unavailable_for_this_region public static final int error_service_unavailable_for_this_region this error indicates that sdk support is not available for partner's service in particular region since api level 2 5 see also constant field values error_partner_app_signature_mismatch public static final int error_partner_app_signature_mismatch this error indicates that the app signature is different from the one registered from samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if different signature is used for signing apk, the partner app verification will be failed checking signature logic will be activated in case debug mode is "n" since api level 2 9 see also constant field values error_partner_app_version_not_supported public static final int error_partner_app_version_not_supported this error indicates that app version is not supported by samsung pay this is returned as extra_error_reason for error_not_allowed error for example, if the version registered from developer portal is higher than current version or no any version registered , then the partner app verification will be failed since api level 2 9 see also constant field values error_partner_app_blocked public static final int error_partner_app_blocked this error indicates that partner app version is removed/blocked by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is blocked, then the partner app verification will be failed since api level 2 9 see also constant field values error_user_not_registered_for_debug public static final int error_user_not_registered_for_debug this error indicates that user account is not registered for using debug mode on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is in debug mode but the samsung account is not registered for the debug-api-key, then the partner app verification will be failed see also constant field values error_service_not_approved_for_release public static final int error_service_not_approved_for_release this error indicates that service version is not approved for release by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is not registered for release mode, then the partner app verification will be failed since api level 2 5 see also constant field values error_partner_not_approved public static final int error_partner_not_approved this error indicates that partner registration is not done on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is submitted but not approved, then the partner app verification will be failed see also constant field values error_unauthorized_request_type public static final int error_unauthorized_request_type this error indicates that the partner is not authorized for this request type such as payment or enrollment this is returned as extra_error_reason for error_not_allowed error for example, if the merchant app calls enrollment api, then the partner app verification will be failed see also constant field values error_expired_or_invalid_debug_key public static final int error_expired_or_invalid_debug_key this error indicates that debug key is invalid or expired this is returned as extra_error_reason for error_not_allowed error for example, if the partner app uses expired debug-api-key, then the partner app verification will be failed see also constant field values error_server_internal public static final int error_server_internal this error indicates that server fails to proceed request due to unknown internal error this is returned as extra_error_reason for error_spay_internal error for example, if the server error occurred while the partner verification is going on, then the partner app verification will be failed since api level 2 5 see also constant field values error_device_not_samsung public static final int error_device_not_samsung this error indicates that the device is not a samsung device this is returned as extra_error_reason for spay_not_supported error see also constant field values error_spay_pkg_not_found public static final int error_spay_pkg_not_found this error indicates that the samsung pay application is not on the device this is returned as extra_error_reason for spay_not_supported error this could mean that the device does not support samsung pay see also constant field values error_spay_sdk_service_not_available public static final int error_spay_sdk_service_not_available this error indicates that sdk service is not available on this device this is returned as extra_error_reason for spay_not_supported error see also constant field values error_device_integrity_check_fail public static final int error_device_integrity_check_fail this error indicates that device integrity check has failed this is returned as extra_error_reason for spay_not_supported error see also constant field values error_spay_app_integrity_check_fail public static final int error_spay_app_integrity_check_fail this error indicates that samsung pay app integrity check has failed this is returned as extra_error_reason for spay_not_supported error see also constant field values error_android_platform_check_fail public static final int error_android_platform_check_fail this error indicates that android platform version check has failed for in-app payment, the samsung pay sdk requires android 6 0 m android api level 23 or later versions of the android os this is returned as extra_error_reason for spay_not_supported error since api level 1 5 see also constant field values error_missing_information public static final int error_missing_information this error indicates that some information of partner is missing this error code is returned as an extra_error_reason of error_not_allowed error for example, if the partner app does not deliver a required information to samsung pay to get the wallet information, then samsung pay will send this error to partner app also if the partner does not define the issuer name in samsung pay developer portal, samsung pay will send this error to partner app see also constant field values error_spay_setup_not_completed public static final int error_spay_setup_not_completed this error indicates that the samsung pay setup was not completed partner app need to ask user to set up samsung pay app if user agrees, call samsungpay activatesamsungpay api this is returned as extra_error_reason for spay_not_ready error see also constant field values error_spay_app_need_to_update public static final int error_spay_app_need_to_update this error indicates that the samsung pay should be updated partner app need to ask user to update samsung pay app if user agrees, call samsungpay gotoupdatepage api this is returned as extra_error_reason for spay_not_ready error since api level 1 1 see also constant field values error_partner_sdk_version_not_allowed public static final int error_partner_sdk_version_not_allowed this error indicates that the partner app is using samsung pay sdk not allowed this is returned as extra_error_reason for error_partner_info_invalid error since api level 2 5 see also constant field values error_unable_to_verify_caller public static final int error_unable_to_verify_caller this error indicates that samsung pay is unable to verify partner app at this moment this is returned as extra_error_reason for error_not_allowed error for example, samsung pay tried to connect to the server and validate partner id, but the device does not have the network connectivity see also constant field values error_spay_fmm_lock public static final int error_spay_fmm_lock this error indicates that device is locked due to fmm find my mobile partner app needs to ask user to unlock the samsung pay app if user agrees, call samsungpay activatesamsungpay to unlock the samsung pay app since api level 2 1 see also samsungpay activatesamsungpay constant field values error_spay_connected_with_external_display public static final int error_spay_connected_with_external_display this error indicates that device is connected with an external display due to security reason, samsung pay cannot be launched at this moment in this case, partner can guide user to disconnect any external display if connected since api level 2 7 see also constant field values spay_not_supported public static final int spay_not_supported samsung pay is not supported on this device usually, this status code is returned if the device is not compatible to run samsung pay or if the samsung pay app is not installed since api level 1 1 see also constant field values spay_not_ready public static final int spay_not_ready samsung pay is not completely activated usually, this status code is returned if the user did not complete the mandatory update or if the user is not signed in with the samsung account yet in this case, partner app can call samsungpay activatesamsungpay api to launch samsung pay or can call samsungpay gotoupdatepage api to update samsung pay app since api level 1 1 see also constant field values spay_ready public static final int spay_ready samsung pay is activated and ready to use usually, this status code is returned after user completes all the mandatory updates and is signed in since api level 1 1 see also constant field values spay_not_allowed_temporally public static final int spay_not_allowed_temporally samsung pay is not allowed temporally refer extra reason delivered with extra_error_reason since api level 2 7 see also constant field values spay_has_transit_card public static final int spay_has_transit_card this code is returned if samsung pay has a registered transit card this is for korean issuers only since api level 2 8 see also constant field values spay_has_no_transit_card public static final int spay_has_no_transit_card this code is returned if samsung pay doesn't have a registered transit card this is for korean issuers only since api level 2 8 see also constant field values device_type_phone public static final string device_type_phone device type is phone since api level 1 1 see also constant field values device_type_gear public static final string device_type_gear device type is gear since api level 1 1 see also constant field values extra_last4_dpan public static final string extra_last4_dpan key to represent the last four digits of digitalized personal identification number dpan since api level 1 1 see also constant field values extra_last4_fpan public static final string extra_last4_fpan key to represent the last four digits of funding personal identification number fpan since api level 1 1 see also constant field values extra_issuer_name public static final string extra_issuer_name key to represent name of the issuer this key can be used in the bundle for partnerinfo string, bundle since api level 1 1 see also constant field values extra_issuer_pkgname public static final string extra_issuer_pkgname key to represent package name of the issuer app on android since api level 1 1 see also constant field values extra_partner_name public static final string extra_partner_name key to represent name of the partner app this key can be used in the bundle for partnerinfo string, bundle since api level 2 6 see also constant field values extra_error_reason public static final string extra_error_reason key to represent extra error reasons since api level 1 1 see also constant field values extra_error_reason_message public static final string extra_error_reason_message key to represent extra error reason messages since api level 2 9 see also constant field values extra_card_type public static final string extra_card_type key to represent card type the possible values are card card_type_credit_debit card card_type_credit card card_type_debit card card_type_gift card card_type_loyalty card card_type_transit since api level 1 1 see also constant field values extra_device_type public static final string extra_device_type key to represent type of the device mobile or gear the possible values are device_type_phone device_type_gear since api level 1 1 see also constant field values extra_member_id public static final string extra_member_id key to represent member id of the issuer this is for korean issuers only since api level 1 1 see also constant field values extra_country_code public static final string extra_country_code key to represent country code device country code iso 3166-1 alpha-2 since api level 1 1 see also constant field values extra_device_card_limit_reached public static final string extra_device_card_limit_reached key to represent the maximum registered card number has reached or not since api level 1 1 see also constant field values extra_cryptogram_type public static final string extra_cryptogram_type key to represent the dsrp digital secure remote payments cryptogram type of mastercard cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo since api level 2 4 see also constant field values extra_resolved_1 public static final string extra_resolved_1 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_2 public static final string extra_resolved_2 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_3 public static final string extra_resolved_3 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_4 public static final string extra_resolved_4 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_5 public static final string extra_resolved_5 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_6 public static final string extra_resolved_6 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_7 public static final string extra_resolved_7 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_request_id public static final string extra_request_id key to represent request id when a request is failed, tr will send this key to partner app request id would be helpful for debugging a failed request between partner and tr since api level 2 5 see also constant field values cryptogram_type_ucaf public static final string cryptogram_type_ucaf key to represent the ucaf cryptogram type of mastercard ucaf cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo ucaf is a default cryptogram type if not specified in the extrapaymentinfo bundle since api level 2 4 see also constant field values cryptogram_type_icc public static final string cryptogram_type_icc key to represent the icc cryptogram type of mastercard icc cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo since api level 2 4 see also constant field values extra_accept_combo_card public static final string extra_accept_combo_card key to represent that a merchant accepts combo card partner can use this key to let customers to choose debit/credit in case of combo card it can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo the possible value is the boolean since api level 2 9 see also constant field values extra_require_cpf public static final string extra_require_cpf key to represent that a partner requires cpf partner can use this key to ask samsung pay to show cpf information in the payment sheet it can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo the possible value is the boolean this is for brazil partners only since api level 2 11 see also constant field values extra_cpf_holder_name public static final string extra_cpf_holder_name key to get cpf holder name in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback since api level 2 11 see also constant field values extra_cpf_number public static final string extra_cpf_number key to get cpf number in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback since api level 2 11 see also constant field values extra_merchant_ref_id public static final string extra_merchant_ref_id key to set/get merchant reference id beyond marketplace app or service i e bixby when marketplace apps request in-app payment, they can set merchant reference id so that samsung pay app can get detail information about the merchant using the id since api level 2 11 see also constant field values extra_online_transaction_type public static final string extra_online_transaction_type see also constant field values wallet_user_id public static final string wallet_user_id key to represent user's wallet id since api level 1 2 see also constant field values device_id public static final string device_id key to represent unique device id since api level 1 2 see also constant field values wallet_dm_id public static final string wallet_dm_id key to represent unique device management id since api level 1 2 see also constant field values partner_service_type public static final string partner_service_type key to represent unique service type this key must be set in the bundle for partnerinfo string, bundle since api level 1 4 see also constant field values common_status_table public static final string common_status_table this table shows the status codes used commonly status bundle keys bundle values spay_not_supported 0 extra_error_reason error_device_not_samsung -350 error_spay_pkg_not_found -351 error_spay_sdk_service_not_available -352 error_device_integrity_check_fail -353 error_spay_app_integrity_check_fail -360 error_android_platform_check_fail -361 spay_not_ready 1 extra_error_reason error_spay_setup_not_completed -356 error_spay_app_need_to_update -357 error_spay_internal -1 extra_error_reason error_server_internal -311 n/a n/a error_not_allowed -6 extra_error_reason error_invalid_parameter -12 error_sdk_not_supported_for_this_region -300 error_service_id_invalid -301 error_service_unavailable_for_this_region -302 error_partner_app_signature_mismatch -303 error_partner_app_version_not_supported -304 error_partner_app_blocked -305 error_user_not_registered_for_debug -306 error_service_not_approved_for_release -307 error_partner_not_approved -308 error_unauthorized_request_type -309 error_expired_or_invalid_debug_key -310 error_missing_information -354 error_unable_to_verify_caller -359 error_invalid_parameter -12 n/a n/a error_no_network -21 n/a n/a error_server_no_response -22 n/a n/a error_partner_info_invalid -99 extra_error_reason error_partner_sdk_api_level -10 error_partner_service_type -11 error_partner_sdk_version_not_allowed -358 error_initiation_fail -103 n/a n/a spay_not_allowed_temporally 3 extra_error_reason error_spay_connected_with_external_display -605 error_spay_fmm_lock -604 n/a n/a paymentmanager error_making_sheet_failed -115 n/a n/a see also constant field values method details getversioncode public static int getversioncode returns the version code of the samsung pay sdk returns sdk version code since api level 1 1 getversionname @nonnull public static string getversionname returns the version name of the samsung pay sdk returns sdk version name since api level 1 1 samsung electronics samsung pay sdk 2 22 00 - nov 19 2024
We use cookies to improve your experience on our website and to show you relevant advertising. Manage you settings for our cookies below.
These cookies are essential as they enable you to move around the website. This category cannot be disabled.
These cookies collect information about how you use our website. for example which pages you visit most often. All information these cookies collect is used to improve how the website works.
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and tailor the website to provide enhanced features and content for you.
These cookies gather information about your browser habits. They remember that you've visited our website and share this information with other organizations such as advertisers.
You have successfully updated your cookie preferences.