Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Filter
Develop Samsung Pay
apioverview package class tree index help package com samsung android sdk samsungpay v2 class watchmanager java lang object samsungpaybase com samsung android sdk samsungpay v2 watchmanager all implemented interfaces apptoappconstants public final class watchmanager extends samsungpaybase implements apptoappconstants this class provides apis for watch management partner apps must check the samsung pay watch status on the device before performing any card management also, this class provides apis getting cards information, adding new card to samsung pay on watch, and so on since api level 2 5 field summary fields modifier and type field description static final string device_serial_num key to represent device serial number to generate the paymentappinstanceid static final int error_invalid_parameter this error indicates that the given parameter is invalid this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_spay_pin_lock_setup_canceled this error indicates that user canceled the pin lock setup partner app should ask user to setup pin for samsung pay gear static final int error_spay_watch_connection this error indicates that samsung pay watch plug-in can not connect with samsung pay watch partner app should ask user to check bluetooth connection or pairing static final int error_spay_watch_pay_progress this error indicates that samsung pay watch is in a process of payment static final int error_spay_watch_pin_lock_setup_canceled this error indicates that user canceled the pin lock setup partner app should ask user to setup pin for samsung pay watch static final int spay_watch_taking_log_for_report this error indicates that samsung pay watch is taking log for error report static final int spay_watch_update_is_ongoing this error indicates that samsung pay watch being updated fields inherited from interface com samsung android sdk samsungpay v2 apptoappconstants error_auth_code_expired, error_auth_code_invalid, error_auth_code_max_try_reached, error_auth_code_type_invalid, error_authentication_closed, error_authentication_failed, error_authentication_not_ready, error_authentication_timed_out, error_card_already_registered, error_card_idv_not_supported, error_card_not_supported, error_framework_internal, error_invalid_card, error_invalid_cardinput, error_max_card_num_reached, error_max_pan_provision_num_reached, error_server_reject, error_tsm_fail, error_verify_card, error_wallet_id_mismatch, extra_app2app_intent, extra_app2app_payload, extra_card_balance, extra_card_status_reason, extra_issuer_app_card_linked constructor summary constructors constructor description watchmanager android content context context, partnerinfo partnerinfo api to get the watchmanager instance the caller should set valid serviceid method summary all methodsinstance methodsconcrete methods modifier and type method description void activatesamsungpay api to bring the samsung pay on watch app to a state in which cards can be added samsung pay on watch might be samsung account is not signed in state partner app checks the samsung pay on watch status with getsamsungpaystatus statuslistener api if the status is #spay_not_ready and #extra_error_reason is #error_spay_setup_not_completed, partner app can call this api to launch samsung pay on watch and user can sign in to the app void addcard addcardinfo addcardinfo, addcardlistener listener api to add a card from partner app example issuer/bank app to samsung pay on watch partner app uses this api to add card to samsung pay on watch by providing the required card details void getallcards android os bundle cardfilter, getcardlistener listener api to get all the cards from samsung pay on watch for the given filter void getsamsungpaystatus statuslistener listener api to get the samsung pay on watch status on the device partner issuers applications must call this api to check the current state of samsung pay on watch before doing any operation void getwalletinfo list<string> keys, statuslistener listener api to get the requested wallet information from samsung pay on watch partner app can use this information to uniquely identify the user and samsung pay on watch app on a particular device void gotoupdatepage api to go to samsung pay on watch update page partner app checks the samsung pay on watch status with getsamsungpaystatus statuslistener api if the status is #spay_not_ready and #extra_error_reason is #error_spay_app_need_to_update, partner app can call this api to go to update samsung pay on watch app methods inherited from class java lang object equals, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait field details device_serial_num public static final string device_serial_num key to represent device serial number to generate the paymentappinstanceid since api level 2 5 see also constant field values error_spay_pin_lock_setup_canceled public static final int error_spay_pin_lock_setup_canceled this error indicates that user canceled the pin lock setup partner app should ask user to setup pin for samsung pay gear since api level 2 5 see also constant field values error_invalid_parameter public static final int error_invalid_parameter this error indicates that the given parameter is invalid this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 2 5 see also constant field values error_spay_watch_pin_lock_setup_canceled public static final int error_spay_watch_pin_lock_setup_canceled this error indicates that user canceled the pin lock setup partner app should ask user to setup pin for samsung pay watch since api level 2 5 see also constant field values spay_watch_update_is_ongoing public static final int spay_watch_update_is_ongoing this error indicates that samsung pay watch being updated since api level 2 5 see also constant field values spay_watch_taking_log_for_report public static final int spay_watch_taking_log_for_report this error indicates that samsung pay watch is taking log for error report since api level 2 5 see also constant field values error_spay_watch_pay_progress public static final int error_spay_watch_pay_progress this error indicates that samsung pay watch is in a process of payment since api level 2 5 see also constant field values error_spay_watch_connection public static final int error_spay_watch_connection this error indicates that samsung pay watch plug-in can not connect with samsung pay watch partner app should ask user to check bluetooth connection or pairing since api level 2 5 see also constant field values constructor details watchmanager public watchmanager android content context context, partnerinfo partnerinfo api to get the watchmanager instance the caller should set valid serviceid partnerinfo is passed to samsung pay on watch for caller verification context ct = activity; // or context ct = service; string issuername = "mybank"; // set the serviceid which is assigned by the samsung pay developer during on boarding string serviceid = "sampleserviceid"; bundle bundle = new bundle ; bundle putstring watchmanager extra_issuer_name, issuername ; bundle putstring watchmanager partner_service_type, watchmanager servicetype app2app tostring ; partnerinfo pinfo = new partnerinfo serviceid, bundle ; watchmanager watchmanager = new watchmanager ct, pinfo ; parameters context - activity context or service context partnerinfo - partner information throws nullpointerexception - thrown if parameters are null since api level 2 5 method details getsamsungpaystatus public void getsamsungpaystatus @nonnull statuslistener listener api to get the samsung pay on watch status on the device partner issuers applications must call this api to check the current state of samsung pay on watch before doing any operation // set the serviceid which is assigned by the samsung pay developer during on boarding string serviceid = "sampleserviceid"; bundle bundle = new bundle ; bundle putstring watchmanager partner_service_type, watchmanager servicetype app2app tostring ; partnerinfo pinfo = new partnerinfo serviceid, bundle ; watchmanager watchmanager = new watchmanager context, pinfo ; watchmanager getsamsungpaystatus new statuslistener { @override public void onsuccess int status, bundle data { // success case if status == spay_ready { log d tag, "samsung pay on watch is ready on the device" ; // perform your operation } else if status == spay_not_ready { // samsung pay on watch 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 } else { // samsung pay on watch is not supported on this device log d tag, "device does not support samsung pay on watch" ; } } @override public void onfail int errorcode, bundle errordata { log e tag, "onfail callback is called, errorcode " + errorcode ; // to get more reason of the failure, // check some extra error codes in the errordata bundle such as watchmanager extra_error_reason if provided } } ; parameters listener - callback through which the result is provided on success, samsung pay on watch status code is provided via statuslistener onsuccess int status, bundle data if samsung pay on watch is ready to be used, #spay_ready will be returned otherwise, #spay_not_ready or #spay_not_supported can be returned with #extra_error_reason from bundle also, partner can get extra information from bundle data bundle keys if provided bundle values spaysdk extra_country_code device country code iso 3166-1 alpha-2 on any failure, the failure code is provided via statuslistener onfail int errorcode, bundle errordata note please refer spaysdk common_status_table in detail throws nullpointerexception - thrown if the callback passed is null since api level 2 5 gotoupdatepage public void gotoupdatepage api to go to samsung pay on watch update page partner app checks the samsung pay on watch status with getsamsungpaystatus statuslistener api if the status is #spay_not_ready and #extra_error_reason is #error_spay_app_need_to_update, partner app can call this api to go to update samsung pay on watch app // set the serviceid which is assigned by the samsung pay developer during on boarding string serviceid = "sampleserviceid"; bundle bundle = new bundle ; bundle putstring watchmanager partner_service_type, watchmanager servicetype app2app tostring ; partnerinfo pinfo = new partnerinfo serviceid, bundle ; watchmanager watchmanager = new watchmanager context, pinfo ; watchmanager gotoupdatepage ; since api level 2 5 activatesamsungpay public void activatesamsungpay api to bring the samsung pay on watch app to a state in which cards can be added samsung pay on watch might be samsung account is not signed in state partner app checks the samsung pay on watch status with getsamsungpaystatus statuslistener api if the status is #spay_not_ready and #extra_error_reason is #error_spay_setup_not_completed, partner app can call this api to launch samsung pay on watch and user can sign in to the app // set the serviceid which is assigned by the samsung pay developer during on boarding string serviceid = "sampleserviceid"; bundle bundle = new bundle ; bundle putstring watchmanager partner_service_type, watchmanager servicetype app2app tostring ; partnerinfo pinfo = new partnerinfo serviceid, bundle ; watchmanager watchmanager = new watchmanager context, pinfo ; watchmanager activatesamsungpay ; since api level 2 5 getwalletinfo public void getwalletinfo list<string> keys, @nonnull statuslistener listener api to get the requested wallet information from samsung pay on watch partner app can use this information to uniquely identify the user and samsung pay on watch app on a particular device // set the serviceid which is assigned by the samsung pay developer during on boarding string serviceid = "sampleserviceid"; bundle bundle = new bundle ; bundle putstring watchmanager extra_issuer_name, "issuer name" ; bundle putstring watchmanager partner_service_type, watchmanager servicetype app2app tostring ; partnerinfo pinfo = new partnerinfo serviceid, bundle ; watchmanager watchmanager = new watchmanager context, pinfo ; // bundle keys added to get wallet information from samsung pay on watch // this information can be delivered to the partner server for eligibility check arraylist<string> keys = new arraylist<> ; keys add watchmanager wallet_user_id ; keys add watchmanager device_id ; watchmanager getwalletinfo keys, new statuslistener { @override public void onsuccess int status, bundle walletdata { // log d tag, "dowalletinfo onsuccess callback is called" ; // for visa, deviceid can be set to "clientdeviceid" as defined by visa string deviceid = walletdata get watchmanager device_id ; // for visa, walletuserid can be set to "clientwalletaccountid" as defined by visa string walletuserid = walletdata get watchmanager wallet_user_id ; } @override public void onfail int errorcode, bundle errordata { log e tag, "onfail callback is called, errorcode " + errorcode ; // to get more reason of the failure, // check some extra error codes in the errordata bundle such as watchmanager extra_error_reason if provided } } parameters keys - key list to get wallet information if the list is empty, all possible key values are returned the possible keys are #wallet_dm_id #device_id #wallet_user_id device_serial_num listener - callback through which the result is provided on success, statuslistener onsuccess int status, bundle data is invoked with wallet information the success code can be one of the following codes with bundle data status bundle keys bundle values usage vts mdes #error_none #wallet_dm_id string device management id n/a paymentappinstanceid = device_serial_num + wallet_dm_id *if you need 'paymentappinstanceid', you can generate it as above #device_id string device id clientdeviceid #wallet_user_id string wallet user id clientwalletaccountid device_serial_num string device serial number n/a on any failure, the error code is provided via statuslistener onfail int errorcode, bundle errordata note please refer spaysdk common_status_table in detail throws nullpointerexception - thrown if parameters are null since api level 2 5 addcard public void addcard @nonnull addcardinfo addcardinfo, @nonnull addcardlistener listener api to add a card from partner app example issuer/bank app to samsung pay on watch partner app uses this api to add card to samsung pay on watch by providing the required card details this helps user to add their cards to samsung pay on watch directly from partner app watchmanager watchmanager = new watchmanager ct, pinfo ; string cardtype = card card_type_credit; string tokenizationprovider = addcardinfo provider_abcd; // get it from issuer app // samsung pay on watch does not provide detailed payload information // generate provisioning payload in accordance with your card network specifications string testpayload = "thisistestpayloadcardinfo1234567890"; bundle carddetail = new bundle ; carddetail putstring addcardinfo extra_provision_payload, testpayload ; addcardinfo addcardinfo = new addcardinfo cardtype, tokenizationprovider, carddetail ; watchmanager addcard addcardinfo, new addcardlistener { @override public void onsuccess int status, card card { log d tag, "onsuccess callback is called" ; } @override public void onfail int errorcode, bundle errordata { log e tag, "onfail callback is called, errorcode " + errorcode ; // to get more reason of the failure, // check some extra error codes in the errordata bundle // such as watchmanager extra_error_reason or watchmanager extra_request_id if provided } @override public void onprogress int currentcount, int totalcount, bundle bundledata { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } ; parameters addcardinfo - detail card information to add listener - callback through which the result is provided on success, addcardlistener onsuccess int, card is invoked with #error_none status code with added card information on any failure, the error code is provided via addcardlistener onfail int errorcode, bundle errordata the failure code can be one of the following codes with bundle data status bundle keys bundle values #error_registration_fail -104 #extra_error_reason apptoappconstants error_card_already_registered -500 apptoappconstants error_framework_internal -501 apptoappconstants error_invalid_card -502 apptoappconstants error_invalid_cardinput -503 error_invalid_parameter -504 apptoappconstants error_server_reject -505 apptoappconstants error_max_card_num_reached -506 apptoappconstants error_card_not_supported -514 apptoappconstants error_max_pan_provision_num_reached -515 apptoappconstants error_wallet_id_mismatch -516 error_spay_watch_pin_lock_setup_canceled -701 spay_watch_update_is_ongoing -702 spay_watch_taking_log_for_report -703 error_spay_watch_pay_progress -704 error_spay_watch_connection -705 #extra_request_id string value returned from server note please refer spaysdk common_status_table for other error status throws nullpointerexception - thrown if parameters are null since api level 2 17 getallcards public void getallcards @nullable android os bundle cardfilter, @nonnull getcardlistener listener api to get all the cards from samsung pay on watch for the given filter since api level 2 5, partner must define issuer names as a card filter on samsung pay developers while on-boarding bundle cardfilter = new bundle ; watchmanager getallcards cardfilter, new getcardlistener { @override public void onsuccess list<card> cards { // 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 card s cards { log d tag, "cardid " + s getcardid + "cardstatus" + s getcardstatus ; // get extra card data if s getcardinfo != null { string last4fpan = s getcardinfo getstring watchmanager extra_last4_fpan ; string last4dpan = s getcardinfo getstring watchmanager extra_last4_dpan ; string cardtype = s getcardinfo getstring watchmanager extra_card_type ; string cardissuername = s getcardinfo getstring watchmanager extra_issuer_name ; log d tag, "last4fpan " + last4fpan + "last4dpan" + last4dpan + "app2apppayload " + app2apppayload ; } } } } @override public void onfail int errorcode, bundle errordata { log e tag, "onfail callback is called, errorcode " + errorcode ; // to get more reason of the failure, // check some extra error codes in the errordata bundle such as watchmanager extra_error_reason if provided } } ; parameters listener - callback through which the result is provided on success, getcardlistener onsuccess list is invoked with list of cards on any failure, the error code is provided via getcardlistener onfail int, bundle note please refer spaysdk common_status_table in detail throws nullpointerexception - thrown if listener is null since api level 2 13 samsung electronics samsung pay sdk 2 22 00 - nov 19 2024
Learn Code Lab
codelabcreate an android automotive operating system aaos app with payments via samsung checkout objective create a shopping app for android automotive os aaos , which uses templates from aaos and ignite store, and processes payments via the ignite payment sdk powered by samsung checkout partnership request to use the ignite payment sdk and have access to development tools and resources, such as ignite aaos emulators, you must become an official partner once done, you can fully utilize this code lab you can learn more about the partnership process by visiting the ignite store developer portal overview android automotive os android automotive os aaos is a base android platform that runs directly on the car and is deeply integrated with the underlying vehicle hardware unlike the android auto platform, users can download compatible apps with aaos directly into their cars, without needing a phone, and utilize an interface specifically designed for the car screen aaos can run both system and third-party android applications as aaos is not a fork and shares the same codebase as android for mobile devices, developers can easily adapt existing smartphone apps to function on aaos the diagram below illustrates the architecture of aaos at the hardware abstraction layer hal level, aaos incorporates additional components such as the vehicle hal vhal , exterior view system evs , and broadcast radio br to handle vehicle properties and connectivity at the framework level, car service and webview modules are included at the application level, the main system applications include car system ui, car launcher, and car input method editor ime additionally, car media and automotive host are incorporated as system apps third-party apps are classified into three categories audio media, car templated, and parked car templates the car templated apps use templates specified by the car app library, which are rendered by the automotive host, customized by original equipment manufacturers oem the library consists of approximately 10 templates list, grid, message, pane, navigation and is utilized in both android auto aa and android automotive os aaos apps to target aaos, you must incorporate an additional app-automotive library that injects the carappactivity into the app the carappactivity needs to be included in the manifest and can be set as distractionoptimized upon launching the application, the carappactivity provides a surface that is employed by the automotive host to render the template models additionally, on the harman ignite store, you can optionally integrate the ignite-car-app-lib, which adds supplementary templates such as explore, listdetails, routeoverview, and poistreaming harman ignite store the harman ignite store is a white-labeled and modular aaos-based automotive app store by connecting app developers with car manufacturers, harman creates unique in-vehicle experiences the ignite store has a rich app ecosystem with unique content, growth opportunities, and long-term partnerships it facilitates future-proof monetization with a payments api powered by samsung checkout after registering at the ignite store developer portal, developers can submit their apps for certification and testing by harman upon approval from the oem, the developer can proceed with publishing their app comprehensive developer documentation and tools are available to support app developers throughout the development process payments api the ignite store comes enabled with payment features empowering developers to monetize their apps developers are now able to offer their apps as paid apps the payment sdk exposes apis for goods and services, in-app purchases, and subscriptions developers can also integrate their own payment service providers psps , to sell goods or services, and receive the money directly in their bank account for a frictionless in-car payment experience, ignite provides a dedicated digital wallet app for end-users to securely store their credit card information the payment processor is powered by the industry proven samsung checkout the developer portal provides additional documentation to allow developers to access ignite aaos emulators, vim3, tablet or cuttlefish ignite images, and additional guidelines set up your environment you will need the following ignite aaos system image running on android emulator or on reference devices 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! aaos ignite shopping app sample code 11 7 mb prepare your ignite aaos emulator add the ignite aaos emulator to your android studio by following the guide provided in the ignite store developer console open the device manager and start the emulator configure the emulator to use fake data for payments, as instructed in the ignite store developer console under the offline mode tab in the payment sdk section the sample app requires navigation from point a starting location to point b destination location the destination addresses are predefined and near san jose mcenery convention center to shorten the distance between two locations, follow the steps below to set the starting location a open the extended controls in the emulator panel b go to location, search for a location near the destination location, and click set location next, in the emulator, go to the ignite navigation app's settings and enable the following enable navigation simulation enable mock location provider go to settings > system > developer options > location and set ignite navigation as mock location app start your project after downloading the sample code containing the project files, open your android studio and click open to open an existing project locate the downloaded android project igniteautomotivepaymentssdc202488 from the directory and click ok check the ignite payment sdk dependency verify that the ignite payment sdk library is included in the dependencies section of the module's build gradle file dependencies { implementation files 'libs/ignite-payment-sdk-3 13 0 24030417-0-snapshot aar' } add payment permission next, go to the manifests folder and, in the androidmanifest xml file, include the payment_request permission to perform in-app purchases <uses-permission android name="com harman ignite permission payment_request" /> this ensures that the app has the necessary permissions to perform transactions and handle sensitive financial data show the payment screen when an item is added to the cart, the shopping cart screen displays the select store button, selected pickup store address, total amount to pay, and details of each item added the screen also includes the pay button go to kotlin + java > com harman ignite pickupstore > screens > shoppingcartscreen kt in the docheckout function, use the car app's screenmanager to navigate to the payment screen from the shopping cart screen after clicking the pay button getscreenmanager push paymentscreen carcontext, session notethe screenmanager class provides a screen stack you can use to push screens that can be popped automatically when the user selects a back button in the car screen or uses the hardware back button available in some cars instantiate the ignite payment client the ignite payment api provides a singleton class called ignitepaymentclientsingleton, which enables performing and tracking transactions navigate to the paymentscreen kt file and instantiate the ignite payment client private val mipc = ignitepaymentclientsingleton getinstance carcontext define the ignite payment transaction callback the ignite payment transaction provides three callback methods onsuccess, oncanceled, and onfailure after each callback, make sure to set the ispaymentfailed variable to track whether a payment is successful or not update the session which owns the shopping cart screen to reflect the status of the payment transaction call the updatetemplate function to invalidate the current template and create a new one with updated information private val mipctcb = object iignitepaymentclienttransactioncallback { override fun onsuccess requestuuid string?, sessionid string?, successmessage string?, paymentadditionalproperties hashmap<string, string>? { log d tag, log_prefix + "onsuccess rid $requestuuid, sid $sessionid, sm $successmessage" cartoast maketext carcontext, "payment successful", cartoast length_short show ispaymentfailed = false session paymentdone requestuuid, sessionid, successmessage updatetemplate } override fun oncanceled requestuuid string?, sessionid string? { log d tag, log_prefix + "oncanceled rid $requestuuid, sid $sessionid" cartoast maketext carcontext, "payment canceled", cartoast length_long show ispaymentfailed = true session paymenterror requestuuid, sessionid, null updatetemplate } override fun onfailure requestuuid string?, sessionid string?, wallererrorcode int, errormessage string { log d tag, log_prefix + "onfailure rid $requestuuid, sid $sessionid, wec $wallererrorcode, em $errormessage" cartoast maketext carcontext, "payment failed", cartoast length_long show ispaymentfailed = true session paymenterror requestuuid, sessionid, errormessage updatetemplate } } define the ignite payment client connection callback the ignite payment client needs to be connected in order to perform a payment request once the client connects successfully, retrieve the names of the shopping cart items and use them to create an order summary afterwards, construct an ignite payment request containing the total amount, currency code, merchant id, and details of the order summary then, initiate the payment process by invoking the readytopay function of the ignite payment client api private val mipccb = iignitepaymentclientconnectioncallback { connected -> log d tag, log_prefix + "onpaymentclientconnected $connected" if connected { val textsummary = session shoppingcart cartitems jointostring ", " { item -> item name } val ipr = ignitepaymentrequest builder setamount session shoppingcart gettotal * 100 setcurrencycode currencycode usd setpaymentoperation paymentoperation purchase setmerchantid constants merchant_id setordersummary ordersummary builder setordersummarybitmapimage bitmapfactory decoderesource carcontext resources, session shoppingcart store largeicon setordersummarylabel1 "${carcontext getstring r string pickupstore_app_title } ${session shoppingcart store title}" setordersummarysublabel1 session shoppingcart store address setordersummarylabel2 textsummary setordersummarysublabel2 carcontext getstring r string pickupstore_payment_sublabel2 build build try { mipc readytopay ipr, mipctcb } catch e exception { log d tag, log_prefix + "payment exception $e" e printstacktrace } catch e error { log d tag, log_prefix + "payment error $e" e printstacktrace } } } start the payment process and go back to previous screen after the transaction next, in the startpayment function, connect the ignite payment client and the connection callback to start the payment process mipc connect mipccb after the transaction is completed, the updatetemplate function refreshes the template used in the payment screen before calling the schedulegoback function modify the schedulegoback function to navigate back to the previous template screen shopping cart you can use the pop method of the screenmanager screenmanager pop start the navigation to the store to collect the paid pickup the shopping cart screen shows the pickup store location, details of the order, and go to store button after a successful payment go to kotlin + java > com harman ignite pickupstore > pickupstoresession kt modify the navigatetostore geofence geofence function to trigger the navigation to the pickup store when the go to store button is clicked you can use the intent carcontext action_navigate with geo schema rfc 5879 data, containing latitude and longitude e g , geo 12 345, 14 8767 to send the intent, use the carcontext startcarapp api call val geouristring = "geo ${geofence latitude},${geofence longitude}" val uri = uri parse geouristring val navintent = intent carcontext action_navigate, uri try { carcontext startcarapp navintent } catch e exception { log e tag, log_prefix + "navigatetostore exception starting navigation" e printstacktrace cartoast maketext carcontext, "failure starting navigation", cartoast length_short show } run the app on ignite aaos emulator run the pickup-store-app on ignite aaos emulator when the app starts for the first time, it requests for user permissions click grant permissions choose allow all the time for location permission and click the return button 4 browse the pickup store catalog and add items to shopping cart open the shopping cart and click pay you can also change the pickup store by clicking select store check the order summary and billing information then, click confirm and pay to process payment after a successful payment, the app returns to shopping cart screen with the updated transaction information click go to store to start the navigation to the store the app displays a notification when the car is near the store click the notification to show a reference qr code to present to the store upon pick up you're done! congratulations! you have successfully achieved the goal of this code lab topic now, you can create an aaos templated app, which supports payments by yourself! if you're having trouble, you may download this file aaos ignite shopping app complete code 11 7 mb learn more by going to the developer console section of the ignite store developer portal
Develop Samsung Pay
doc4 1 how to configure the stg environment 4 1 1 how to add test account set up a test account using the steps below this is required to access and interact with the test environment test environment setup go to my projects > service management partners can create or update an existing service to create a service, click create new service, and select your chosen service type fill the respective service information fields once filled, click save and done to proceed to the next section to update a service, click an existing service to redirect to the service details page in debug effective date, click generate new date to generate the debug expiration date of the test accounts for existing services, generate new date button is a feature to extend the debug effective date in service details page, partners can extend test date by clicking the button on the prompt alert before generating the date, a prompt alert is displayed to add email addresses of the test accounts the test accounts must be samsung accounts associated with a registered samsung pay app on a supported device you may add up to 30 test accounts note use commas to input multiple accounts example test1@samsung com,test2@samsung com,test3@samsung com after adding the test accounts, click generate to generate the debug expiration date of the test accounts alternatively, partners can add test accounts by clicking add samsung account button, and input the test account email addresses once the test environment information is filled out, click done to save the service configuration the service is displayed in the service management dashboard with a debugging status partners can use their service with sdk and test accounts until the generated debug effective date 4 1 2 how to get samsung wallet test app copy link for test app in samsung pay partner portal support > request test app > galaxy app url download test app in your test device open url in your test device select ‘participate’ in galaxy store select ‘install now’ to install test app 4 1 3 list of test cards test card numbers including fpan, cvv, cvc, expiration date from the payment networks listed below can be on supported devices to test within the samsung pay staging environment visa card number card type expiry date cvv 4622 9431 2312 3870 credit 12/26 550 4622 9431 2312 3880 credit 12/26 695 4622 9431 2312 3890 credit 12/26 774 4622 9431 2312 3900 credit 12/26 308 4622 9431 2312 3910 credit 12/26 039 mastercard card number card type expiry date cvv/cvc2 5186 1516 5001 2004 credit 12/26 123 discover card number card type expiry date cvv 6011 0092 7412 9795 credit 08/27 687 6011 0080 3081 6410 credit 04/30 269 6011 0006 9386 3380 credit 06/27 779 4 1 4 test check list push provisioning use the following checklist to ensure you’ve completed all the required steps in your samsung pay integration for push provisioning install the samsung wallet test app check the 2 b section for details setup the wallet app follow the steps below to complete the setup sign in with samsung account use your samsung account and credentials to sign in set up a pin/biometric use a pin or biometric to protect your wallet app check samsung pay status check the samsung pay status on the device to determine if the samsung wallet is working properly refer to this checking samsung pay status guide for more details add card with proper parameters use proper payload as per the token provider guidelines follow the add card flow follow and accept the steps of samsung wallet app to complete the process verify with getallcards check if the card is successfully added on the samsung wallet app in-app payment use the following checklist to verify that all necessary steps for samsung pay in-app payment integration have been completed install the samsung wallet test app refer to section 2 b for detailed instructions setup the wallet app complete the setup by following the steps below sign in with samsung account log in using your samsung account credentials set up a pin/biometric secure your wallet app with a pin or biometric authentication if you do not have any cards currently stored in your samsung wallet app, please proceed to add a card from the provided test card 2 c follow the necessary steps to input the card details make a payment initiate a payment through the merchant app/web complete the payment process by authenticating with your pin or biometric method as required
tutorials galaxy watch, design
blogthese days, distributing digital content is very popular. if you are creative and like to design, then entering into the watch face market would be perfect for you. galaxy watch studio (gws) has a feature, called trial periods, that lets a user try out your watch face before buying it. a trial period is the time when a customer can try a paid product without paying money. samsung in-app purchase (iap) is used to configure this feature. a trial period can be set from 1 minute to 999 days. as a seller, a key metric is to measure and maximize the conversion from free trial period to purchase. however, the most common business model for app purchases for galaxy watch in 2019 was the paid app model—without a trial period. in the majority of cases, the consumer assesses the paid app based on the screenshots and consumer reviews in galaxy store, buys it, and then sees the app on the watch. the try-and-buy model allows the user to test the app risk-free on the watch for a trial period before buying it. a watch face can be free or paid. if it’s your first attempt to upload a watch face in galaxy store, then start with a free watch face. the publication process is fairly easy, and you can become a free seller by registering in seller portal. after registering, you have to become an approved seller in order to publish watch faces. to become an approved seller, submit a watch face for design review. if you want to publish a paid watch face in galaxy store, then you have to be a commercial seller. read commercial seller request guide for details. free watch face create a new project using gws. after developing the watch face, upload it to seller portal. read the build and upload article to learn about this. you can get a clear view about registering an application in the seller portal from the application registration guide. paid watch face a trial period becomes relevant when publishing a paid watch face. integrating this service is easy in gws. a user may not want to buy a watch face based on just seeing some screenshots. he/she might be convinced to buy that watch face after using it for a while. a trial period lets a user do this. before distributing the watch face for sale in galaxy store with a trial period, you have to change the iap settings in gws. iap settings in galaxy watch studio go to gws > project > in app purchase settings or click on the in-app purchase settings icon from the toolbar. check ‘enable in-app purchase’ choose one of the trial options. set the duration of the trial period (at least 1 min). write an item id using english letters, numbers, and certain special characters (. - _). note: use this item id for when registering your watch face. if you write the wrong item id while registering your watch face in galaxy store seller portal, the trial period won’t work in your watch face. now, click ok. select the iap test mode from project > build > iap test mode. there are three types of modes in iap: commercial: real transaction happens in this mode. success test: this mode is for testing the iap for successful purchase. no real transaction occurs in this mode. failure test: this is for failure testing. you can check what happens when a user fails to purchase the watch face. note: to test the trial period, you have to register your watch face in seller portal first. then, you can test the trial period on your device. upload the watch face if you want to test your trial period, follow the steps below: open the project in gws. go to build. set the iap test mode as ‘success test’ while building the watch face. after building the project, go to seller portal or click on the ‘upload’ button in gws and log in. follow the steps which are described in the build and upload section for uploading your watch face to seller portal. if you forget to enter information in the in-app purchase section, then the trial period won’t work in your watch face. so be mindful about it. if your watch face is paid and it has a trial period, you have to set the price in the in-app purchase section. go to the country/region & price section and set the price as ‘free’. otherwise, customers might have to pay money for both the trial version and after the trial version has expired. when you upload the binary of your watch face, your watch face will be registered. do not submit your watch face, just save it. after registering, you can test the trial period of your watch face. refer to "test the trial period" in trial periods. when you are ready to sell your watch face, do the following steps: in gws, go to build. set the iap test mode as ‘commercial’ and then build the project. after building the project, go to seller portal or click on the ‘upload’ button and log in. if you have uploaded your watch face for testing already then find your application and click on ‘registering’. delete the binary from ‘binary’ section and upload the new one. tip: you can mention that your watch face is "try and buy" in the description box in the app information section. this may create interest to download your watch face and use the trial version. if everything is done, click ‘submit’ to upload your watch face for validation and publication. it may take 2 - 3 weeks to publish your watch face in galaxy store. you can check the status of your watch face from seller portal in the application status tab. you can check the sale status of your watch face from home > statistics. for more information about trial periods, see the related article on the samsung developers site. if you have any questions, visit the gws forum.
Jakia Sultana
Learn Code Lab
codelabdevelop a blockchain shopping app objective create a shopping application with samsung blockchain platform sdk and pay using ethereum network overview the blockchain industry is expanding in many ways it is growing the most as a means of payment samsung blockchain platform sdk helps to make payments easily with cryptocurrency you can interact with blockchain through a simple api call to create a transaction in this code lab, you can pay for a product using the ethereum network in a simple shopping app, which is a decentralized application dapp dapps run and store data on the blockchain network instead of a central server for more information, go to samsung blockchain platform sdk set up your environment you will need the following java se development kit 8 or later android studio latest version recommended mobile phone with samsung blockchain sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! shopping app sample code 3 6 mb enable developer mode to activate developer mode on your mobile device, follow the steps below navigate through settings > biometrics and security > samsung blockchain keystore and click about blockchain keystore tap the samsung blockchain keystore app name quickly, ten times or more if succeeded, developer mode will show start your project in android studio, click open to open an existing project locate the downloaded sample project and click ok initialize the instance create an sblockchain instance this is the first step since sblockchain is the initial base class of sdk along with that are hardwarewalletmanager responsible for wallet operations accountmanager responsible for account operations msblockchain = new sblockchain ; msblockchain initialize mcontext ; maccountmanager = msblockchain getaccountmanager ; mhardwarewalletmanager = msblockchain gethardwarewalletmanager ; mcoinnetworkinfo = new coinnetworkinfo cointype eth, ethereumnetworktype sepolia, rpcurl ; connecttokeystore ; connect to samsung blockchain keystore you can get hardware wallet instance from hardwarewalletmanager hardwarewallettype refers to the type of cold wallet to be connected, such as samsung blockchain keystore and ledger nano s mhardwarewalletmanager connect hardwarewallettype samsung, false setcallback new listenablefuturetask callback<hardwarewallet> { @override public void onsuccess hardwarewallet hardwarewallet { handler post new runnable { @override public void run { log i tag,"hardwarewallet is connected successfully" ; mprogressbar setvisibility view invisible ; setaccountstatus ; } } ; } @override public void onfailure @notnull executionexception e { mprogressbar setvisibility view invisible ; e printstacktrace ; } @override public void oncancelled @notnull interruptedexception e { mprogressbar setvisibility view invisible ; e printstacktrace ; } } ; the second parameter of connect api refers to reset if you do not want to reset the wallet then keep it false, otherwise true manage your account now, your shopping dapp is connected to the keystore it means that if you have your own account with balance, you can now buy using ether or eth let's create an ethereum account to be used for payment for generating a new account with samsung blockchain platform sdk you need an instance of the accountmanager from sblockchain accountmanager provides methods for fetching, creating, restoring accounts, and other more once you have an instance of accountmanager, you can call generatenewaccount as shown below it has methods regarding accounts such as get, create, and restore refer to the samsung blockchain platform sdk documentations for more details hardwarewallet connectedhardwarewallet = mhardwarewalletmanager getconnectedhardwarewallet ; if connectedhardwarewallet != null { try { maccountmanager generatenewaccount connectedhardwarewallet, mcoinnetworkinfo get ; } catch interruptedexception e { e printstacktrace ; } catch executionexception e { e printstacktrace ; } } if an account is already created, textview is shown at the top of the app and the create account button is disabled to prevent further account creation list<account> accounts = maccountmanager getaccounts null, cointype eth, ethereumnetworktype sepolia ; if !accounts isempty { methereumaccount = ethereumaccount accounts get accounts size - 1 ; tvaccountstatus settext methereumaccount getaddress ; btncreateaccount setenabled false ; } get instance for ledger service after creating an account, you can use it for payment in your shopping dapp each coin blockchain ledgers has its own system to be stored in blocks samsung blockchain platform sdk provides abstracted api sets to developers for signing and sending supported cryptocurrency transactions over the blockchain network create coinservicefactory and just use any ledger you want in this scenario, use ethereumservice ethereumservice service = ethereumservice coinservicefactory getcoinservice mcontext, mcoinnetworkinfo ; at this point, your shopping dapp is ready to provide payment methods working on ethereum notebefore the next step, you need at least one valid ethereum account show payment sheet when a user selects an item, the app should show the payment screen it must show “who will pay how much amount of ether to whom” in the blockchain world, ethereum ledgers require more information, such as transaction nonce, to record that transaction into ledgers with samsung blockchain platform sdk, developers can do everything needed to show the payment sheet, intent should be created, which is to call the payment activity on click event of product object fill the parameters required and startactivityforresult to show a payment sheet item item = itemlist get position ; biginteger price = ethereumutils convertethtowei item getprice ; hardwarewallet connectedhardwarewallet = mhardwarewalletmanager getconnectedhardwarewallet ; intent intent = service createethereumpaymentsheetactivityintent mcontext, connectedhardwarewallet, ethereumtransactiontype eip1559, methereumaccount, sample_to_adderss, price, null, null ; startactivityforresult intent, 0 ; run the app after building the apk, install the app on a samsung galaxy device from the payment tab, click create account to generate your wallet address copy the generated address you need currency to make any purchases a free faucet site is provided in the webview tab to obtain ether go to the webview tab and log in using your google account enter the copied wallet address and press get 0 05 sepolia eth return to the payment tab and select any product from the list in the payment information screen, select a fee to pay to the ethereum network and click next to proceed confirm the transaction a success toast message will appear upon a successful transaction see the result of transaction if the payment was performed successfully from the payment screen, the result of transaction can be received from onactivityresult if the transaction is performed properly, you can find the result_ok at resultcode from the intent, a txid is shown which can be used to check your transaction's status call gettransactiondetail txid string api method in ethereumservice and check the block# if there's any valid countable number, your transaction is stored in blocks successfully and the payment is done if you can't find it, just wait it's processing among ethereum nodes alternatively, simply find the txid in sepolia testnet explorer you're done! congratulations! you have successfully achieved the goal of this code lab now, you can develop a shopping dapp using samsung blockchain platform sdk by yourself! if you're having trouble, you may download this file shopping app complete code 3 6 mb to learn more about developing apps with samsung blockchain, visit developer samsung com/blockchain
Learn Developers Podcast
docseason 1, episode 2 previous episode | episode index | next episode this is a transcript of one episode of the samsung developers podcast, hosted by and produced by tony morelan a listing of all podcast transcripts can be found here host tony morelan senior developer evangelist, samsung developers instagram - twitter - linkedin guest dan appelquist samsung internet developer advocacy in this episode of pow, i interview dan appelquist, director of developer advocacy for samsung internet dan first got involved with web browsers way back when the internet first got started, and he was heavily involved with the web standards movement that was established at that time soon after, dan relocated to london, england, and remains there today, working out of the samsung uk office listen download this episode topics covered the beginning of mobile web web standards and user experiences the benefits of samsung internet browser privacy and security web developer ecosystem progressive web apps samsung internet and ar/vr augmented reality / virtual reality android developers transcript note transcripts are provided by an automated service and reviewed by the samsung developers web team inaccuracies from the transcription process do occur, so please refer to the audio if you are in doubt about the transcript tony morelan 00 02 hey, i'm tony morelan and this is pow! podcast of wisdom from the samsung developer program, where we talk about the latest tech new trends and give insight into all of the opportunities available for developers looking to create for samsung i sat down with dan appelquist, director of developer advocacy for samsung internet dan first got involved with internet browsers way back when the internet first became a thing and he was heavily involved with the web standards movement that was established at that time soon after dan relocated to london, england and remains there today working out of the samsung, uk office hey, dan, thanks for coming on to the podcast i'm going to start with a real simple question who exactly is dan appelquist? dan appelquist 00 47 well, first of all, thanks for having me on the podcast i really appreciate it so i am director of developer advocacy for samsung internet, which is samsung's web browser i'm also somebody who's been working on the web since before there was a web so i have a background i started working in startups in the early nine, early and mid 90s, that were kind of working on web sites and web services for the publishing industry i went on and became a com, cto, being sent over to the uk from new york, to be cto for the street com at uk, which was this the uk arm of the street com i became a com refugee and because i was here in europe at the time in the early 2000s, i became involved in a lot of projects that were helping to bring the web to mobile, and were happening to helping to create digital mobile services, which was something where europe at that time was a lot farther ahead than the us so it's very interesting and exciting time to kind of be working with companies like vodafone, later telefonica to help build these kinds of services, emerging services for emerging devices and handsets and that kind of thing tony morelan 02 10 yeah, that must have been pretty exciting to have been, you know, working on technology, really, at the very beginning of something that was going to, you know, honestly, change our world forever so why is it that you would say that europe is further along than the us when it came to the start of the whole mobile web? dan appelquist 02 25 well, when in say 2001 2002, there were already color web phones that were coming onto the market here in the uk and elsewhere in europe that we're delivering digital services, like very simple digital services, but still digital services, news and online information on that kind of thing whereas i still had to really explain to my parents what it is that i was doing you know, people at that time in the us who really didn't think of their mobile phone as being for anything besides calling, even text messaging was not very well understood as a medium because the interoperability wasn't there between the different carriers around text messaging and it was only later that mobile digital services started to really develop and then the mobile internet came out of that whereas in europe, i would say my experience of it anyway has been was that with the standardization of gsm, across the continent, you had a much stronger base for delivery of mobile services across a standard range of handsets, standard range of networks, all that all that kind of thing all the technology was pretty, it was pretty standard tony morelan 03 36 and gsm is global system for mobile communications that's right dan appelquist 03 39 yeah yeah tony morelan 03 41 so the samsung internet, what exactly is samsung internet? dan appelquist 03 44 right so first of all, samsung internet is a web browser and for those who are familiar with web browsers, immune to other commonly known commonly used web browsers, especially on desktop computers, include google chrome, mozilla firefox, internet explorer from microsoft, which is increasingly being subsumed by microsoft's new browser, which is edge and then apple's safari browser probably are the biggies, the ones that people most people have heard about when it comes to market share, and especially on mobile samsung internet is also a browser that has a very strong market position and that's because we ship by default with every samsung device we're also part of the chromium project we're a browser that's built on top of the chromium, open source, project and code base that is the same code base at google chrome is built on top of it's also the same code base that microsoft edge is built on top of so there's a community of companies and organizations that are contributing into that into that open source project, including samsung and what we're doing is we're taking that and we're delivering samsung internet for android which is our kind of premium browser for the provides what we think of as the best user experience for the web on definitely on samsung devices, but we are also available across all android devices so any android device, you can download and install samsung internet and use it as your as your primary browser tony morelan 05 21 you know, of course, my android phone is a samsung phone so i didn't know that that a samsung internet browser is available for all android phones that's pretty cool yeah do you have an idea of how many people use the sampling internet browser? dan appelquist 05 34 on samsung devices? we're very high on other devices we're not that high but part of the point of being on other devices is that we it's it was very much a developer play to get it was a minimal extra effort i shouldn't say that because our engineering team it's probably gritting their teeth and saying are you kidding me? this was not minimal effort but anyway, it was it was it was definitely worth the effort? because one of the key things that we go out to developers and talk about is testing and the importance of testing on samsung internet one of the things that we're hearing very early on when we started work in 2016, on developer advocacy for samsung internet was, well, we can't test we don't have a samsung device can you lend us a samsung device? well, being available on non-samsung devices really made that conversation a lot easier, because we could just say, look, just download samsung internet and run it on whatever device you have and you'll get the get that experience and you'll be able to test and testing across browsers is so important when you're building any kind of application or any kind of web application tony morelan 06 41 and that was the reason why the whole web standard movement started, wasn't it? because we had so many different browsers that, you know, often developers were having to create different versions of their website just to be compatible with the different browsers dan appelquist 06 51 yeah, certainly the adherence to web standards has been a constant issue across the web i think that things are a lot better now than they used to be there are still differences in, in how the in the user experience of the browser itself, it can cause issues i'm going to be one example like, we have a feature on our browser, which is a scroll to the top of screen, which is a little button that appears over overlaid on top of the web content that allows the user to wherever they are to scroll right back up to the top of the screen now, if the web developer didn't test their application in samsung internet, they might put a key piece of ui underneath that section of screen where we overlay the button so it you know it things like that are these little micro issues that testing really helps and that is not necessarily about web standards compliance it's more about how you make sure that your web application runs correctly and all the ui is correct for the ui choices that that browser has made and how it displays it to you you know, tony morelan 08 01 i actually have a lot of experience with designing watch faces for samsung watches and the same is true yeah, it's best to design around the system icons that may appear under certain circumstances so that you don't have any, you know, usability issues 08 13 yeah tony morelan 08 15 so what is samsung internet done to drive awareness for developers? dan appelquist 08 19 so a lot of the work that we started off with when we started the team in 2016, was trying to drive market awareness of something and we already knew that, because we had some stats that we had strong usage numbers so we are roughly 10% of all mobile browsing in europe, for instance, the issue was actually driving awareness amongst developers that they really needed to, to understand those numbers and therefore pay attention to testing and you basically why they should pay attention to us as a browser so we started off by working with people like stat counter, that actually is one source that people use recordable stats of different browsers we then went on to work with google analytics so we after we've gotten counter to kind of separate us off from google chrome, we then went to google analytics and we got them to separate us off from google chrome and amazingly, after that happened, we started to get all these calls from different people uk government was one example where they started to say, hey, we've just had this amazing jump in usage from samsung internet, while they didn't actually have a jump they had, they always had very high usage of samsung internet but they just never knew it because google analytics was lumping us together with google chrome so and that's the problem with a lot of these stats keeper sites is that they weren't if they were just if they were not paying attention to that your specific browser, they were lumping you together with the particular engine that the browser based on so getting that right was like a key element and then we can take those numbers to other places and we can say like, look, this is how many of your users or what percentage of users using samsung internet, we really think you would benefit from talking to us or you would benefit from testing on samsung internet would you like to come do some joint projects with us all that kind of stuff we also have been working with places like mdn so mozilla developer network, or mdn, has recently or within the last few years has changed from a very mozilla specific website into basically a documentation website for the web, across browsers and what's underpin that is that they now have a product advisory board, which includes people from microsoft, samsung, mozilla, obviously google they also have people from a couple of smaller organizations such as boku, which is the north kind of open source development shop so they have been doing a lot to, to kind of create, and to reinforce the understanding that developers have it that's a cross platform development site so as part of our work there, we made sure that when there's a documentation page about a particular api, and they have a list of browsers underneath that documentation, that is the listed, supported browsers, versions for that particular api that said, some internet appears in that list can i use comm is another example of a website that people use when they want to find out if they can use a particular api and a particular browser, they were also not separating yourself from chrome so actually working with them, and then working with them through mdn we actually got them to use all of the mdn compatibility data, which is data that we update, that's data that our team goes in the background and updates through github, through an open source procedure, so that all that data is up to date both on mdn and on can i use so that developers have up to date information about which api's they can use and which versions of which browser and then in general, we've been doing a lot of things like writing blog posts, we write a lot of technical blog posts about the use of different api's, the use of different technologies, opinion pieces about topics on the web, we tend to focus on things where samsung has some kind of engineering investment so things like progressive web apps, that's one area where we've done a lot of work recently we've also done a lot of work on web xr and the immersive web and things like web payment, that kind of thing we also sponsor conferences, and we go out and speak at conferences and events these days, we're obviously we're doing a lot of virtual events and we're really trying to play a leadership role in how the developer advocacy community deals with the current situation with a lockdown by showing how you can very effectively engage with the developers and create conversation with developers using virtual needs tony morelan 13 04 you know, i couldn't agree with you more, you know, the timing with the launch of our new podcast here is actually right in line with probably what's going to be a huge change for all of the industries as we move forward in this new world of information sharing virtually, yeah, you know, i actually attended one of your virtual office hours and it was nice, because, you know, you brought in some outside people, some industry people to participate dan appelquist 13 28 and that's, and that's something that we that's the kind of ethos that we have had from the beginning we actually ran a two-day event in san jose a couple years ago, called samsung create and the whole idea of that was to feature samsung people yes, but at least half the speakers that we had were front were third party speakers that we brought in from the industry and we had an mdn speaker we had a microsoft speaker, later google speaker you know, it also fits together with the fact that our team besides doing the developer advocacy and outreach we're also doing a lot of industry work so we do work in w three c, i co-chair, a group in w three c, which is the world wide web consortium that sets standards for the web, i co-chair a group there called the technical architecture group, which is a kind of technical steering group for web standards my colleague, ada co-chairs, the immersive web working group, which is working on technologies that bring ar and vr to the web so we're not only playing a role in terms of getting the word out about these technologies, but we're also playing a role in terms of setting the standards tony morelan 14 40 is simply internet just for android dan appelquist 14 42 the work that we're doing is on samsung internet for android and the team that we're attached to a samsung internet for android if you have a samsung tv or if you have a samsung watch, you may also know that there are other versions of samsung internet they have the same logo and they are also based on chromium, but they're actually built by different teams within samsung divisions so there's some cross working between those different groups, especially because they're all using the chromium base and so they share a lot of knowledge and they share a lot of information but actually, the work that we're doing, we focus on samsung internet for android, tony morelan 15 20 when you have improvements that you want to make to the samsung internet browser are those released at the same time when new devices are released dan appelquist 15 28 so one of the things that we did very early on, and i think this was right around the time when i started in 2016, is we unlinked browser releases from device releases, we're now rolling out on a regular cadence, new releases of the browser that are released through play store and also through galaxy store and we do sometimes do releases that are timed to device releases, but those are still in the in the context of our of our regular software release schedule so and that's really important for the web, because the web needs to be evergreen when there's a security vulnerability, or some kind of new feature that web developers want to use, they don't want to have to wait for a new device to come out in order to be able to use that feature likewise, when there are features or technologies that are deprecated, from the web stack, you really want to, either because they're vulnerable, or they're, they're difficult to use, or they're just not very performant or however, you want to be able to make sure that you can update all the browsers to remove that feature tony morelan 16 31 and that's great to hear that, that the updates are not tied to new device releases, you know, because i'm sure that developers are wanting to get those updates just as soon as soon as possible and you can get those features out to the to the developer community that's right yeah, yeah so tell me what is the benefit of using samsung internet over another browser, like say google chrome, dan appelquist 16 51 one of the things that we pride ourselves on is a focus on user privacy so we think that we have better privacy features than google chrome and that's certainly a goal that we have and something that you can see, as evidenced through a lot of the features that we ship with the browser so for instance, we have secret browsing mode, which is secured by knox and also linkedin to our to biometrics on the device, so that you can secure it with your fingerprint or your face id or however, we also integrated into samsung pay currently, that's only in the us but there's a web feature called web payment, which integrates into samsung pay for us customers that allows you to pay directly from your web page using samsung pay using the on-device payment technology, we integrate into one ui so that's the samsung specific ui across the device, which our browser is based on top of as also as part of the whole privacy consideration we allow our users to download and install ad blockers we allow to download and install extensions, which can be privacy helping or can be other things like shopping related for instance, we also allow you to choose your own default search engine so we have for a while now allowed you to choose duckduckgo is a search engine, which is a very privacy focused search engine but with the release 11 2, that's about to come out we've actually even increased that list for and we have way more search engines that you can choose as your default search engine you can't do that with google chrome and we have our own built in smart anti tracking technology that uses machine learning on the phone to in a very privacy focused way shield your browsing activity from an unwanted tracking on the web, which is a major issue right now, for a lot of users tony morelan 18 49 you know, it's pretty safe to say that just about everybody at some point has had something hacked whether it's you know, a credit card or maybe it's an online account, so always happy to hear about, you know, new technologies that will definitely help keep the internet safer tony morelan 19 03 can we talk a little bit about revenue? tony morelan 19 04 how does samsung internet create revenue? dan appelquist 19 07 well, we are getting revenue from search referral that's the same as every other browser that's out there i mean, how do browsers make money browsers usually make money from search referral we also have opportunities for business development when it comes to our quick access bar, which is region specific so when you first load the browser, you're going to see a number of links that show up, you know, on your kind of quick access screen, that all of that is user configurable, and the user can change those whenever they want to it's about what the defaults are those are really how samsung is making money i think the other part of it is more of a strategic play there are billions of users using the web why would samsung want to see to that territory to somebody else? instead of being able to control that user experience and provide the best user experience, and we can, that's great so how does the web developer ecosystem differ from other developer ecosystems? one thing that is important to think about what the web developer ecosystem is that it's inherently cross browser, cross device and cross ios, and that's true of the web in general, the web needs to be able to exist across different browsers across different classes across different form factors you need to be able to bring up your web page and have it work on your television as well as your laptop screen as well as your phone responsive design and progressive enhancement have been some of the key technologies that web developers have been using to ensure that that can be the case, feature detection these kinds of things are really important when it comes to building websites you're not just building for one particular device you're not just building for one particular vendor you're you've really got to be listening to and paying attention to a lot of different voices, when you enroll in a developer program for a specific platform, you tend to be focusing on one particular device or one particular brand, one particular os and that also provides some clarity, you know, which can be a good thing however, when you're developing for the web, you need to pay attention all these different platforms and devices that's where something where mdn can come in, and why we're putting so much energy into that because it can be a place where developers can come and find out information across different platforms tony morelan 21 36 you had mentioned a little bit about progressive web apps for new developers out there can you explain what exactly is a progressive web app? dan appelquist 21 42 so a progressive web app is i mean, i mentioned technologies like progressive enhancement and responsive web design, which help developers build web applications that can that can work well across different browsers, different oss, different devices, different form factors the idea of progressive web apps brings that to the next level where we try and learn a little bit from the success of native applications on the mobile platform in particular, and are able to provide a very app like user experience for the web application itself so a really good example of a progressive web app, probably one of the best ones out there is the twitter pw a lot of people are removing twitter from their phones entirely and simply using you're removing the native app, i should say, from their phones entirely and just using the progressive web app, because it provides almost all of the same features, but in a much more lightweight and much more privacy centric kind of kind of way because when you're using the twitter progressive web app, it's been saved from the browser, and therefore it runs inside of the browser even though from a user perspective, it appears like any other application on the phone, it's actually running inside of the browser so it's running in the same context, as saw the other browser tabs that you have going so it's a bit like, i've called it having your cake and eating it too in terms of being able to build something really easily build something cross platform, but also be able to enjoy that real estate on the phone home screen push notifications that keep bringing the user attention back ability to have through a service worker kind of offline experience, all the kind of features that users expect from a regular native application they can begin to expect from these kinds of progressive web apps tony morelan 23 35 yeah talk a little bit about ar and vr as they relate to samsung internet can you share a little bit about what you were doing in those areas? dan appelquist 23 42 so samsung internet was one of the first browsers to launch the web vr api that api has actually been recently deprecated in favor of the web xr api, which is the api that my colleague ada has been sharing working group to create webex r is a way to bring ar and vr into the browser now, if you are familiar with kind of ar and vr, in a kind of game, console type environment or scenario, or with various specialized equipment, then you might be scratching your head and thinking, well, why? why do i need ar and vr in my browser is the target it's because the target audience for these kinds of ar and vr applications in the web are a little bit more like casual games are to the gaming industry we fully expected we have seen the development of web applications in the gaming space and also in the kind of enterprise space where they take advantage of the technology in the browser to enable you to deliver a kind of virtual environment, a shared virtual environment that provides a lot of those kinds of advantages to a rm vr experience, but you don't have to download any software, you don't have to make sure that your, your whole set of download software is correct and it works progressively across different environments so a couple years ago, we worked with bbc here in london to deliver a doctor who gave that was coming out alongside of the launch of one of their seasons of doctor who it's basically like a very simple navigating the tardis it was called the time vortex, navigating the tardis along a vortex and avoiding obstacles and that kind of thing but the reason they were they were so interested in web vr at the time, was that it's available across multiple browsers they have a public service mandate where they're trying to get that application into as many hands as possible into the hands of kids that may have like a, you know, an older phone that aren't going to have the latest up to date technology and an ar headset or a vr headset those are the kinds of use cases that i'm interested in how do we get these tools have ar and vr into everybody's hands? and i think the web is well positioned to be that platform definitely tony morelan 26 08 let's talk a little bit about success and challenges can you first tell me about some of the challenges that samsung internet has faced? dan appelquist 26 14 i think one of the challenges and i alluded to it before maybe is just recognition recognition of samsung internet as a as a key browser we know we are, we are increasingly driving that awareness amongst the developer community but we still run a cross a lot of people who just never heard of us or if they heard of us that kind of dismissed us alongside of all the other oem browsers we like to say we're not actually like any of the other oem browsers because first of all, we have enormous market share compared to our market share it doesn't even near mcateer doesn't compare to ours second of all, we put a lot back into the web platform and that's extremely important to us we put a lot back into the open source side of it and we put a lot back into the and standard cipher so driving that has been a challenge and continues to be a challenge but it's something that we took on and we understand that and i think we're turning that corner on that one tony morelan 27 11 sure and there's a huge value when there are multiple browsers out there i mean, if you go back to when internet explorer dominated the market, and then firefox came on board, that's when we started to see a much better browser experience correct? dan appelquist 27 23 yes and in fact, that's another kind of philosophical point that drives the work of our team is that we strongly we strongly believe in browser diversity it's not a web where one browser dominates, is not actually going to be a healthy web ecosystem we are based on top of chromium but we have made different ui decisions and different decisions in terms of browser features than chrome and that's something that we think is important and helps drive the ecosystem forward we also work with people through standards and through web developer advocacy in companies that are competitors, i mean, i work with people from apple in the context of web standards, and wcc quite often and choices that they make in safari help to drive the web forward in different areas than the choices that we make in samsung android, the choices that google makes in chrome it's a good example tony morelan 28 23 definitely so what are some of the areas of success for samsung internet? dan appelquist 28 28 so from the beginning, when we started things off in 2016, we, we started off with some ideas around how we were going to treat developer advocacy differently one decision that we took was to ensure that our team is attached to the engineering group that is producing samsung internet and so we have a strong connection to our own engineering team and we work very closely with them and we do joint work and when we've done our own events, for instance, we've had members of our engineering team come over from korea and speak at those events and we have a strong relationship with them and we see ourselves as primarily web developer engineers that are also doing advocacy so that's one element and i think the other thing that we're very keen on is promoting diversity and inclusion in the tech community in general and in the web developer community specifically so for instance, we have a diversity inclusion statement about conference participation many organizations have these now i'm very glad to see that many do we started rs in 2016 when we put that in place, i actually used as a template, a statement that the uk government digital service had come up with which so we were basically using, what they had put in place and adapting it for our needs with reference to their work, obviously, where we will not participate in an event that doesn't have good diversity credentials that isn't doesn't have a code of conduct an enforcement policy, that kind of thing that's why very often, if you attend any of our virtual meetings and meetups, you'll always see me at the beginning talking about the code of conduct and just reinforcing the enforcement procedure for it so we take that very seriously and we also put energy into events and activities that are specifically focused on driving better diversity and inclusion in tech so there's something called global diversity cfp day, which is a yearly event that happens across the world where you were people who are new to speaking on tech conferences can come and get mentorship from people who have more experience speaking in tech conferences about how to submit their proposals for tech conferences, and it's specifically focusing on getting more diverse speakers out there, and driving more diversity and inclusion into the tech conference circuit in general so that's something we participate in and we also sponsor events that are focused on particular on inclusion queer js is a very good example where we were we sponsored that and then we, we sponsored that in berlin and then we were very happy to see that it grew into a bigger thing after that, yeah, that's something that we're putting a lot of energy into and we've seen that come back to us in the form of, i think people really appreciate that anyway, the kind of developers that we want to work with appreciate that and we really appreciate that kind of feedback cycle tony morelan 31 31 that's great so what advice do you have for developers looking to build for samsung internet? dan appelquist 31 36 sure, you can follow us on twitter, first of all, at samsung internet you can also follow us individually i'm at torgo always talking about i'm torgo on twitter, to our geo and i'm always talking about web standards and other web technologies you can go to our developer hub, which is samsung inter dotnet and then links off to all kinds of places like our blog, we actually repost articles from our blog onto samsung into dotnet our blog is on medium so you can follow us on medium at samsung internet dev, you can attend an office hours event so if you go to meetup calm, and you subscribe to our meetup group, so we're running a series of events through that meetup group other than that, the best way to kind of keep tabs on what we're doing is to pay attention to our twitter and we're also by the way posting all of those events on the samsung developer platform on developer samsung com and you can pay attention to our linkedin page, we have a linkedin page, we search for samsung internet, you'll find it on linkedin and we're actually posting all of those blog posts and event notifications and all that kind of stuff there as well trying to engage with that community tony morelan 32 50 that's excellent but hey, dan, i really appreciate you taking the time to sit down and do this podcast with me, you know, yeah, it was a lot of fun to not only learn about you, but also learn about samsung internet dan appelquist 33 00 thank you really appreciate it outro 33 03 looking to start creating for samsung? download the latest tools to code your next app, or get software for designing apps without coding at all sell your apps to the world on the samsung galaxy store check out developer samsung com today and start your journey with samsung the pow! podcast is brought to you by the samsung developer program and produced by tony morelan
announcement web
blogthe web doesn’t have a marketing team. it doesn’t have a single developer program you can sign up to. and it doesn’t have a manual. that’s by design. like the internet, the web isn’t controlled by any single entity. but this decentralisation can also be a pain for web developers and designers. the web has lots of documentation, but it’s often an issue for developers to find documentation that is not written from a perspective of one web product — for example, a browser or a framework. the web needs a place where people can go to get the ground truth. over the last decade, mdn has become that trusted source of information — a place where developers know they can get the documentation they need about how to build for the web. that’s because, even though it’s a project run by mozilla, it documents the web across all browsers. cross-browser compatibility is one of the key pain points of web development, and good documentation is one of the ways we can mitigate that pain. ask any developer where they go first for documentation and they will likely cite mdn. that’s why, in 2017, i jumped at the chance of joining the product advisory board of mdn. i saw it as an opportunity to give back, and also to be a part of a project to reinforce this cross-browser message. by the way, i started my career as a technical writer, so i have opinions on the importance of good technical writing when it comes to the developer experience. the product advisory board was an experiment from mdn to bring in an external advisory group — including members from microsoft, google and w3c. these organisations were all already investing time in building and maintaining mdn. the pab gave them a way to advise on product direction and hear about future planning. open web docs fast forward to 2020. mozilla restructured and mdn took a hit. as a response, the same organisations (and people) who had come together to support mdn via the product advisory board came together again, with others, to launch something called open web docs. open web docs is a new open source project, set up to help support and maintain documentation on the web — via mdn. in practice, this means that open web docs will be paying writers to help write documentation and build the tools that are required to produce high-quality web documentation (for example, to maintain browser compatibility data), in collaboration with mozilla. open web docs will help to ensure the stability of mdn and will focus the activities of the multiple stakeholders in good web documentation. i’m proud to have been a part of the planning for this effort. i’m also glad that samsung internet will be investing our time and energy, both through our continued participation in the mdn product advisory board and via open web docs, in helping to document the web platform. a beautiful library at trinity college, dublin. photo by alex block on unsplash
Daniel Appelquist
Develop Smart TV
docsamsung checkout dpi portal overview the samsung checkout dpi digital product inventory portal https //dpi samsungcheckout com/ is a web service portal designed for the samsung smart tv partners, which samsung helps them sell products and items through smart tv apps from the dpi, partners can register and manage products for sale and access the transaction history logs and sales reports for the applications they own dpi main services product management standard in-app products, subscriptions, paid apps order management purchase history for each user sales reports and financial reports coupon management creation and issuance service initiation process an account for the samsung apps tv seller office is required to use the dpi service once registered, partners can use the dpi service ※ dpi mini guide helps to grasp the overall workflow of samsung checkout service and dpi site - mini guide download step 1 accessing samsung checkout - login create a samsung account register your app in seller office and login to the dpi ① create a samsung account ② register your app in seller office ③ login to the checkout dpi portal noticeat first, only 'manager' in seller office can access dpi portal manager can manage entire menu in dpi portal manager can give permission to 'members' through membership management ※ members cannot access main screen before being given permission by a manager step 2 create group and give permissions only managers can access the member menu and manage groups ① member menu managers can manage and give menu permissions to members this can be done through the membership management and the group management menus ② group management > click create group go to create group menu and configure a group you can click operation, finance, cs or developer buttons to show preset menu permissions these preset menu permissions are for guidance only and can be edited ③ view group management list now you can manage members go to ‘membership management > edit permissions’ menu ④ membership management > edit permissions managers can manage and give menu permissions to members this can be done through the membership management and the group management menus ⑤ select member and group go to create group menu and configure a group you can click operation, finance, cs or developer buttons to show preset menu permissions these preset menu permissions are for guidance only and can be edited ⑥ confirm permissions now you can manage members go to ‘membership management > edit permissions’ menu step 3 issuance of dpi security key the dpi security key must be issued to safely use the service the issued key can be viewed under 'settings > app details setting' the key is a security key to use api calls, and this is a protection mechanism for invalid access from/to the app and dpi the related process is described in the section generating check values importantthe issued security key is a key to be used for open api calls made by a smart tv app please be careful not to reveal this key to others test buyers you can enroll test buyer in settings > test buyer menu checkout does not provide dummy pay anymore therefore, if you’d like to do payment test, please enroll test buyer ① input the test buyer’s samsung account id click [check samsung account registration] and please check the samsung account is available ② input the test buyer’s name ③ contact is not required information after filling in all the required information, click [register] button noticebefore launching your app on tv, only test buyers are allowed to proceed with the payment test importantafter releasing your app on tv, everyone is free to proceed with the payment test ※ after the test, you must manually process the refund it does not provide an automatic refund function product products can be registered for different countries through the add a new product menu configure product ① go to ‘product > add a new product’ menu ② this is where a new product is registered ③ enter product information product id, description, product type, visibility, expiration ④ please note that when you check visibility, the product will become visible from the app product type the following table explains the details of "product type" product type description consumable consumers can purchase this type of product anytime purchase history can be retrieved for 90 days non-consumable consumers can purchase this type of product only once purchase history can be retrieved with no time restriction limited period once this type of product is purchased, repurchase cannot be made during the time when the product effect set by cp lasts purchase history can be retrieved for 90 days if “limited period” product type is chosen, the duration of time for the product effect to last can be entered in the units above minute the duration time for the product effect to last is allowed for the maximum of 90 days subscription dpi system processes automatic payment on a certain designated cycle paid app for paid apps, when you register your app on dpi system you need to select it as paid app dynamic product in case that pater and samsung agree on that products and prices will be managed by cms of partner not samsung’s dpi, partner should select “dynamic product” as a product type even though all the information of actual products are on cms, partner need to register a representative item on dpi once so that our system can display information on samsung smart tv app/game store which is legally required and verify which server we need to call for certain products cms or dpi if dynamic product is chosen, partner does not register each products on dpi that partner sells in their app actuallypartner builds and operates its own cms to manage products information including prices and to verify purchase requestsadditional requirementsverification/no verification ‘verification’ is a recommended option otherwise partner has to handle the verification process by themselves and take all the responsibility for all the error cases related to verification process if ‘verification’ is selected, ‘verify uri’ is also required this uri should serve the function of checking product information such as product itself, price and currencyprice settingprice range information of products that you actually sells in your app is required by country/location it is not used for actual payment for providing the app information on samsung smart tv app/game store which is legally required thus, it has to be updated when the price range of your products is changed subscription it is necessary to make a subscription group before creating subscription item add new subscription group ① go to ‘product > subscription group > add a new group’ menu ② this is where a new subscription group is registered ③ enter subscription group name setting free trial offering ① free trial is able to set per “product group” id ② partner defines whether a free days offer whether it should be offered once per account/device or both notice [free trial offering option] per account only once if a user use a free trial offer with the "a" account once, free experience will be expired, and additional free experience is not possible with the "a" account however, if a cp does not check “ per device only once ”, a user can experience it free of charge when creating a new account with no subscription history per device only once if a user use one free trial offer on "a" device, a user cannot use free experience even if you change your account and create a new "b" account on a device both- per account only once provide free trial offer both based on “ a ” account and “ a ” device case 1 with the “ b ” account that does not have a subscription history, free experience is not available when you first sign up for the “ a ” device case 2 with “ a ” account, which has a history of cancellation after subscription, “ b ” device subscription is not allowed for free configure subscription ① go to ‘product > add a new product’ menu ② select subscription in the product type ③ enter product information product id, description ④ choose billing period, produce level, subscription group ⑤ if you’d like to make free trial subscription, please input the free trial period ⑥ check the duplicate benefit, visibility, expiration subscription plan checkout supports upgrade, downgrade, cross-downgrade subscription plan create a subscription group to set the subscription level in the same group, consumers can upgrade and downgrade freely cross-downgrade api is currently possible, checkout does not provide cross-upgrade api importantif you’d like to use the cross-upgrade function, please use a combination of upgrade api and cross grade api please refer to the details on the sdf site in the near future, we will provide the guide on the sdf site field description the following table explains the details of input fields input field description product name representative product name the name of the product used in the representative country/location must be entered in the country/location product name field this field cannot be left empty product id alphanumeric and two special characters '-', '_' are allowed maximum 20 bytes product description describe the product type following product types are allowed;consumable, non-consumable, limited period, paid app, subscription, dynamic product period if the product type is ‘limited period’, a number fewer than 129,600 in minutes is allowed maximum 90 days billing period if the product type is "subscription" , "weekly","monthly","annualy" is allowed subscription group it is necessary to make a subscription group before creating subscription item free trial period if the product type is "subscription", a number in days is allowed visibility a field indicating whether the product can be shown "show" , "hide" and "optional" is allowed duplication benefit the condition defines whether a free days offer whether it should be offered once per account/device or both expiration if the product type is "subscription" , "not applicable" ,"1 month", "6 month", "1 year" is allowed country/location product name the country/location and product name are separated by ' ' and a maximum of 50 bytes of product name is allowed if more than one country/location is entered, use ' country/location product price the country/location and price information are separated by ' ', and if more than one country/location is input, the use of the ' transaction policy the dpi provides information on the status for the products purchased by users through request purchases list api in case the purchased product is not applied on the real game, the status can be checked on the “product applied status” in case the purchased product was refunded to the user, the status can be checked on the “sales cancellation status” the period of time the above status information is provided through api to the application can be classified by the product type as shown below product type applied purchases purchase history not applied purchases refund/cancellation consumable application date + 90days all products can be viewed with no restrictions in time period refund date+ 90 days subscription subscription expiry date subsendtime + 90days subscription expiry date subsendtime + 90 days subscription expiry date subsendtime + 90 days glossaries term description billing / payment service a service created in order to help monetary transactions between service providers and users partner / app developer be in charge of creating products suitable for consumers of the smart tv paid app a service or app that can be only downloaded after making a payment in-app purchase a method to pay for additional products and features within both free apps and paid apps paypal paypal the global payments company headquartered in the united states that provide the payment service via pre-registered payment method digital product inventory dpi a system provided to developers to enter and manage extra products and items in their own apps it is directly connected to the app store samsung checkout billing client a payment ui module for consumers to add their choice of payment methods and pay for premium apps or special items operating zone/ staging zone operating zone is a live environment where the real users get access to verification system is a test environment where 3rd party development and qa are conducted sandbox zone is regarded as staging zone operating tv / development tv - operating tv tv purchased from on/off-line, tv with the same setting environment as the one in general users - development tv tv that is made in use of a board separately provided by samsung electronics, tv that allows a setting environment for development different from the one for general users cms content management system product catalogue management server or system including price information in this document, this word refers to the server for the type “dynamic product” that has all the information of products and handles verification with its own product catalogue for reference, product information of other product types should be managed in dpi not 3rd party cms dpi will be looking at cms to pull necessary product information as needed cms will be the source of truth regarding content metadata, purchase history which user bought which title at which resolution of purchase/rental, etc whereas dpi will be the source of truth of transactional data i e transaction amount, tax amount both systems will be linked by "invoice id" that is generated by dpi and passed over to cms for every successful transaction ※ dpi user guide full version provides detailed desciptions and examples of new dpi site functions/usages - full guide download
Develop Smart TV
docsamsung checkout dpi portal overview the samsung checkout dpi digital product inventory portal https //dpi samsungcheckout com/ is a web service portal designed for the samsung smart tv partners, which samsung helps them sell products and items through smart tv apps from the dpi, partners can register and manage products for sale and access the transaction history logs and sales reports for the applications they own dpi main services product management standard in-app products, subscriptions, paid apps order management purchase history for each user sales reports and financial reports coupon management creation and issuance service initiation process an account for the samsung apps tv seller office is required to use the dpi service once registered, partners can use the dpi service ※ dpi mini guide helps to grasp the overall workflow of samsung checkout service and dpi site - mini guide download step 1 accessing samsung checkout - login create a samsung account register your app in seller office and login to the dpi ① create a samsung account ② register your app in seller office ③ login to the checkout dpi portal noticeat first, only 'manager' in seller office can access dpi portal manager can manage entire menu in dpi portal manager can give permission to 'members' through membership management ※ members cannot access main screen before being given permission by a manager step 2 create group and give permissions only managers can access the member menu and manage groups ① member menu managers can manage and give menu permissions to members this can be done through the membership management and the group management menus ② group management > click create group go to create group menu and configure a group you can click operation, finance, cs or developer buttons to show preset menu permissions these preset menu permissions are for guidance only and can be edited ③ view group management list now you can manage members go to ‘membership management > edit permissions’ menu ④ membership management > edit permissions managers can manage and give menu permissions to members this can be done through the membership management and the group management menus ⑤ select member and group go to create group menu and configure a group you can click operation, finance, cs or developer buttons to show preset menu permissions these preset menu permissions are for guidance only and can be edited ⑥ confirm permissions now you can manage members go to ‘membership management > edit permissions’ menu step 3 issuance of dpi security key the dpi security key must be issued to safely use the service the issued key can be viewed under 'settings > app details setting' the key is a security key to use api calls, and this is a protection mechanism for invalid access from/to the app and dpi the related process is described in the section generating check values importantthe issued security key is a key to be used for open api calls made by a smart tv app please be careful not to reveal this key to others test buyers you can enroll test buyer in settings > test buyer menu checkout does not provide dummy pay anymore therefore, if you’d like to do payment test, please enroll test buyer ① input the test buyer’s samsung account id click [check samsung account registration] and please check the samsung account is available ② input the test buyer’s name ③ contact is not required information after filling in all the required information, click [register] button noticebefore launching your app on tv, only test buyers are allowed to proceed with the payment test importantafter releasing your app on tv, everyone is free to proceed with the payment test ※ after the test, you must manually process the refund it does not provide an automatic refund function product products can be registered for different countries through the add a new product menu configure product ① go to ‘product > add a new product’ menu ② this is where a new product is registered ③ enter product information product id, description, product type, visibility, expiration ④ please note that when you check visibility, the product will become visible from the app product type the following table explains the details of "product type" product type description consumable consumers can purchase this type of product anytime purchase history can be retrieved for 90 days non-consumable consumers can purchase this type of product only once purchase history can be retrieved with no time restriction limited period once this type of product is purchased, repurchase cannot be made during the time when the product effect set by cp lasts purchase history can be retrieved for 90 days if “limited period” product type is chosen, the duration of time for the product effect to last can be entered in the units above minute the duration time for the product effect to last is allowed for the maximum of 90 days subscription dpi system processes automatic payment on a certain designated cycle paid app for paid apps, when you register your app on dpi system you need to select it as paid app dynamic product in case that pater and samsung agree on that products and prices will be managed by cms of partner not samsung’s dpi, partner should select “dynamic product” as a product type even though all the information of actual products are on cms, partner need to register a representative item on dpi once so that our system can display information on samsung smart tv app/game store which is legally required and verify which server we need to call for certain products cms or dpi if dynamic product is chosen, partner does not register each products on dpi that partner sells in their app actuallypartner builds and operates its own cms to manage products information including prices and to verify purchase requestsadditional requirementsverification/no verification ‘verification’ is a recommended option otherwise partner has to handle the verification process by themselves and take all the responsibility for all the error cases related to verification process if ‘verification’ is selected, ‘verify uri’ is also required this uri should serve the function of checking product information such as product itself, price and currencyprice settingprice range information of products that you actually sells in your app is required by country/location it is not used for actual payment for providing the app information on samsung smart tv app/game store which is legally required thus, it has to be updated when the price range of your products is changed subscription it is necessary to make a subscription group before creating subscription item add new subscription group ① go to ‘product > subscription group > add a new group’ menu ② this is where a new subscription group is registered ③ enter subscription group name setting free trial offering ① free trial is able to set per “product group” id ② partner defines whether a free days offer whether it should be offered once per account/device or both notice [free trial offering option] per account only once if a user use a free trial offer with the "a" account once, free experience will be expired, and additional free experience is not possible with the "a" account however, if a cp does not check “ per device only once ”, a user can experience it free of charge when creating a new account with no subscription history per device only once if a user use one free trial offer on "a" device, a user cannot use free experience even if you change your account and create a new "b" account on a device both- per account only once provide free trial offer both based on “ a ” account and “ a ” device case 1 with the “ b ” account that does not have a subscription history, free experience is not available when you first sign up for the “ a ” device case 2 with “ a ” account, which has a history of cancellation after subscription, “ b ” device subscription is not allowed for free configure subscription ① go to ‘product > add a new product’ menu ② select subscription in the product type ③ enter product information product id, description ④ choose billing period, produce level, subscription group ⑤ if you’d like to make free trial subscription, please input the free trial period ⑥ check the duplicate benefit, visibility, expiration subscription plan checkout supports upgrade, downgrade, cross-downgrade subscription plan create a subscription group to set the subscription level in the same group, consumers can upgrade and downgrade freely cross-downgrade api is currently possible, checkout does not provide cross-upgrade api importantif you’d like to use the cross-upgrade function, please use a combination of upgrade api and cross grade api please refer to the details on the sdf site in the near future, we will provide the guide on the sdf site field description the following table explains the details of input fields input field description product name representative product name the name of the product used in the representative country/location must be entered in the country/location product name field this field cannot be left empty product id alphanumeric and two special characters '-', '_' are allowed maximum 20 bytes product description describe the product type following product types are allowed;consumable, non-consumable, limited period, paid app, subscription, dynamic product period if the product type is ‘limited period’, a number fewer than 129,600 in minutes is allowed maximum 90 days billing period if the product type is "subscription" , "weekly","monthly","annualy" is allowed subscription group it is necessary to make a subscription group before creating subscription item free trial period if the product type is "subscription", a number in days is allowed visibility a field indicating whether the product can be shown "show" , "hide" and "optional" is allowed duplication benefit the condition defines whether a free days offer whether it should be offered once per account/device or both expiration if the product type is "subscription" , "not applicable" ,"1 month", "6 month", "1 year" is allowed country/location product name the country/location and product name are separated by ' ' and a maximum of 50 bytes of product name is allowed if more than one country/location is entered, use ' country/location product price the country/location and price information are separated by ' ', and if more than one country/location is input, the use of the ' transaction policy the dpi provides information on the status for the products purchased by users through request purchases list api in case the purchased product is not applied on the real game, the status can be checked on the “product applied status” in case the purchased product was refunded to the user, the status can be checked on the “sales cancellation status” the period of time the above status information is provided through api to the application can be classified by the product type as shown below product type applied purchases purchase history not applied purchases refund/cancellation consumable application date + 90days all products can be viewed with no restrictions in time period refund date+ 90 days subscription subscription expiry date subsendtime + 90days subscription expiry date subsendtime + 90 days subscription expiry date subsendtime + 90 days glossaries term description billing / payment service a service created in order to help monetary transactions between service providers and users partner / app developer be in charge of creating products suitable for consumers of the smart tv paid app a service or app that can be only downloaded after making a payment in-app purchase a method to pay for additional products and features within both free apps and paid apps paypal paypal the global payments company headquartered in the united states that provide the payment service via pre-registered payment method digital product inventory dpi a system provided to developers to enter and manage extra products and items in their own apps it is directly connected to the app store samsung checkout billing client a payment ui module for consumers to add their choice of payment methods and pay for premium apps or special items operating zone/ staging zone operating zone is a live environment where the real users get access to verification system is a test environment where 3rd party development and qa are conducted sandbox zone is regarded as staging zone operating tv / development tv - operating tv tv purchased from on/off-line, tv with the same setting environment as the one in general users - development tv tv that is made in use of a board separately provided by samsung electronics, tv that allows a setting environment for development different from the one for general users cms content management system product catalogue management server or system including price information in this document, this word refers to the server for the type “dynamic product” that has all the information of products and handles verification with its own product catalogue for reference, product information of other product types should be managed in dpi not 3rd party cms dpi will be looking at cms to pull necessary product information as needed cms will be the source of truth regarding content metadata, purchase history which user bought which title at which resolution of purchase/rental, etc whereas dpi will be the source of truth of transactional data i e transaction amount, tax amount both systems will be linked by "invoice id" that is generated by dpi and passed over to cms for every successful transaction ※ dpi user guide full version provides detailed desciptions and examples of new dpi site functions/usages - full guide download
Develop Samsung Pay
doc3 3 web checkout sdk 3 3 1 overview samsung pay web checkout enables seamless, secure payments on your website using cards stored in the samsung wallet app this javascript-based sdk makes it easy to integrate samsung pay into your desktop or mobile web checkout experience key features cross-device supportusers can complete purchases on both desktop and mobile browsers samsung wallet integrationpayments are authorized using cards saved in the samsung wallet mobile app secure credential transmissionpayment credentials are securely generated on the mobile device and transmitted to your website multiple authentication optionsusers can bind their device by either entering their samsung account email scanning a qr code displayed on your checkout page user scenario with the service flow the following figures describe the user scenario for making a purchase through samsung pay web checkout payment initiation & device binding the user selects samsung pay as the payment method at checkout a web checkout ui launches, prompting the user to link their device by either enter samsung account email scan a qr code using their mobile device a push notification is sent to their samsung wallet app for mobile devices the user selects samsung pay as the payment method at checkout a payment request pop-up is displayed and prompts the user to select the “pay” button the samsung wallet app automatically opens on the current device user confirmation on mobile device the user taps the notification on their device the samsung wallet app opens a payment sheet showing order details the user selects a payment card and authorizes the purchase payment completion a "verified" screen is shown in the browser as the transaction is confirmed your website receives a secure payment credential from samsung pay you forward this credential to your payment processor to complete the purchase 3 3 2 web checkout integration samsung pay web checkout enables seamless online payments using samsung wallet on supported mobile devices let’s us look how to integrate the web checkout sdk into your website and process secure, tokenized transactions prerequisites before integrating samsung pay web checkout, ensure the following samsung pay merchant id you must complete the partner onboarding process to obtain a valid merchant id tokenization support your acquirer and issuer must support tokenized in-app transactions per card network standards web checkout integration steps to integrate the samsung pay web checkout solution to your website include the samsung pay sdk add the sdk to your website's frontend <script src="https //img mpay samsung com/gsmpi/sdk/samsungpay_web_sdk js"></script> configure payment methods define the supported card brands, protocol, api version, and your service merchant id const paymentmethods = { "version" "2", "serviceid" "dcc1cbb25d6a470bb42926", "protocol" "protocol_3ds", "allowedbrands" ["visa","mastercard"] } initialize the samsung pay client set the environment "stage" – testing with device "stage_without_apk" – testing without device simulated "production" – live environment const samsungpayclient = new samsungpay paymentclient {environment "stage"} ; note if your project has a content-security-policy csp applied, please ensure that you add a nonce to the css to maintain compliance this can be done by updating your sdk configuration as follows const samsungpayclient = new samsungpay paymentclient {environment "stage", nonce "your-nonce"} ; check availability verify samsung pay availability in the user’s browser/device samsungpayclient isreadytopay paymentmethods then function response { if response result { // add a payment button } } catch function err { console error err ; } ; add samsung pay button use the official samsung pay button asset and adhere to branding guidelines <div id="samsungpay-container"> <button id="samsung-pay-btn"> <img src="/your/path /samsung-pay-button png" alt="samsung pay" style="{follow the samsung's official branding guideline}" /> </button> </div> note download the official samsung pay button image and branding guideline from download page and use it directly in your html as shown here download attach click handler add your event handler to the button document getelementbyid "samsung-pay-btn" addeventlistener "click", onsamsungpaybuttonclicked ; create the transaction detail define transaction metadata such as order info, merchant details, and total amount const transactiondetail = { "ordernumber" "dstrf345789dsgty", "merchant" { "name" "virtual shop", "url" "virtualshop com", "id" "xn7qfnd", "countrycode" "us" }, "amount" { "option" "format_total_estimated_amount", "currency" "usd", "total" 300 } } launch payment flow trigger the web checkout interface when the user clicks the payment button when the onclick event is triggered, your event handler must call the loadpaymentsheet method, which initiates the web checkout ui flow when the user confirms the payment from their mobile device, you receive the paymentcredential object generated by the device note extract the payment credential information from the 3ds data key within the paymentcredential object and process it through your payment provider inform the samsung server of the payment result using the notify method within the paymentresult object samsungpayclient loadpaymentsheet paymentmethods, transactiondetail then paymentcredential => { // forward paymentcredential to your payment provider const paymentresult = { const paymentresult = { "status" "charged", "provider" "pg name" } samsungpayclient notify paymentresult ; } catch error => { payment credential sample the paymentcredential is the resulting output of the loadpaymentsheet method sample paymentcredential json output using jwe-only { "method" "3ds", "recurring_payment" false, "card_brand" "visa", "card_last4digits" "8226", "3ds" { "type" "s", "version" "100", "data" "eyjhbgcioijsu0exxzuilcjrawqioiixzhlsbkfvrvjttk53z0j0mmvzcevwu1poswrzzghqbvi3bzhqcdvkagvbpsisinr5cci6ikppu0uilcjjagfubmvsu2vjdxjpdhldb250zxh0ijoiulnbx1blssisimvuyyi6ikexmjhhq00ifq jykxn2h9pk1uj-4knpuij1r49ykw7-3aelznhadzsztclvjlhoyjomujfl1h21yq_5rmdwz9lj6o67j8m6kn_1dnkvnqaugi203ol5tegf-j15n_pcinj1nycfyivohazidbg9fq2nzts_muu9cvykiz-ifsuz6rfl9aiuoakjpctzpn8lwlddzxzme3j86sd45i-ahxwbujfvy9d2zrt1sddgoxgorjrzy3o5s29pybkaytjmcpc_jicu-sdsx3s1snm_cvhaqiccoxyidih6hfwo35fsswysvxu8yfpgtwbcdai9ujkptvr7npnp1ch85ja3dvw3mi87v-pwiqmw hdzesnbxu0d0t68e pcv1csibw7jgtlgfoovmebm-wggpw9rhonbkdb_qwwfl_cuf7_0nj_knuozq4pudk0_vzktbhi3kv0gt2ybmqs6zfpnxd3cdpgk_lyio8z8xciasoz5vltamjg7n5maadxxpvqwtcpk_tbksve2ke8w7r3u4kapfjl2ene06j3e4rkae367x8_aoxy2l3lhoeqzl4lfsntfs71xfc-s9h5-bgi2clkba-9hlrtpbxtumwa830rwywm7m fs5-tfbxq73l7icrrwkbla" } } the decrypted output will be similar to this { "amount" "100", "currency_code" "usd", "utc" "1719388643614", "eci_indicator" "5", "tokenpan" "5185731679991253", "tokenpanexpiration" "0127", "cryptogram" "akkeavcvwhfmammud6r3aoacfa==" } note for information about the content of the paymentmethods, transactiondetail, and paymentcredential data structures, see the api reference 3 3 3 decrypting payment credentials for security, samsung pay encrypts the payment credential using json web encryption jwe you must decrypt this payload to extract the payment token and process the transaction to decrypt the payment credentials, generate a der file from your private key $ openssl pkcs8 -topk8 -in merchant key -outform der -nocrypt -out rsapriv der decrypt the jwe encrypted data sample implementation in java import java nio file files; import java nio file paths; import java security keyfactory; import java security interfaces rsaprivatekey; import java security spec pkcs8encodedkeyspec; import java util base64; import javax crypto cipher; import javax crypto spec gcmparameterspec; import javax crypto spec secretkeyspec; import com fasterxml jackson databind jsonnode; import com fasterxml jackson databind objectmapper; public class developerportalsample { public static void main string[] args throws exception { // example jwe string replace with your actual jwe and private key path string encryptedtext = {{encryptedpayload}}; string privatekeypath = " /rsapriv der"; string private_key = base64 getencoder encodetostring files readallbytes paths get privatekeypath ; string result = decryptjwe encryptedtext, private_key ; system out println result ; } public static string decryptjwe string encryptedtext, string privatekeytext throws exception { // split jwe parts by ' ' string delims = "[ ]"; string[] tokens = encryptedtext split delims ; if tokens length < 5 { throw new illegalargumentexception "invalid jwe format" ; } // decode and parse jwe header byte[] headerbytes = base64 geturldecoder decode tokens[0] ; string headerjson = new string headerbytes ; objectmapper mapper = new objectmapper ; jsonnode header = mapper readtree headerjson ; // extract algorithm information from header string alg = header has "alg" ? header get "alg" astext "rsa1_5"; string enc = header has "enc" ? header get "enc" astext "a128gcm"; // convert private key byte[] privatekeybytes = base64 getdecoder decode privatekeytext ; pkcs8encodedkeyspec privatekeyspec = new pkcs8encodedkeyspec privatekeybytes ; keyfactory keyfactory = keyfactory getinstance "rsa" ; rsaprivatekey privatekey = rsaprivatekey keyfactory generateprivate privatekeyspec ; // decode encrypted key, iv, ciphertext, and authentication tag byte[] enckey = base64 geturldecoder decode tokens[1] ; byte[] iv = base64 geturldecoder decode tokens[2] ; byte[] ciphertext = base64 geturldecoder decode tokens[3] ; byte[] tag = base64 geturldecoder decode tokens[4] ; // create cipher instance based on key management algorithm string keymanagementalgorithm; boolean useaad = false; if "rsa-oaep" equals alg { keymanagementalgorithm = "rsa/ecb/oaeppadding"; // at samsung, oaep uses aad additional authenticated data useaad = true; } else if "rsa1_5" equals alg { keymanagementalgorithm = "rsa/ecb/pkcs1padding"; // while rsa1_5 does not use aad useaad = false; } else { throw new illegalargumentexception "unsupported key management algorithm " + alg ; } // decrypt the cek content encryption key cipher decryptcipher = cipher getinstance keymanagementalgorithm ; decryptcipher init cipher decrypt_mode, privatekey ; byte[] plainenckey = decryptcipher dofinal enckey ; // create cipher instance based on content encryption algorithm string contentencryptionalgorithm; int gcmtaglength; if "a128gcm" equals enc || "a256gcm" equals enc { contentencryptionalgorithm = "aes/gcm/nopadding"; gcmtaglength = 128; } else { throw new illegalargumentexception "unsupported content encryption algorithm " + enc ; } // decrypt the content cipher contentcipher = cipher getinstance contentencryptionalgorithm ; gcmparameterspec gcmparameterspec = new gcmparameterspec gcmtaglength, iv ; secretkeyspec keyspec = new secretkeyspec plainenckey, "aes" ; contentcipher init cipher decrypt_mode, keyspec, gcmparameterspec ; // aad handling use base64url-encoded header bytes as aad if useaad { byte[] encodedheader = base64 geturlencoder withoutpadding encode headerbytes ; contentcipher updateaad encodedheader ; } // concatenate ciphertext and tag, then pass to dofinal byte[] cipherdata = new byte[ciphertext length + tag length]; system arraycopy ciphertext, 0, cipherdata, 0, ciphertext length ; system arraycopy tag, 0, cipherdata, ciphertext length, tag length ; byte[] plaintext = contentcipher dofinal cipherdata ; return new string plaintext, java nio charset standardcharsets utf_8 ; } sample implementation in c# using system; using system io; using system text; using system text json nodes; using system security cryptography; public static void main string[] args { // example jwe string replace with your actual jwe and private key path string encryptedtext = {{encryptedpayload}}; string privatekeypath = /rsapriv der"; // read the private key file der format byte[] privatekeybytes = file readallbytes privatekeypath ; // decrypt the jwe string result = decryptjwe encryptedtext, privatekeybytes ; // print the result console writeline result ; } public static string decryptjwe string encryptedtext, byte[] privatekeybytes { // split jwe parts by ' ' var parts = encryptedtext split ' ' ; if parts length < 5 throw new argumentexception "invalid jwe format" ; // decode and parse jwe header var headerbytes = base64urldecode parts[0] ; var headerjson = encoding utf8 getstring headerbytes ; var header = jsonnode parse headerjson ; // extract algorithm information from header string alg = header?["alg"]? tostring ?? "rsa1_5"; string enc = header?["enc"]? tostring ?? "a128gcm"; // convert private key assume pkcs8 der using var rsa = rsa create ; rsa importpkcs8privatekey privatekeybytes, out _ ; // decode encrypted key, iv, ciphertext, and authentication tag var enckey = base64urldecode parts[1] ; var iv = base64urldecode parts[2] ; var ciphertext = base64urldecode parts[3] ; var tag = base64urldecode parts[4] ; // create cipher instance based on key management algorithm bool useaad = false; if alg == "rsa-oaep" { // at samsung, oaep uses aad additional authenticated data useaad = true; } else if alg == "rsa1_5" { // while rsa1_5 does not use aad useaad = false; } else { throw new argumentexception $"unsupported key management algorithm {alg}" ; } // decrypt the cek content encryption key byte[] plainenckey = alg == "rsa-oaep" ? rsa decrypt enckey, rsaencryptionpadding oaepsha1 rsa decrypt enckey, rsaencryptionpadding pkcs1 ; // decrypt the content using var aes = new aesgcm plainenckey, 16 ; var plaintext = new byte[ciphertext length]; if useaad { // aad handling use base64url-encoded header bytes as aad var encodedheader = encoding ascii getbytes base64urlencode headerbytes ; aes decrypt iv, ciphertext, tag, plaintext, encodedheader ; } else { aes decrypt iv, ciphertext, tag, plaintext ; } return encoding utf8 getstring plaintext trimend '\0' ; } private static byte[] base64urldecode string input { string s = input replace '-', '+' replace '_', '/' ; switch s length % 4 { case 2 s += "=="; break; case 3 s += "="; break; } return convert frombase64string s ; } private static string base64urlencode byte[] input { return convert tobase64string input trimend '=' replace '+', '-' replace '/', '_' ; } 3 3 4 integration on webview configure webview enablements to invoke samsung pay application in webview, you should override the shouldoverrideurlloading method javascript and dom storage are disabled in a webview by default you can enable through the websettings attached to your webview websettings allows any website to use javascript and dom storage for more information, visit websettings sample code kotlin import android webkit webview import android webkit webviewclient import android content intent import android content activitynotfoundexception companion object { private const val samsung_pay_url_prefix string = "samsungpay" private const val samsung_app_store_url string = "samsungapps //productdetail/com samsung android spay" } private lateinit var webview webview webview settings run { javascriptenabled = true domstorageenabled = true } webview webviewclient = object webviewclient { override fun shouldoverrideurlloading view webview, request webresourcerequest boolean { // get url from webresourcerequest val url = request url tostring // add below if statement to check if url is samsung pay or samsung app store deep link if url startswith samsung_pay_url_prefix || url startswith samsung_app_store_url , ignorecase = false { try { val intent = intent parseuri url, intent uri_intent_scheme startactivity intent } catch e activitynotfoundexception { // exception would be occured if the samsung wallet app is not installed // go to install samsung wallet app from market val installintent = intent parseuri "samsungapps //productdetail/com samsung android spay", intent uri_intent_scheme installintent addflags intent flag_activity_new_task startactivity installintent } // return true will cause that the url will not be loaded in webview return true } // the remaining part of the shouldoverrideurlloading method code // return false when you want to load url automatically by webview return false } } 3 3 5 sample implementation the following sample code implements the samsung pay web checkout button on a merchant site the implementation steps are described in web checkout integration for information about the content of the paymentmethods, transactiondetail, and paymentcredential data structures, see the api reference <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https //img mpay samsung com/gsmpi/sdk/samsungpay_web_sdk js"></script> </head> <body> <div id="samsungpay-container"></div> <script> const samsungpayclient = new samsungpay paymentclient {environment "stage"} ; let paymentmethods = { version "2", serviceid "dcc1cbb25d6a470bb42926", protocol "protocol_3ds", allowedbrands ["visa","mastercard"] } samsungpayclient isreadytopay paymentmethods then function response { if response result { createandaddbutton ; } } catch function err { console error err ; } ; function createandaddbutton { const samsungpaybutton = samsungpayclient createbutton { onclick onsamsungpaybuttonclicked, buttonstyle "black", type "buy" } ; document getelementbyid "samsungpay-container" appendchild samsungpaybutton ; } function onsamsungpaybuttonclicked { let transactiondetail = { ordernumber "dstrf345789dsgty", merchant { name "virtual shop", url "virtualshop com", id "xn7qfnd", countrycode "us" }, amount { option "format_total_estimated_amount", currency "usd", total 300 } } samsungpayclient loadpaymentsheet paymentmethods, transactiondetail then function paymentcredential { console log "paymentcredential ", paymentcredential ; const paymentresult = { "status" "charged", "provider" "pg name" } samsungpayclient notify paymentresult ; } catch function error { console log "error ", error ; } ; } </script> </body> </html> 3 3 6 api reference let us learn the description of data structures used in the samsung pay web checkout api integration paymentmethods the paymentmethods object defines the payment methods that the merchant supports "paymentmethods" data structure elements key type required description version string required samsung pay api versionthe supported value is 2 serviceid string required merchant id that is assigned after onboarding protocol string required payment protocol typethe supported value is protocol_3ds allowedbrands list<string> required list of supported card brandsthe possible values are visamastercardamexdiscoverelomadacbjaywan tbd isrecurring boolean optional value if payment is recurringthe default value is false isbillingaddressrequired boolean optional value if billing address must be included in the payment credentials the default value is false iscardholdernamerequired boolean optional value if cardholder name must be included in the payment credentials the default value is false iscpfcardrequired boolean optional value if cpf must be included in the payment credentials the default value is false merchantchoicebrands object optional data structure containing configuration information for a co-badged card merchantchoicebrands type string required co-badged card display option for the payment sheetthe possible values are mandatory = only the brand defined in merchantchoicebrands brands is enabledpreference = the brand defined in merchantchoicebrands brands is selected by default but the user can change it merchantchoicebrands brands list<string> required list of supported brands for the co-badged cardthe possible values are madacb extrapaymentinfo object optional data structure containing additional supported features extrapaymentinfo id string required feature id for the additional featurethe possible values are combocard = combo carddsrp = digital secure remote payment extrapaymentinfo type string optional feature type, if the value of extrapaymentinfo id is dsrpthe possible values are ucaf = universal cardholder authentication fieldicc = integrated circuit cardthe default value is ucaf transactiondetail the transactiondetail object contains the transaction information for the user's purchase "transactiondetail" data structure elements key type required description ordernumber string required order number of the transactionthe following characters are allowed [a-z][a-z][0-9,-] merchant object required data structure containing merchant information merchant name string required merchant name merchant url string required merchant domain urlthe maximum length is 100 characters merchant id string conditional a unique identifier, known as the merchant unique id, is assigned by either merchant or the payment gateway pg or payment orchestrator po when a merchant is onboarded into their system this id is required in specific scenarios, namely when onboarding as a pg or po with samsung, or if the token brand is "mada" or the merchantchoicebrands brands includes "mada" the character limit for this id varies 15 characters for "mada" token brands and 45 characters for all other cases merchant countrycode string required merchant country codeiso-3166-1 alpha-2 amount object required data structure containing the payment amount amount option string required display format for the total amount on the payment sheetthe possible values are format_total_estimated_amount = display "total estimated amount " and total amountformat_total_price_only = display the total amount only amount currency string required currency codethe maximum length is 3 characters amount total string required total payment amount in the currency specified by amount currencythe amount must be an integer for example, 300 or in a format valid for the currency such as 2 decimal places after a separator, for example, 300 50 type string optional transaction typethis value is specifically supported for mada tokens and will not apply to other token types the possible values are purchasepreauthorizationthe default value is purchase paymentcredential the paymentcredential object contains the payment credential information generated by the samsung wallet application on the user's mobile device paymentcredential data structure elements key type required description card_brand string required brand of the payment card card_last4digit object required last 4 digits of the card number 3ds object required data structure containing the generated 3ds data 3ds type string optional 3ds typethe value is s for samsung pay 3ds version string required 3ds versionthe value for the current version is 100 3ds data string required encrypted payment credential data recurring_payment boolean required value if credential is enabled for recurringthe default value is false encryptedmessage string conditional encrypted string jwe that contains billing address, cardholder name and cpf when required by partner it can be decrypted in the same way as payment credentials encryptedmessage the decrypted encryptedmessage object in paymentcredential object contains billing address, cardholder name and cpf when required by partner "encryptedmessage" data structure elements key type required description billingaddress object conditional billing address billingaddress addressline1 string required address line 1 billingaddress addressline2 string optional address line 2 billingaddress city string required city billingaddress state string conditional state billingaddress countrycode string required country code iso 3166-1 alpha-3 billingaddress postalcode string required postal code cardholdername string conditional cardholder name cpf object conditional brazilian cpf cpf name string required the full name of the individual associated with the cpf cpf number string required the brazilian taxpayer number cpf , consisting of exactly 11 digits, without hyphens or dots paymentresult the paymentresult object contains the payment result information during transaction processing, and after the payment is processed with pg network paymentresult data structure elements key type required description status string required payment statusthe possible values are charged = payment was charge successfullycanceled = payment was canceled by either user, merchant, or acquirerrejected = payment was rejected by acquirererred = an error occurred during the payment process provider string optional payment provider pg name 3 3 7 partner checklist checklist for samsung pay web checkout on the merchant website, verify if the following functions works as expected samsung pay is available in the payment options section of the website samsung pay logo is displayed correctly in the payment options section after the samsung pay payment option is selected, the account/scan qr and email input options are displayed, and redirects the user to the samsung wallet app on their mobile device for the account option, “request to pay” and “cancel” buttons are displayed for the email option, “next” and “cancel” buttons, and a way to reset id are displayed for the scan qr option, the request automatically times out if you wait for more than 5 minutes, and you are redirected to the checkout screen once redirected to the samsung wallet app, “pay” and “cancel” buttons are displayed on a mobile browser, after the samsung pay payment option is selected, “continue with samsung pay” button is displayed samsung checkout screen is displayed the merchant domain name is displayed the order summary which contains the amount due, and product name is displayed the payment method selected is “samsung wallet” the contact information displays the customer’s name, phone, and email you should be able to modify this information, if needed “continue” and “cancel” buttons are displayed note these are relevant if you are executing an end-to-end test you can skip these tests if you are using a test transaction setup on the samsung wallet app via your test device, verify if the following functions works as expected a default card is displayed on the payment sheet the card name and last 4 digits of the card is displayed on the payment sheet you are able to change the card when multiple cards are enrolled in samsung pay if you requested for the transaction using billingaddress parameter, the billing address is displayed on the payment sheet the billing address can be filled and modified depending on the amount option parameter, the payment amount is displayed as “total” or “total estimated amount ” the merchant name is displayed on the payment sheet the pin/biometric authentication option is displayed to proceed with payment confirmation the “verified” checkmark is displayed in blue upon payment confirmation if you are testing with actual cards, and samsung wallet is in production environment, confirm the transaction notification on the mobile phone is displayed once the purchase is made on transaction completion, verify the following on the merchant website the payment completion screen is displayed on the mobile or non-mobile device, depending where the transaction is initiated you are able to initiate a payment using samsung pay with a card already added for the merchant’s website basic card
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.
You have successfully updated your cookie preferences.