Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Recommendation
Filter
Develop Samsung Wallet
docnotification for partners deliver personalized push messages to samsung wallet users, linked to their wallet cards samsung wallet enables authorized partners to send targeted push notifications using pre-approved message templates this feature supports marketing, transactional, and engagement-driven use cases only partners with administrative approval can access and use the notifications feature the notifications tab is hidden for unauthorized accounts notification workflow overview step 1 create notification template partners can create push message templates through the partner portal or notification api templates define the structure and content of the notification type only merchant push is supported message category choose from marketing or other variables use dynamic placeholders with {{ }} syntax e g , hello {{name}}, your pass for {{event}} is ready if your wallet card supports multiple languages, a message template must be provided for each language variant after drafting the message run harmfulness check to detect prohibited content results pass or fail even if failed, templates can still be submitted but may be rejected in the next step step 2 request template approval once the template is complete click the request approval button in the portal an administrator will review the content if rejected the reason is provided via system email partners can revise and resubmit the template for approval if approved the approved date will appear in the portal the template becomes eligible for use in the notification api step 3 push notification with template once a template is approved, partners can push notifications to users linked to their wallet cards using a secure post api request required parameters template id – issued after template approval reference id – a unique identifier tied to the user’s wallet card created during the add to wallet process only pre-approved templates can be used in push requests step 4 monitor impressions and clicks after the push is delivered, partners can track impressions – number of users who viewed the notification clicks – number of interactions with the push these metrics can be accessed through the partner portal dashboard, enabling performance evaluation of each campaign [request] type value description method post url /{cc2}/wltex/cards/{card id}/notifications/{template id}/send header authorizationstring 1024 required credential token the token can have prefix "bearer" as an authorization type e g , bearer <credentials> * refer to authorization token for more details x-smcs-partner-idstring 32 required partner id x-request-idstring 32 required request identifier randomly generated uuid string path parameters cc2string 2 required country code cc2 from send card state card idstring 32 required wallet card identifier granted from partners portal template idstring 32 required approved notification template identifier from partners portal payload ndatastring required notification object json * this field needs to be encrypted * refer to security for more details * the value of "cty" must be set to "notification" notification object refidsarray of string 100 required unique content identifier defined by the content provider data object required name-value pair for use in notification template [example] post /wltex/cards/12584806754/notifications/12353465344/send /*[headers]*/ authorization bearer eyjjdhkioijbvvriiiwidmvyijoxlcjwyxj0bmvyswqioiixmjg1o x-smcs-partner-id partner-id-0001 x-request-id req-202303140003 /*[payload]*/ { “ndata” “eyjjdhkioijbvvriiiwidmvyi…” } /*[notification object]*/ { "refids" [ "ref-20230304-0003", "ref-20230304-0004" ], "data" { "name" "logan", "place" "samsung wallet" } } [response] type value description http status 200 ok payload n/a [result] http status code description 200 ok success 400 bad request requests cannot or will not be processed the request due to something that is perceived to be a client error 401 unauthorized authorization token is invalid or expired 500 internal server error the server encountered an unexpected condition that prevented it from fulfilling the request
Develop Samsung Pay
doc3 4 save to pay 3 4 1 overview save to pay s2p is a secure integration service by samsung pay that enables partners to store and access user payment credentials for future transactions the communication between the partner’s backend and the save to pay server is protected by mutual ssl two-way ssl authentication, ensuring that both the client and server validate each other's identities key highlights uses a custom certificate authority ca managed by samsung pay techops requires ip allowlisting for both staging and production environments communication is secured over tls 1 2 involves both inbound partner → s2p and outbound s2p → partner api communications, secured via ssl and authenticated with client certificates and headers 3 4 2 endpoints there are 2 endpoints available - staging & production staging will be used for development and integration testing access to these endpoints is restricted to allowlisted ip addresses partner should provide the external ip addresses during the onboarding process supported protocols - tlsv1 2 staging https //s2p-api stg mpay samsung com production https //s2p-api mpay samsung com 3 4 3 onboarding steps to begin integration, follow these onboarding steps step 1 submit a certificate signing request csr partners must generate and send a csr to samsung, along with the following details common name cn for the client certificate partner server base url for receiving outbound notifications from the s2p server external ip address to be added to the access allowlist step 2 receive certificate and partner id samsung will sign the csr using its internal ca and return the client certificate a unique partner id will be issued for each environment this partner id must be included in the headers of every request made to the s2p server 3 4 4 authentication overview mutual ssl is used for both inbound and outbound communication between the partner and the save to pay system inbound partner → save to pay server all requests must be secured with mutual ssl partners connect using the client certificate issued by samsung every request must include the partner id in the header partner ids are environment-specific different for staging and production outbound save to pay server → partner s2p communicates with partner servers over mutual ssl samsung will use a client certificate signed by the partner’s ca partner must be able to validate s2p’s certificate for inbound requests 3 4 5 security protocols protocol tls v1 2 authentication mutual ssl two-way tls certificates partner-to-s2p samsung issues the client certificate s2p-to-partner partner issues the client certificate to samsung 3 4 6 best practices the best practices are keep your client certificate secure and monitor expiration dates log and monitor all inbound/outbound requests for verification and debugging maintain a staging environment for ongoing testing 3 4 7 external api specification the external api specification in the context of samsung's save to pay s2p service refers to the structured guidelines and protocols that define how external partner systems can securely interact with the s2p platform this specification encompasses authentication methods, data formats, api endpoints, and integration workflows to ensure seamless and secure provisioning of payment cards into the samsung wallet app 3 4 8 integration workflow the integration involves several key steps initialization & ui setup step 1–2 register session the partner server initiates the flow by registering with the s2p server on success, it receives regid a unique session identifier must be cached for session tracking welcomeurl a hosted ui url that guides the user through the card addition process step 3 display welcome ui the partner's frontend embeds the welcomeurl ui typically in an <iframe> the ui shows a qr code and clear instructions for the user to continue user interaction step 4 user launches samsung wallet spay wa the user opens the samsung wallet app and scans the qr code shown on the welcome ui if the app is not installed, the ui directs the user to download the samsung wallet app sign in with their samsung account session linking & device validation step 5–6 initiate request & device association spay wa scans the qr code and triggers an initiate request to the s2p server s2p validates the payload and links the device info with the regid the server also forwards the device metadata to the partner server device id wallet id user id the welcome ui updates to show that linking was successful card pre-provisioning step 7–8 partner pre-provisions card the partner server contacts the issuer to pre-provision the card retrieve the encrypted issuerblob which contains secure card/token information step 9 return issuerblob the partner server includes the issuerblob in its notify response back to the s2p server this blob is encrypted only the issuer can decrypt it is device- and wallet-specific only usable by the original device format depends on the issuer step 10 deliver to device the s2p server includes the issuerblob and any other metadata in the initiate response back to the spay wa tokenization steps 11–16 add token in samsung pay spay wa initiates the standard tokenization process using the issuerblob the token is securely added to the samsung wallet for use in nfc or online transactions completion & confirmation step 17 notify s2p server after successful provisioning, spay wa notifies the s2p server that the card/token was added successfully for the given regid step 18 notify partner the s2p server sends a final callback to the partner server confirming the process is completed for the regid 3 4 9 data types type json type format description string string size 2048 boolean boolean object object enum string pattern [a-za-z0-9_]{1,256 values from a limited set are only allowed each field of type enum will define the values allowed phonenumber string pattern [0-9+ -]+ uuid string pattern [a-za-z0-9-_]{26,128} unique identifier url string size 2048 must be an absolute url defined by rfc 2396 uniform resource identifiers uri generic syntax supported schemes - http, https timestamp number int64 - signed 64 bits unix epoch time in milliseconds countrycode string size 2 unique identifier 3 4 10 inbound api specification – save2pay the inbound api specification for save2pay defines the protocols and requirements for partner servers to interact with the save2pay system this specification ensures secure and standardized communication during the push provisioning process general contract base url https //s2p-api mpay samsung com/ext/v1 security mutual ssl is required common headers header name type validation description request-id uuid required unique identifier for the request partner-id uuid required unique identifier that is provided to partner during onboarding partner-id uuid required request-id echoed back in the response headers common http error codes http code description application code message 400 bad request 400 1 invalid data 500 internal server error 500 1 internal server error 503 service not available 503 1 service temporarily unavailable retry-after header is required 503 service not available 503 2 api temporarily unavailable retry-after header is required 3 4 11 registration partner server registers a session for the user as a result, a unique registration id will be generated partner server should make sure that this is called only once for one card a welcomeurl will also be returned partner server can display the welcomeurl in browser or email upon rendering, a qr code will be displayed and users can use their spay wa to scan the qr code welcomeurl has an expiration date, partner server should check if it's still valid before rendering if it's expired, a get call will return the new url request post /registrations body key type validation description example registration email string optional user email address registration enforceemailmatching boolean default is false optional enforce only spay wa with the same email address can provision enforcement is only against the email address that's provided by the partner true registration hideemail boolean default is false optional hide email field registration phone phonenumber optional user phone number registration enforcephonematching boolean optional default is false enforce only spay wa with the same phone number can provision enforcement is only against the phone number that's provided by the partner true registration hidephone boolean optional default is false hide phone field registration welcomecallbackurl url optional callback url that the welcome ui will redirect to once the user successfully linked a spay wa account registration allowofflinecommunication boolean optional default is false if true, s2p will communicate to the user via email and/or phone number to facilitate the provisioning process registration data object optional arbitrary data blob that'll be passed to the device when an account is linked registration custom cardname string required card name that'll show on the welcome page registration custom cardarturl url required cardart url that'll show on the welcome page registration custom partnername string required partner name that'll show on the welcome page registration custom partnerlogourl url required partner logo url that'll show on the welcome page registration custom partnertncurl url optional partner tnc url that'll show on the welcome page registration id uuid required registration id that identifies this session registration status enum - pending, linked required registration status pending registration welcomeurlexpiration timestamp required welcomeurl expiration timestamp in milliseconds response status http/1 1 201 created header name value content-type application/json example post /ext/v1/registrations { "email" "user@gmail com", "enforceemailmatching" true, "phone" "14089998888", "enforcephonematching" true, "custom" { "cardname" "xyz bank credit card", "cardarturl" "https //xyz com/cardart png", "partnername" "xyz bank", "partnerlogourl" "https //xyz com/logo png" } } http/1 1 201 created { "id" "395ce2e29485442cbd9bacdc77105126", "welcomeurl" "https //s2p stg mpay samsung com/v1/welcome/eyjlbmmioijbmju2r0nniiw iywxnijoizglyin0 s0dnxrskdkjw8sbh kg4uqhfwkkdnqrviihkaqshq_jayb99ct tizdzrwrn-qlhuzj4imuyv1sagehavyxluamarwa tlekqcerr0jklc-fnqkcva", "status" "pending", "welcomeurlexpiration" 1505953396844 } get registration check existing registration status and/or get new welcomeurl request get /registrations/{regid} headers name value validation partner-id partner id value assigned by samsung wallet required response status http/1 1 200 ok status name value content-type application/json body key type validation description example registration id uuid required registration id that identify this session registration status enum - pending, linked required registration status pending registration welcomeurl url required this is the url that partner can show to the user as an iframe a separate page it shows the qrcode and optionally user can enter email and phone number registration welcomeurlexpiration timestamp required welcomeurl expiration timestamp in milliseconds example http/1 1 200 ok { "id" "395ce2e29485442cbd9bacdc77105126", "welcomeurl" "https //s2p stg mpay samsung com/v1/welcome/eyjlbmmioijbmju2r0nniiw iywxnijoizglyin0 s0dnxrskdkjw8sbh kg4uqhfwkkdnqrviihkaqshq_jayb99ct tizdzrwrn-qlhuzj4imuyv1sagehavyxluamarwa tlekqcerr0jklc-fnqkcva", "status" "pending", "welcomeurlexpiration" 1505953396844 } errors common http error codes http code description application code message 400 bad request 400 1 invalid data 500 internal server error 500 1 internal server error 503 service not available 503 1 service temporarily unavailable retry-after header is required 503 service not available 503 2 api temporarily unavailable retry-after header is required 3 4 12 outbound to partner the outbound api specification for save2pay defines how the save2pay server communicates with partner servers during the push provisioning process this specification ensures secure and standardized communication between save2pay and its partners general contract base url base url for outbound apis to be provided by the partner during the onboarding process security mutual ssl is required common headers header name type validation description request-id uuid required unique identifier for the request partner-id uuid required unique identifier that is provided to partner during onboarding response-id uuid required request-id echoed back in the response headers 3 4 13 event notification notify partner for events request post /notifications body key description type validation example event regid registration id uuid required event type event type enum refer to event types and errors for details required event error more information about the failure enum refer to event types and errors for details event desc additional description of the event string optional user container for user information object conditional will be present for payment cards user id samsung account id string required emailmatches is true if the email provided in the registration request matches with samsung account email boolean conditional it is present only if an email was provided in the registration request phonematches is true if the phone number provided in the registration request matches with device phone number boolean conditional it is present only if a phone number was provided in the registration request device container for device information object conditional will be present for payment cards device id device id string required device imeilast4 last 4 of device imei string size 4 optional device seriallast4 last 4 of device serial number string size 4 optional device locale country device country code countrycode optional wallet container for wallet information object conditional will be present for payment cards wallet id wallet id string required event types and errors type error description wa_ready wallet app is ready for provisioning wa_provisioned indicates card was successfully provisioned into the wallet wa_provision_failure indicates provisioning failed for some unknown reason wa_provision_failure card_already_present indicates card is already present response status http/1 1 200 ok header name value content-type application/json body card data encrypteddata description encrypted pan data that will be returned to the device to provision the card type string size 65536 validation conditional required if card data was not provided in the registration request example example post /notifications { "event" { "regid" "395ce2e29485442cbd9bacdc77105126", "type" "wa_ready" }, "emailmatches" true, "phonematches" true, "user" { "id" "rcsm3gwjt9mxgfwy5sg123" }, "wallet" { "id" "gpccugejs9giih8zch1111" }, "device" { "id" "mtuxmte5mdawmjawmdm1n999", "imeilast4" "6166", "locale" { "country" "us" }, "seriallast4" "4934" } } http/1 1 200 ok { "card" { "data" { "encrypteddata" "*****" } } } 3 4 14 save to pay javascript library javascript library interface savetopayui { /** * shows the welcome ui redirects to welcomecallbackurl if it was provided in the registration request when the page reaches one of the final states */ static void showwelcomemodal s2prequest r ; /** * shows the welcome ui resolves the promise with the status and optionally details after the welcome ui is closed */ static promise <s2presponse> showwelcomemodalpromise s2prequest r ; /** * api to close the modal */ static void closewelcomemodal ; }; dictionary s2prequest { /** * welcomeurl provided by save2pay server in the registration response */ required domstring welcomeurl; }; dictionary s2presponse { required status status, /** * true if triggered by iframe closing by user or parent page * false if the status is one of the final statuses, not triggered by iframe closing this can only happen in mobile android case */ required boolean isiframeclosed, /** * optional error information if the status is 'failure' */ details details }; dictionary details { required errorcode errorcode; domstring message; }; enum status { "success", "failure", "device_not_supported", "default_pending" }; enum errorcode { "invalid_input", "provision_failure", "network_error", "unknown_error", "card_already_present", "canceled" }; usage code block -1 html <script src="https //spay samsung com/s2p/libs/js/0 0 4/s2p min js"></script> code block -2 javascript - redirect var input = { "welcomeurl" 'https //s2p mpay samsung com/v1/welcome/eyjlbmmioijbmju2r0nniiwiywx nijoizglyin0 eltgw8qp56ciezo2 mh34gjebgyp_m7- gw0sbdl3ckaplp7rtvmc8fe-tmq2ipmp2rcc1a39qodbvw2schiarbooahbe77lpvl8nhkkapi6mhynl-yz6gqx0sjw xfrtyjpdzxrnmlq8ffe6pg' } window spay savetopayui showwelcomemodal input code block- 3 javascript - promise var request = { "welcomeurl" 'https //s2p mpay samsung com/v1/welcome/eyjlbmmioijbmju2r0nniiwiywx nijoizglyin0 eltgw8qp56ciezo2 mh34gjebgyp_m7- gw0sbdl3ckaplp7rtvmc8fe-tmq2ipmp2rcc1a39qodbvw2schiarbooahbe77lpvl8nhkkapi6mhynl-yz6gqx0sjw xfrtyjpdzxrnmlq8ffe6pg' } function successcallback response { console log response status } function failurecallback error { console log error } window spay savetopayui showwelcomemodalpromise request then succes scallback, failurecallback promise resolution device type description desktop, tablet & mobile - ios js library will resolve the promise - 1 when the iframe is closed by the user 2 closewelcomemodal function is invoked mobile - android js library will resolve the promise as soon as the provisioning session ends or closewelcomemodal function is invoked provisioning session ends when one of the following has happened - 1 the card was successfully added 2 there was some failure and card provisioning flow cannot continue further 3 timeout has happened 4 user canceled the provisioning process mobile flows
tutorials galaxy watch
blogthe dumpstate log on galaxy watch running wear os powered by samsung is a detailed system diagnostic report that captures everything happening on the watch at a specific moment. samsung developers or samsung support can use it to troubleshoot issues (like application crashes, lag, excessive battery drain, or sensor failures), crucial operations, and application failures that can’t be diagnosed from application logs alone. in short, the dumpstate log is the go-to tool for deep debugging and capturing everything from application behavior to hardware status in one file. the purpose of this tutorial is to discuss the procedure of collecting dumpstate logs on galaxy watch with or without a connected mobile phone. this tutorial demonstrates three processes of generating a log from your galaxy watch: generate a watch dump from galaxy watch generate a watch dump from a connected galaxy phone generate a watch dump using the galaxy wearable application prerequisites if you are using an operating system that uses one ui 6 or newer (android version 14), disable the auto blocker before collecting the log. before proceeding with one of the options below, make sure developer mode on your watch is enabled, which gives access to the developer options menu. to enable developer mode: a) go to settings > about watch > software information. b) tap on software version 5 times. this enables developer mode and makes developer options visible in the settings. after successfully enabling developer mode, a toast message also appears on the screen. figure 1: enabling developer options from settings option 1: generate a watch dump from galaxy watch noteit is not mandatory to maintain connection with your phone during this process. a) go to call and dial *#9900#. the sysdump tool will be launched. scroll down and select delete dumpstate/logcat. figure 2: deleting the dumpstate log b) dial *#9900# again. in the sysdump tool window, select debug level disabled/low and set it to mid. this restarts the watch. figure 3: setting the debug level to mid c) reproduce the issue/scenario you want to capture in your log. d) dial *#9900#, select run dumpstate/logcat, and wait a few minutes until it finishes. you will be redirected to the system dump tool. figure 4: running and saving the dumpstate log e) when the process is finished, select copy to sd card (include cp ramdump). the log file is saved to the watch’s internal storage. figure 5: copy to sd card f) in the main (root) directory of the watch's file system, look for the “log” directory, which contains the newly generated dumpstate log file. the file has the name format: "dumpstate_watch model_timestamp". collect the log file from galaxy watch connect your watch with the pc. follow the section “use the command line” from the connecting galaxy watch to watch face studio over wi-fi guide to set up a connection between your watch and pc using adb. no active internet connection is required. just make sure both your pc and watch are on the same network (check both ips for confirmation). you can collect the generated log in two ways: using the pc ui: after connecting the watch to the pc, in the internal storage of your watch, you will find the "log" file. compress the file and share it with the support team if asked. figure 6: connect the watch to your pc and collect the log folder from storage using adb and cli: use the following commands in the command prompt to collect the log: check if the log file is saved or not- adb shell ls /sdcard figure 7: check the log file existence you will see the log file in the list (see figure 7). if you skipped the step “copy to sd card (include cp ramdump)” in the previous section, then no log file will be listed and the message “no such file or directory” is shown instead. pull the log to your pc storage- adb pull /sdcard/log figure 8: pull the log from your galaxy watch to your pc this will start to pull the log file from your watch. it may take a few minutes to complete the process. after the process is completed, the log file is saved to your current working directory in your terminal or command prompt – typically wherever you opened the terminal. noteafter collecting a dumpstate log, it is better to set the debug level back to low. this will restart the watch again. option 2: generate a watch dump from a connected galaxy phone noteit is mandatory to maintain an uninterrupted connection between your phone and watch during this process. if you have a galaxy phone that supports one ui 8.0 and it is connected to your galaxy watch, you can generate the dump log very easily with the following steps: a) on the connected galaxy phone, dial *#9900#. in the sysdump tool that opens, select delete dumpstate/logcat b) dial *#9900# again. in the sysdump tool, select debug level disabled/low and set it to mid. this restarts the device. figure 9: steps (a) and (b) on a connected galaxy phone c) on your galaxy watch, reproduce the issue/scenario you want to capture in your log. d) back on the phone, dial *#9900# and select get watch dump. it will start generating the log, which may take a few minitues. during the process, you will receive toast messages about the process status and completion. figure 10: generate a watch dump from a connected phone e) after the log is successfully generated, the screen shows the generated log file name and folder path where it has been saved. generally, you will find it in “my files” on your phone. f) collect the file, which is named in the format “bundled-bugreport-project<date_time.zip>”. this is the full log file you have just generated. share the log file with the support team if asked. option 3: generate a watch dump using the galaxy wearable application a) enable developer mode on the watch (see figure 1). b) connect your watch to the mobile phone using the galaxy wearable application. c) reproduce the problem on your galaxy watch. d) on your phone, go to the galaxy wearable application. select more > settings > about galaxy wearable. figure 11: galaxy wearable application e) tap the "galaxy wearable" heading 5 times to open the wearable hidden menu, select get dumpstate, and then run watch dump. noteif you need both a watch and a phone dump together, select run watch and phone dump. figure 12: generate a dumpstate log from the galaxy wearable app f) wait for the process to finish, which may take a few minutes. g) after the log is generated, it is written into the phone storage. the storage path is my files > internal storage > download > log > gearlog > bundled-bugreport-project<date_time.zip>. figure 13: collecting the log from the phone storage h) collect and share the log file with the support team if asked. some important things to keep in mind it is better to disable developer mode when it is no longer required. set the debugging level back to low after completing the log collection. if you are a developer, remember that adb debugging may be used for advanced access. do not move to another screen while generating the dumpstate log. you have to wait for some time for the full process to complete. this may take 1~3 minutes. after completing the full process, a popup notification will be shown. if you’re generating a log for a support ticket, follow the exact instructions given by the agent. try to generate the log immediately after reproducing the issue you wish to capture. if possible, generate the log within 10 minutes. check that you have collected the full log file before sending it to the samsung support agent. conclusion galaxy watch always offers flexible ways to collect logs and bug reports to troubleshoot and optimize your applications. follow one of the options described above, generate your log file, zip it, and share it with samsung support. by following this guide, you can confidently access logs, full bug reports, and system information to analyze application behavior, diagnose problems, and take steps accordingly. remember to always handle data responsibly and keep debugging options disabled in production environments to protect device security and privacy. if you have any questions about or need help with the information in this article, you can reach out to us on the samsung developers forum or contact us through developer support.
Shamima Nasrin
Develop Samsung Wallet
doconboarding guide the onboarding process for a partner manager on the wallet partner portal involves several steps to ensure that businesses or partners can effectively integrate their services into samsung wallet and begin offering digital cards, passes, loyalty programs, and other services to their customers onboarding process the following sections contain a description of the samsung wallet onboarding process for new partners the partner manager should fill basic information of the company and card details on partner portal, choose the card type and template that fit their contents, which will then provide keys such as card id and partner id to ensure safe data communication, make sure to prepare security key factors samsung will sign the provided csr then deliver certificates used to create the secured data samsung account is necessary to manage own service for samsung wallet the account is used to sign-up/sign-in on partner portal the following section contains the steps to register a new samsung account at the wallet partners portal navigate to the wallet partners portal and click the sign in button enter the email address and password in the form and click sign in note-if you do not have a samsung account yet, click on create account at the bottom to create an account if creating a new account, enter the account details email address, password, name, date of birth, and zip code , and then click next sign up signing up for the samsung wallet service involves registering a partner to access and utilize the features offered by samsung wallet to utilize full functionality of the samsung wallet partners service, a partner needs to enter company information, set encryption information, and configure card information after verification, the partner will get the authority to use all services the new partner of wallet partners portal is the samsung account will be conducted by samsung developer the new partners register to create business account and agree to the terms and conditions the partners complete the company profile information to onboard, create and manage business in wallet partner here’s a step-by-step guide for a new partner to sign up for the samsung wallet partners portal create business account - to use the wallet partners portal, one must create business account to get started, one must have a samsung developer business account this account is required to manage company’s digital assets and integrate services with samsung wallet accept the terms and conditions - to use wallet partners portal, review and accept the terms and conditions of the samsung developer portal ensure to read through the guidelines carefully, as they outline the rules for integrating business with samsung wallet verify account profile – complete the company profile information then enter the company name, company website, username etc additional information for the business account is optional, but providing detailed information will help with the registration process after filling out the required details, click submit to send the registration form for review welcome onboard - once the business account is created and the information is submitted; the wallet partner onboarding process is complete after completing the onboarding process, a welcome email confirming that the business has been successfully registered with the samsung wallet partners portal set encryption information and request permission setting encryption information involves configuring security measures to protect sensitive data during transactions and interactions within the samsung wallet partners portal encryption is used to secure the data being exchanged, preventing unauthorized access or interception once the encryption information is configured, one will need to request permission to access specific services within the samsung wallet partners portal permissions are necessary for performing operations such as adding or managing digital assets e g , cards, tickets, loyalty programs and accessing sensitive business data few points to remember only one account allowed per company manage the cards with one account for partners, one can only manage cards registered with the account multiple users with one account at same time is not allowed if someone else is signed in with the same account, the account in use will be signed out steps to set encryption information we need to perform encryption authentication to use the wallet partners portal create a csr that will request a digital certificate to be issued by a trusted authority we support multiple csr registrations if you click the + button, the csr registration area will be added if you click the - button, the csr registration area will be deleted go to the wallet partners portal and input the csr registration details item description encryption type select end to end encryption csr or none upload later csr csr certificate signing request the samsung public key is the key used for data encryption this can be used to issue and delete wallets csr is a file used to request signature of a certificate after uploading csr to the portal, csr will be signed using the samsung certificate please be careful not to expose samsung public key and csr due to security issues upload a * csr file only none upload later you need to set the encryption information csr to utilize the full functionality of samsung wallet service even if the subscription is done, you must upload the csr file later samsung public key samsung public key is sent to the partner’s email account signed certificate the signed certificate is sent to the partner’s email account complete encryption authentication to verify the correctness of the setup click done to submit the encryption information and complete the process a welcome email is sent when a user completes the sign-up process in addition, information required for the completion of csr is sent along with it security factors security factors refer to the various protocols and measures taken to secure the data and ensure the privacy and safety of the partners the service flow describes the series of steps or actions taken to complete a specific task in the wallet partners portal, from initial account creation to the use of services the service flow also ensures that data is handled securely csr certificate signing request process overview the certificate signing request csr process is critical for requesting a digital certificate from a certificate authority ca openssl, an open-source command-line tool, is commonly used to create the necessary files for csr generation and private key creation, which are essential to establish secure communication private key private key helps to enable encryption and is the most important component of certificates the private key should remain secure, as it is used for signing the csr and encrypting communication openssl genpkey -out domain key -algorithm rsa -pkeyopt rsa_keygen_bits 2048 note-if you want to make the private key more secure, adding ‘-des3’ on the command encrypts it with a password creating a certificate signing request the csr contains the public key and additional information such as the organization’s details this is required when a digital certificate is to be signed by a trusted certificate authority ca steps to create a csr from an existing private key open a terminal and use openssl to generate a csr domain csr using the existing private key openssl req -out domain csr -key domain key -new -sha256 it will also prompt you to provide csr information, such as a country name c the two-letter country code e g , us for the united states b state or province name st your state or province c locality name l your city or locality d organization name o your organization’s legal name e organizational unit ou optional the department or business unit within the organization f common name cn the domain name e g , www yourdomain com g email address email your contact email address you are about to be asked to enter information that will be incorporated into your certificate request what you are about to enter is what is called a distinguished name or a dn there are quite a f ew fields but you can leave some blank for some fields there will be a default value, if you enter ' ', the field will be left blank ----- country name 2 letter code [xx] kr state or province name full name [] seoul locality name eg, city [default city] sample city organization name eg, company [default company ltd] sample company organizational unit name eg, section [] sample section common name eg, your name or your server's hostname [] domain email address [] email@email com please enter the following 'extra' attributes to be sent with your certificate request a challenge password [] an optional company name [] once completed, the csr file domain csr will be generated note-‘password’ is optional attribute an important field is ‘common name’, which should be the exact fully qualified domain name fqdn of our domain creating a key and csr together both the private key and csr can be created with a single command openssl req -newkey rsa 2048 -nodes -keyout domain key -out domain csr note-if you want your private key encrypted, you can remove the ‘-nodes’ option for additional information https //en wikipedia org/wiki/public_key_certificate https //www openssl org my account the my account section in samsung wallet allows to manage profile, payment methods, security settings, and other account details navigate to the samsung wallet page, in top-right corner, select the my account section to manage the profile and encryption settings in this section, manage ‘wallet partner management’ to modify company information and manage the encryption settings note-after a signed certificate is generated, the encryption setting management fields can no longer be edited
Develop Samsung Wallet
docimplementing atw button to integrate the add to wallet atw functionality into your system, you need to embed the provided atw script and configure it using tokenized card data this allows users to securely add digital cards to samsung wallet follow the steps below to implement the atw button script composition begin by composing the integration script using the sample code provided on the partners portal alternatively, refer to the integration sample code for detailed instructions create tokenized card data cdata next, generate the cdata tokenized card data and insert the corresponding cdata token into the script cdata represents the actual content of the wallet card and comes in various formats depending on the card type for more information, refer to the generate_cdata sample code note-cdata token should expire in 30 seconds after creation, so cdata token needs to be created right after users actually click ‘add to wallet’ button to implement ‘add to wallet’ button, you may need some base data you can find the base data and other necessary information on partner portal’s wallet card page samsung wallet on the web this section explains how to implement the add to wallet button using javascript within a web environment or web view web button reference with importing api javascript if you implement the "add to wallet" button using this script, the button is shown only on the devices that support samsung wallet to automatically parse <samsung wallet> html tags when the page is loaded, include the following standard javascript <script src="https //us-cdn-gpp mcsvc samsung com/lib/wallet-card js" type="text/javascript"></script> you can use these tags or javascript functions for the web button if you are rendering html and you have proper partner permissions you can also use the script by referring to the various attributes samsung wallet html tag the ‘samsung wallet’ namespace tag defines the placement and various attributes of the "add to wallet" web button for samsung wallet <samsung wallet cardid="card_id" cdata="cdata" partnercode="partner_code" buttonid="button_id" rdclickurl="rd_click_url" rdimpressionurl="rd_impression_url" ></samsung wallet> button attributes attribute description cardid string required wallet card identifier * value granted from the partners portal cdata string required encrypted card object json * this field needs to be encrypted * see security partnercode string required partner code * value granted from the partners portal buttonid string required dom element id for the "add to wallet" web button for samsung wallet buttontype string optional “add to wallet” button type [“btnsw” / “btnatsw” / “qrcode”, default btnsw] * see image resources authtoken string optional token generated when “qrcode” is used * required only if the “buttontype” is set to “qrcode” model string optional device model to display button* by default, value from user-agent is used if no value from user-agent, the button is displayed * to display buttons only on devices supporting samsung wallet, explicitly include the model name * for example, you can retrieve the device model name e g , sm-s928f from the browser's user-agent inline string optional flag to display the "add to wallet" image button in one-line format default true one-line locale string optional locale of the "add to wallet" image button * see image resources rdclickurl string required url for logging a button click event * value granted from the partners portal rdimpressionurl string required url for logging a button impression event * value granted from the partners portal showforced string optional flag to force the "add to wallet" button to be displayed default false mediatheme string optional load the button’s resources from the media theme policy there are 4 themes default, inversion, lightonly, and darkonly default default *default load the button’s theme according to the prefers-color-scheme policy inversion load the inverse of the default button’s theme lightonly load the light theme of the default button *darkonly load the dark theme of the default button style string cssstyledeclaration optional load the button with custom style target string optional option to choose button’s target name * default “wallet” onshowbutton function optional callback handler function for the button’s on-show event onclickbutton function optional callback handler function for the button’s on-click event if you register the handler function, you must return a callback or promise value * see usage of onclickbutton handler samsungwallet addbutton function the samsungwallet addbutton function is used to explicitly render the add to wallet button on your web page using the samsung wallet javascript api samsungwallet addbutton { cardid "card_id", cdata "cdata", partnercode "partner_code", targetid "target_id", buttonid "button_id", rdclickurl "rd_click_url", rdimpressionurl "rd_impression_url", } button attributes attributes description cardid string required wallet card identifier * value granted from the partners portal cdata string required encrypted card object json * this field needs to be encrypted * seesecurity partnercode string required partner code * value granted from the partners portal targetid string required dom document object model element id to place the "add to wallet" web button for samsung wallet buttonid string required dom element id for the "add to wallet" web button for samsung wallet buttontype string optional “add to wallet” button type [“btnsw” / “btnatsw” / “qrcode”, default btnsw] * see image resources authtoken string optional token generated when “qrcode” is used * required only if the “buttontype” is set to “qrcode” model string optional device model to display button* by default, value from user-agent is used if no value from user-agent, the button is displayed * to display buttons only on devices supporting samsung wallet, explicitly include the model name * for example, you can retrieve the device model name e g , sm-s928f from the browser's user-agent inline string optional flag to display the "add to wallet" image button in one-line format default true one-line locale string optional locale of the "add to wallet" image button * see image resources rdclickurl string required url of logging a button click event * value granted from the partners portal rdimpressionurl string required url of logging a button impression event * value granted from the partners portal showforced string optional flag to force the "add to wallet" button to be displayed default false mediatheme string optional load the button’s resources from the media theme policy there are 4 themes default, inversion, lightonly, and darkonly default default *default load the button’s theme according to the prefers-color-scheme policy *inversion load the inverse of the default button’s theme *lightonly load the light theme of the default button *darkonly load the dark theme of the default button style object cssstyledeclaration optional load the button with a custom style target string optional option to choose button’s target name * default “wallet” onshowbutton function optional callback handler function for the button’s on-show event onclickbutton function optional callback handler function for the button’s on-click event if you register the handler function, you must return a callback or promise value * see usage of onclickbutton handler usage of onclickbutton handler the onclickbutton handler allows to define what happens when a user clicks the ‘add to wallet’ button we recommend that you add the process of generating jwt cdata add cdata to options cdata to this handler, because of the cdata expiration time the function parameters are defined as follows attributes description options button attributes optional attributes of the current button callback function optional callback function to pass the flag to proceed default false promise resolve function optional promise-resolved value to pass the flag to proceed default false callback to web button process from callback attributes for es5 in an es5 ecmascript 5 environment, you can use the callback attribute in your web button implementation to control the flow of the "add to wallet" process by executing the callback function with a boolean flag {callback flag } you can determine whether or not to proceed to the next step in the wallet integration onclickbutton function options, callback { // todo partner's process callback flag } callback to web button process from returning promise for es6 in an es6 environment, by returning a promise with a resolving flag, you can proceed to the next add to wallet process onclickbutton async options => { return new promise async resolve, reject => { // todo partner's process await resolve flag } } note-the card data token expires in 30 seconds after creation, so it needs to be created right after the user clicks the ‘add to wallet’ button samsung wallet on the app this section outlines how to implement the “add to wallet” button within a native application e g , android or ios steps to implement ‘add to wallet’ in a native app download the official ‘add to wallet’ button graphics from the designated repository based on your service environment for details on available assets and usage guidelines, see the image resources section before displaying the button, use the ‘check service available devices’ api to determine whether the user's device supports samsung wallet interpret the api response as follows if "available" true → device is supported → show the ‘add to wallet’ button if "available" false → device is not supported → do not show the button implement a jwt web link on the button triggered action note-the card data token expires in 30 seconds after creation, so it needs to be created right after the user clicks the “add to wallet” button app button on android [sample code implementation] public class walletcodesample { protected final static string tag = "samsungwalletsample"; protected static final string host = "https //api-us3 mpay samsung com"; protected static final string path = "wallet/cmn/v2 0/device/available"; /** * sample entry point of the usage */ public static void main { executors newsinglethreadexecutor submit -> { final string modelname = build model; final string countrycode = null; // optional country code iso_3166-2 final string servicetype = "wallet"; // required, fixed for samsung wallet final string partnercode = null; // required try { walletcodesample sample = new walletcodesample ; boolean iswalletsupported = sample checkwalletsupported modelname, countrycode, servicetype, partnercode ; string msg = string format "query for model %s , countrycode %s , servicetype %s , partnercode %s / wallet supported? %s ", modelname, countrycode, servicetype, partnercode, iswalletsupported ; log d tag, msg ; } catch exception e { // failed to check due to some reasons log e tag, e getmessage , e ; } } ; } /** * please see the wallet api spec document > '6 6 check service available devices' for more details * * @return true if wallet supported, otherwise false * @throws exception throws exception when it's not possible to get status due to any reasons */ public boolean checkwalletsupported @nonnull string modelname, @nullable string countrycode, @nonnull string servicetype, @nonnull string partnercode throws exception { if modelname == null || modelname isempty { log e tag, "model name is required parameter" ; throw new exception "something went wrong failed to get device model name " ; } if servicetype == null || servicetype isempty { log e tag, "servicetype is required parameter" ; throw new exception "something went wrong failed to get device servicetype " ; } if partnercode == null || partnercode isempty { log e tag, "partnercode is required parameter" ; throw new exception "something went wrong failed to get device partnercode " ; } string urlstring = makeurl modelname, countrycode, servicetype ; log i tag, "urlstring " + urlstring ; try { url url = new url urlstring ; httpurlconnection connection = httpurlconnection url openconnection ; connection setrequestproperty "partnercode", partnercode ; connection setrequestmethod "get" ; int responsecode = connection getresponsecode ; log i tag, "responsecode " + responsecode ; bufferedreader bufferedreader; if responsecode == 200 { bufferedreader = new bufferedreader new inputstreamreader connection getinputstream ; } else { bufferedreader = new bufferedreader new inputstreamreader connection geterrorstream ; } stringbuilder sb = new stringbuilder ; string inputline; while inputline = bufferedreader readline != null { log i tag, inputline ; sb append inputline ; } connection disconnect ; bufferedreader close ; // parse result jsonobject jsonobject = new jsonobject sb tostring ; string resultcode = jsonobject getstring "resultcode" ; string resultmessage = jsonobject getstring "resultmessage" ; if "0" equals resultcode && "success" equals resultmessage { return jsonobject getboolean "available" ; } else { throw new exception "something went wrong, resultcode " + resultcode + " , resultmessage " + resultmessage + " " ; } } catch ioexception e { log e tag, e getmessage , e ; throw new exception "something went wrong ioexception , " + e getmessage ; } catch jsonexception e { log e tag, e getmessage , e ; throw new exception "something went wrong, receive wrong formatted response, " + e getmessage ; } } protected string makeurl @nonnull string modelname, @nullable string countrycode, @nonnull string servicetype { stringbuilder sb = new stringbuilder ; sb append host append '/' ; sb append path ; sb append '?' append "servicetype" append '=' append servicetype ; sb append '&' append "modelname" append '=' append modelname ; if countrycode != null && !countrycode isempty { sb append '&' append "countrycode" append '=' append countrycode ; } return sb tostring ; } } samsung wallet via mma or email this section outlines how to configure and deliver samsung wallet cards through mms or email, enabling users to add cards to samsung wallet directly from their messaging platforms overview integrating samsung wallet into mms or email involves sending a web link that allows users to add a wallet card without needing to load the full javascript api this approach is ideal for environments such as sms/mms messages email communications note-these methods do not support dynamically controlling button visibility based on device compatibility guide to configuring wallet code for email and mms messages set up the data fetch link, including the necessary server apis to retrieve the wallet card data create a unique ‘reference id’ for each transaction or request ensure the ‘reference id’ is complex and secure to prevent the inference of sensitive information send the message containing the web link via a preferred platform e g , email or mms for mms, the web link will show up as a ‘smart suggestion’ on samsung devices, providing a streamlined user experience for reference, a sample web link can be found on the wallet cards guide on the partners portal for card data, samsung wallet asks the partner system to provide card details through the server api duplicate requests are prohibited on the same device to ensure data integrity link to ‘add to wallet’ on mms/email** you can include an “add to wallet” web button in environments where the javascript api cannot be loaded, such as sms or email these methods do not support controlling “add to wallet” button visibility mms link url link url attributes description url string required “add to wallet” link url * see data transmit link * see data fetch link [email on web button link] <a href="url"> <img src="image_url"> <img src="rd_impression_url" style="width 1px; height 1px;"> </a> attributes description url string required “add to wallet” link url * see data transmit link * see data fetch link image_url string required button’s image resource url * see image resources rd_impression_url string required impressions logging url * value granted from the partners portal statistics service samsung wallet provides valuable statistical data related to the integrated services, accessible via the partners portal this data helps track key events, such as button impressions and user interactions, to optimize your service and improve the overall user experience note-statistics api sample code - the actual code sample is at the wallet script guide section in ‘wallet cards’ menu on the partner portal event notification api https //us-rd mcsvc samsung com/statistics/{event}/addtowlt?{parameters}&utm_source=partner&utm_medium={channel} {event} for each event in the following situations - impression when the “add to wallet” button has been shown - click when the “add to wallet” button has been clicked {parameters} includes key factors to figure out the service {channel} - app "samsung wallet" button in a native application - web "samsung wallet" button on the web - email "samsung wallet" button in an email for details, please visit 'wallet cards' menu on the partner portal
Develop Samsung Pay
doc3 1 android sdk 3 1 1 introduction the samsung pay sdk allows android-based partner apps—such as merchant apps and issuer banking apps—to securely integrate features of integration wallet, enabling in-app payments, push provisioning, and more the following major operations are supported in-app payment - gives customers the option of paying for products and services with samsung wallet push provisioning - allows customers add a bank card to samsung wallet from the issuer app by providing the required card details to integrate your partner application with the samsung pay sdk, the following components are included your sdk download samsungpay jar - contains classes and interfaces of the samsung pay sdk which need to be integrated to partner apps javadoc - provides descriptions of the apis included in the samsung pay sdk, along with sample code showing how to use them sample merchant app and sample issuer app showing how samsung pay apis can be coded in a finished android project all major operations of samsung pay sdk are implemented for demonstration purposes 3 1 2 samsung pay sdk architecture the following diagram shows a high-level architecture revealing the general interactions between the samsung pay sdk and a partner app viewed at this level, the partner apps leverage the samsung pay sdk to perform the operations shown ― push provisioning and opening favorite cards for issuers; online payments for merchants ― with samsung pay the key components involved are partner app - merchant- or issuer-developed app for making online/offline payments and provisioning payment cards through samsung wallet samsung pay sdk - sdk integrated into the partner app for direct communication with samsung wallet samsung wallet app - wallet app that the samsung pay sdk communicates with financial network - comprises the payment gateways, acquirers, card associations, and issuers that participate in transaction processing under agreement with the merchant the main classes comprising the samsung pay sdk include samsungpay – used by the partner app to get the samsung pay sdk information and the status of samsung wallet app on the device paymentmanager – provides payment/transaction functionality cardmanager – manages card list get, add, update functionality watchmanager – manages all functions related to samsung pay watch cardinfolistener – interface for requestcardinfo result from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet 3 1 3 uses cases in-app payment the most common in-app online payment use case take the following form merchant app presents user with the option of making payment with samsung wallet upon the user selecting the samsung pay option, the merchant app calls the apis included in the samsung pay sdk to initiate a transaction with samsung wallet app samsung wallet app responds with the tokenized payment information necessary to complete the transaction merchant app forwards this payment information to the designated payment gateway pg , either directly through the merchant's web server, or indirectly via the samsung-pg interface server for normal transaction processing app-to-app push provisioning the push provisioning use case ― adding payment cards to samsung wallet from the card issuer’s app ― typically takes this form the user logs into the issuer app the issuer app checks if samsung wallet is activated on the device and ready to use if it is in the ready status, the issuer app displays an add button for cards not currently registered/enrolled with the samsung wallet app if the add card option is selected, the issuer app calls an api to push the proper payload data to samsung wallet while the card is being provisioned, samsung wallet stays in background 3 1 4 setting up sdk development environment the importance of maintaining a good development environment cannot be overstated for integrating the samsung pay sdk with your partner app, the following prerequisites and recommendations help ensure a successful sdk implementation system requirements the samsung pay sdk is designed exclusively for samsung mobile devices supporting samsung pay and running android lollipop 5 1 android api level 22 or later versions of the android os the sdk’s in-app payments functionality requires android 6 0 m android api level 23 or later versions of the android os note as of sdk version 1 5, if the device runs android lollipop 5 1 android api level 22 or an earlier version, the getsamsungpaystatus api method returns a spay_not supported status code merchant apps still using samsung pay sdk 1 4 or earlier not recommended must check the android version running their app use the following snippet to determine the os version running on a device and whether or not to display the samsung pay button in your partner app import android os build; // in-app payment supported on android m or above // check android version of the device if build version sdk_int < build version_codes m { //hide samsung pay button} service registration to develop a samsung pay sdk service, merchants and issuers need to register for an account with samsung pay developers in order to create the appropriate service type for their applications here are some helpful links inside the portal become a member https //pay samsung com/developers/tour/memberguide create services https //pay samsung com/developers/tour/svcguide register apps https //pay samsung com/developers/tour/appsguide manage services and apps https //pay samsung com/developers/tour/svcnappsguide add samsung pay sdk to your project be sure to do the following before attempting to use the sdk if not already part of your environment, download and install an ide android studio is recommended download the samsung pay sdk the sdk package has the following directory structure folder contents docs javadoc – api reference documentation libs samsungpay jar sdk java archive file – contains the samsung pay apis to be used by your partner app samples sample apps configure your ide to integrate the samsung pay sdk with your partner app a add samsungpay jar to the libs folder of your android project b go to gradle scripts > build gradle and enter the following dependency dependencies { compile files 'libs/samsungpay jar' } c import the sdk package into your code import com samsung android sdk samsungpay v2; d proguard rules - if your app s have any issue with proguard, the following rules are recommended to enter in debug mode dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key e when dexguard is employed, the following additional rules apply -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level android r os targetsdkversion 30 informationfrom android r os if the target sdk version is 30 , you must include the following <queries> element in the androidmanifest <?xml version="1 0" encoding="utf-8"?> <manifest xmlns android="http //schemas android com/apk/res/android" xmlns tools="http //schemas android com/tools" package="xxx xxx xxx xxx"> <queries> <package android name="com samsung android spay" /> <package android name="com samsung android samsungpay gear" /> </queries> 3 1 5 configuring api level api level attributes as of sdk version 1 4, enhanced version control management has been introduced to improve backward compatibility and handle api dependency from country and service type for example, if a partner integrates the latest sdk―for instance, api level 2 22―but continues to use apis based in level 1 4, the partner app remains compatible with samsung wallet apps supporting api level 1 4 without the necessity of upgrading the samsung pay app the chief characteristics and properties of the api level include every api starting from version 1 4 has an api level assigned based on the sdk version number in which it is introduced the sdk’s javadoc reference can be filtered by api level so you can determine the minimum api level you need to configure in the metadata section of your app’s androidmanifest file the earliest possible version is 1 4 this lets you use the api level defined in your androidmanifest without having to trigger an upgrade of the samsung wallet app on the user’s device implement the following usage in your androidmanifest <application <meta-data android name="spay_sdk_api_level" android value="2 22" /> // most recent sdk version is recommended to leverage the latest apis but it need to be set to 2 17 for russia </application> partner app verification in partner verification process samsung pay sdk verify your registered app, version in samsung pay portal and service it also determines device and app compatibility your app needs to verify the presence of the samsung wallet app on the device, its status, and whether or not its version is sufficient to support your implementation of the sdk 3 1 6 common terminology terminology description aavs automatic add value service aidl android interface definition language for communication merchant a business entity engaged in retail e-commerce that provides an online checkout service for purchasing its products and/or services to registered end users issuer financial institution empowered to issue credit and/or debit payment cards to qualified consumers and businesses payment gateway pg e-commerce app service provider equipped to authorize credit card payments for e-businesses, online retailers, bricks and clicks, or traditional brick and mortar payment token secure method for payment ensuring that a cardholder’s information is not exploited by unauthorized parties samsung pay samsung’s proprietary mobile wallet app and payment system samsung pay service the server and service components of samsung pay samsung pay watch samsung pay app on samsung galaxy watches to support payment system eligibility check a query by third-party apps to check whether or not samsung pay is supported/activated/ready-to-use on a samsung device mst magnetic secure transmission tui trusted user interface 3 1 7 api common flow once setup is complete, you’re ready to add the sdk code within your partner app for calling the sdk’s apis and receiving callbacks when a partner app calls one of the sdk’s apis, the following interaction flow is processed to check whether the caller is authenticated and authorized before responding to the request the steps of the interaction are enumerated below step 1 the partner app calls a samsung pay sdk api the partner app initiates a call to the samsung pay sdk this could be to request in-app payment push provisioning status checks, etc step 2 sdk validates the preconditions the sdk performs initial checks before proceeding is samsung wallet installed on the device? is the integrity of the samsung pay system intact e g , no tampering or missing files ? step 3 sdk initiates communication with samsung wallet if preconditions are met, the sdk uses aidl android interface definition language to securely open a communication channel with the samsung wallet app step 4 samsung wallet app status validation samsung wallet app checks has the samsung pay setup been completed on the device? does the app require a mandatory update? is the samsung pay sdk api level used by the partner app compatible? step 5 partner app eligibility verification sdk triggers a backend verification with the samsung pay server to confirm the app’s package name, service id, and csr match what’s registered on the samsung pay developers portal the app is authorized to use the requested samsung pay functionality step 6 samsung wallet responds to sdk based on the above validations samsung wallet responds via aidl to the sdk it sends status codes, eligibility results, or additional prompts if needed e g , update required step 7 sdk triggers callback in the partner app the sdk invokes a callback function in the partner app this informs the app whether it can proceed with payment/provisioning an error or restriction has occurred step 8 partner app executes business logic based on sdk callback if successful initiate samsung pay payment ui or push provisioning complete transaction or card enrollment via the wallet app if unsuccessful inform the user offer fallback payment options provide guidance on enabling/updating samsung wallet 3 1 8 checking samsung pay status the first step in integrating the samsung pay sdk into your partner app is to create a samsung pay instance and check the status of samsung pay on the user's device this check determines whether the device supports samsung pay and if the samsung pay button should be shown as a payment or provisioning option the samsung pay button serves two key purposes for merchant apps, it enables users to select samsung pay for in-app payments for issuer apps, it allows users to add a card directly to samsung pay via push provisioning setting partnerinfo for verification before checking the status, the partner app must configure and pass a valid partnerinfo object to the samsungpay instance this is essential for verifying the calling app and enabling further sdk functionality the partnerinfo must include serviceid sid a unique identifier assigned by the samsung pay developer portal servicetype defines the type of service e g , merchant or issuer this value is also assigned during service registration samsung pay uses partnerinfo for validating the app’s identity and registration performing sdk version and api compatibility checks verifying allowlist/blocklist status note servicetype is required without it, you cannot call other samsung pay apis once partnerinfo is set correctly, you can proceed to call getsamsungpaystatus to check if samsung pay is available and ready for use on the device val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle after setting partnerinfo, your partner app can now call getsamsungpaystatus this method of the samsungpay class must be called before using any other feature in the samsung pay sdk noteif you want to get the status of samsung pay watch, you have to use the watchmanager class instead of the samsungpay class fun getsamsungpaystatus callback statuslistener copy the result is delivered to statuslistener and provides the following events onsuccess ‒ called when the requested operation is successful it provides the status of the request, as well as extra bundle data related to the request onfail ‒ called when the request operation fails it returns the error code and extra bundle data related to the request the samsung pay status code returned is one of the following spay_not_supported - indicates samsung wallet is not supported on this device; typically returned if the device is incompatible with samsung pay or if the samsung wallet app is not installed spay_not_ready - indicates samsung wallet is not completely activated; usually returned if the user did not complete a mandatory update or if the user has not signed in with a valid samsung account in which case, the partner app can activate or update the samsung wallet app on the device according to the 'extra_error_reason' bundle keys below error_spay_setup_not_complete - tells the partner app to display a popup message asking if the user wishes to activate samsung pay if the user agrees, the partner app calls activatesamsungpay to activate the samsung wallet app error_spay_app_need_to_update - tells the partner app to display a popup message asking if the user wishes to update samsung pay if user agrees, the partner app calls gotoupdatepage to open the app update page error_partner_info_invalid - indicates that partner app information is invalid; typically, the partner app is using a sdk version that is not allowed, an invalid service type, or the wrong api level error_partner_sdk_api_level - tells the partner app it is using the wrong api level to resolve the error condition, the partner app must set a valid api level error_partner_service_type - tells the partner app that it did not set a service type, or that the service type it did set is invalid service type is set in partnerinfo spay_ready - indicates that samsung pay is activated and ready to use; typically returned after the user completes all mandatory updates and signs in extra bundle data can have the following values extra_country_code - for both onsuccess and onfail , this is the current device’s country code iso 3166-1 alpha-2 set by samsung pay if the partner app is not supported in this particular country, the partner app can decide not to display samsung pay button extra_error_reason - for onfailure , this is the reason for failure set by samsung pay when the returned status code is spay_ready, the partner app can safely display the samsung pay button for user selection as a payment option, push provisioning, and so on the following sample code shows how to use the getsamsungpaystatus api method val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo /* * method to get the samsung pay status on the device * partner issuers, merchants applications must call this method to * check the current status of samsung pay before doing any operation */ samsungpay getsamsungpaystatus object statuslistener { override fun onsuccess status int, bundle bundle { when status { samsungpay spay_not_supported -> // samsung pay is not supported samsungpaybutton setvisibility view invisible samsungpay spay_not_ready -> { // activate samsung pay or update samsung pay, if needed samsungpaybutton setvisibility view invisible val errorreason = bundle getint samsungpay extra_error_reason if errorreason == samsungpay error_setup_not_completed { // display an appropriate popup message to the user samsungpay activatesamsungpay } else if errorreason == samsungpay error_spay_app_need_to_update { // display an appropriate popup message to the user samsungpay gotoupdatepage } else { toast maketext context, "error reason $errorreason", toast length_long show } } samsungpay spay_ready -> // samsung pay is ready samsungpaybutton setvisibility view visible else -> // not expected result samsungpaybutton setvisibility view invisible } } override fun onfail errorcode int, bundle bundle { samsungpaybutton setvisibility view invisible log d tag, "checksamsungpaystatus onfail $errorcode" } } 3 1 9 activating the samsung wallet app the samsungpay class provides the following api method to activate the samsung wallet app on a device fun activatesamsungpay activatesamsungpay is called to activate the samsung wallet app on the same device on which the partner app is running first, however, the partner app must check the samsung pay status with a getsamsungpaystatus call see section 4 2 above if the status is spay_not_ready and extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to user, then call activatesamsungpay to launch the samsung wallet app so the user can sign in here’s an example of how to code this val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay activatesamsungpay 3 1 10 updating the samsung wallet app the samsungpay class provides the following api method to update the samsung wallet app on the device fun gotoupdatepage gotoupdatepage is called to update samsung wallet app on the same device on which the partner app is running as with all api calls, the partner app must first check the samsung pay status with getsamsungpaystatus if this returns spay_not_ready and extra_error_reason is error_spay_app_need_to_update, then the partner app needs to display an appropriate message to the user and call gotoupdatepage , which launches the samsung pay update page the following code sample reflects how to update samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay gotoupdatepage 3 1 11 in-app online the main classes and interfaces involved here are samsungpay– class for a merchant app to get samsung pay sdk information and the status of samsung pay on the device paymentmanager – class to provide payment/transaction functionality cardinfolistener – interface for requestcardinfo result callbacks from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet; payment information is provided with a success callback and must be used by the merchant app for processing the payment the flow pictured next captures the essential online payment api process between merchant apps integrated with the samsung pay sdk and samsung wallet and the merchant’s payment gateway pg 3 1 12 api flow for in-app payments the api flow for samsung pay in-app payments involves a series of operations that ensure secure, seamless, and verified payment processing between the merchant app, samsung wallet, and the payment gateway pg these steps are illustrated in the flow diagram above and described below check the ready status of samsung pay use samsungpay getsamsungpaystatus to verify whether samsung pay is installed and supported on the device samsung pay is activated and ready for transactions the user has completed mandatory updates and account setup start the payment manager to establish the service binding and verify the merchant app establish a binding between your app and the samsung wallet app validate that the merchant app is authorized and registered prepare the sdk to handle payment operations get payment card information and the payment amount, including updates this step also includes displaying eligible cards to the user allowing the user to select a card for the transaction collecting or updating the payment amount get/update the user’s billing and shipping addresses, including an updated payment amount if shipping charges will be incurred if required by the transaction retrieve or update the user’s billing and shipping address recalculate and update the total payment amount e g , shipping cost impact authenticate the user trigger authentication via trusted user interface tui , using biometrics or other secure methods supported by samsung wallet submit payment information to pg this ensures the user has authorized the transaction send the tokenized payment data received from samsung pay to your designated payment gateway pg for transaction processing this can be done via a direct merchant server-to-pg connection, or samsung pg interface server if applicable verify transaction success or failure receive confirmation of transaction success or failure from the payment gateway communicate the result back to the user and update your app's ui and backend accordingly 3 1 13 token modes network vs gateway to complete the payment, the merchant’s designated payment gateway pg handles one of two types of tokens gateway tokens indirect or network tokens direct the samsung pay sdk supports both types the essential difference between the two types is who decrypts the token information network tokens require that the merchant app handles decryption of the token bundle or work with the pg to handle decryption, whereas gateway token decryption is handled by the pg via the samsung-pg interface server network token mode direct user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information is passed from the samsung pay app to the pg through the merchant app via the pg sdk applying the merchant's private key, pg decrypts the payment information structure and processes the payment through the acquirer and payment network upon receiving authorization or rejection, pg notifies the merchant app through its pg sdk gateway token mode indirect user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information and the partner id are passed to the samsung-pg interface server samsung-pg interface server sends a transaction authorization request to the pg on behalf of the merchant; pg authenticates the partner id before generating a transaction reference id reference id is passed to merchant app via sdk callback merchant app then passes the reference id to the pg for payment process execution samsung-pg interface server returns the payment token to the pg i e , gateway token it received from samsung pay app in step 2 pg continues payment processing with the acquirer and payment network the result approved/declined is returned to the merchant app on the device for display to the user check with your pg to determine its specific requirements for payment processing regardless of the pg model employed, direct or indirect, the goal is to offer samsung pay as a secure payment method within your merchant app the most common use case involves the following general steps to make a purchase, the user selects to “buy” or got to checkout after adding items to a shopping cart now in checkout, the user selects a payment option; for example, either the merchant’s “standard” method or samsung pay upon selecting samsung pay, the user is presented with a payment sheet that allows for card selection and shipping address confirmation with the option to add/modify information for this order, whereupon the user makes payment card selection from the list of enrolled cards chooses to change or add the delivery address enters required address information in the form presented and saves it authenticates the payment method, amount, and delivery with a biometric verification fingerprint, iris… or pin 3 1 14 checking registered/enrolled card information before displaying the samsung pay button, a partner app can query card brand information for the user’s currently enrolled payment cards in samsung wallet to determine if payment is supported with the enrolled card for example, if a merchant app accepts one card brand exclusively but the user has not registered any cards matching this brand in samsung wallet, the merchant app needs to determine whether or not to display the samsung pay button for this purchase checkout to query the card brand, use the requestcardinfo api method of the paymentmanager class the requestfilter is optional bundle data reserved for future use the merchant app does not need to set a value for it now however, before calling this method, cardinfolistener must be registered so its listener can provide the following events onresult - called when the samsung pay sdk returns card information from samsung wallet; returns information about enrolled cards or is empty if no card is registered onfailure - called when the query fails; for example, if sdk service in the samsung wallet app ends abnormally the following snippet shows how to retrieve the list of supported card brands from samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val paymentmanager = paymentmanager context, partnerinfo paymentmanager requestcardinfo bundle , cardinfolistener // get card brand list //cardinfolistener is for listening requestcardinfo callback events val cardinfolistener cardinfolistener = object cardinfolistener { // this callback is received when the card information is received successfully override fun onresult cardresponse list<cardinfo> { var visacount = 0 var mccount = 0 var amexcount = 0 var dscount = 0 var brandstrings = "card info " var brand spaysdk brand? for i in cardresponse indices { brand = cardresponse[i] brand when brand { spaysdk brand americanexpress -> amexcount++ spaysdk brand mastercard -> mccount++ spaysdk brand visa -> visacount++ spaysdk brand discover -> dscount++ else -> { /* other card brands */ } } } brandstrings += " vi = $visacount, mc = $mccount, ax = $amexcount, ds = $dscount" log d tag, "cardinfolistener onresult $brandstrings" toast maketext context, "cardinfolistener onresult" + brandstrings, toast length_long show } /* * this callback is received when the card information cannot be retrieved * for example, when sdk service in the samsung wallet app dies abnormally */ override fun onfailure errorcode int, errordata bundle { //called when an error occurs during in-app cryptogram generation toast maketext context, "cardinfolistener onfailure " + errorcode, toast length_long show } } 3 1 15 creating a transaction request upon successful initialization of the samsungpay class, the merchant app needs to create a transaction request with payment information note as of sdk v2 0 00, the normal payment sheet is deprecated all merchant apps must now use the custom payment sheet, which offers more dynamic controls for tailoring the ui look and feel with additional customer order and payment data merchant app developers choosing to temporarily continue offering the normal sheet will need to configure their android manifest to reflect the pre-2 0 00 version of the sdk used to implement their app’s existing normal sheet, although this is not recommended in all cases, merchant app developers should update their apps with the latest version of the sdk as soon as possible to avoid timing out using an earlier version of the sdk when responding to samsung pay callbacks using the custom payment sheet to initiate a payment transaction with samsung pay’s custom payment sheet, your merchant app must populate the following mandatory fields in customsheetpaymentinfo merchant name - as it will appear in samsung pay’s payment sheet, as well as the user's card account statement amount - the constituent transaction properties currency, item price, shipping price, tax, total price which together determine the total amount the user is agreeing to pay the merchant cautionnot populating the mandatory fields throws an illegalargumentexception optionally, the following fields can be added to the payment information merchant id- can be used for the merchant’s own designated purpose at its discretion unless the merchant uses an indirect pg like stripe or braintree if an indirect pg is used, this field must be set to the merchant’s payment gateway id fetched from the samsung pay developers portal merchant id is mandatory if a merchant requests with a mada token, this field should be included in the payload order number - usually created by the merchant app via interaction with a pg this number is required for refunds and chargebacks in the case of visa cards, the value is mandatory the allowed characters are [a-z][a-z][0-9,-] and the length of the value can be up to 36 characters address - the user’s billing and/or shipping address see applying an addresscontrol for details allowed card brands - specifies card brands accepted by the merchant if no brand is specified, all brands are accepted by default if at least one brand is specified, all other card brands not specified are set to "card not supported’ on the payment sheet here’s the 'customsheetpaymentinfo' structure class customsheetpaymentinfo parcelable { private val version string? = null private val merchantid string? = null private val merchantname string? = null private val ordernumber string? = null private val addressinpaymentsheet addressinpaymentsheet = addressinpaymentsheet do_not_show private val allowedcardbrand list<spaysdk brand>? = null private val cardinfo cardinfo? = null private val iscardholdernamerequired = false private val isrecurring = false private val merchantcountrycode string? = null private val customsheet customsheet? = null private val extrapaymentinfo bundle? = null } your merchant app sends this customsheetpaymentinfo to samsung wallet via the applicable samsung pay sdk api methods upon successful user authentication in direct mode, samsung wallet returns the above "payment info" structure and a result string the result string is forwarded to the pg by your merchant app to complete the transaction it will vary based on the pg you’re using note if you want to add any other information for any card brand, you can add them in the extrapaymentinfo bundle the following example demonstrates how to populate customsheet in the customsheetpaymentinfo class see sample merchant app using custom payment sheet below for example usage of each customsheet control /* * make user's transaction details * the merchant app should send customsheetpaymentinfo to samsung wallet via * the applicable samsung pay sdk api method for the operation being invoked */ private fun makecustomsheetpaymentinfo customsheetpaymentinfo { val brandlist = arraylist<spaysdk brand> // if the supported brand is not specified, all card brands in samsung wallet are // listed in the payment sheet brandlist add paymentmanager brand visa brandlist add paymentmanager brand mastercard brandlist add paymentmanager brand americanexpress /* * make the sheetcontrols you want and add them to custom sheet * place each control in sequence with amountboxcontrol listed last */ val customsheet = customsheet customsheet addcontrol makebillingaddresscontrol customsheet addcontrol makeshippingaddresscontrol customsheet addcontrol makeplaintextcontrol customsheet addcontrol makeshippingmethodspinnercontrol customsheet addcontrol makeamountcontrol val extrapaymentinfo = bundle /* * you can add transaction type for mada card brand * the supported values are purchase and preauthorization * if you don't set any value, the default value is purchase */ extrapaymentinfo putstring spaysdk extra_online_transaction_type, spaysdk transactiontype preauthorization tostring val customsheetpaymentinfo = customsheetpaymentinfo builder setmerchantid "123456" setmerchantname "sample merchant" // merchant requires billing address from samsung wallet and // sends the shipping address to samsung wallet // show both billing and shipping address on the payment sheet setaddressinpaymentsheet customsheetpaymentinfo addressinpaymentsheet need_billing_send_shipping setallowedcardbrands brandlist setcardholdernameenabled true setrecurringenabled false setcustomsheet customsheet setextrapaymentinfo extrapaymentinfo build return customsheetpaymentinfo } 3 1 16 requesting payment with a custom payment sheet the startinapppaywithcustomsheet method of the paymentmanager class is applied to request payment using a custom payment sheet in samsung wallet the two methods are defined as follows startinapppaywithcustomsheet - initiates the payment request with a custom payment sheet the payment sheet persists for 5 minutes after the api is called if the time limit expires, the transaction fails updatesheet - must be called to update current payment sheet as of api level 1 5, a merchant app can update the custom sheet with a custom error message refer to updating sheet with custom error message when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from it, the user can select a registered card for payment and change the billing and shipping addresses, as necessary the result is delivered to customsheettransactioninfolistener, which provides the following events onsuccess - called when samsung pay confirms payment it provides the customsheetpaymentinfo object and the paymentcredential json string customsheetpaymentinfo is used for the current transaction it contains amount, shippingaddress, merchantid, merchantname, ordernumber api methods exclusively available in the onsuccess callback comprise getpaymentcardlast4dpan – returns the last 4 digits of the user's digitized personal/primary identification number dpan getpaymentcardlast4fpan – returns the last 4 digits of the user's funding personal/primary identification number fpan getpaymentcardbrand – returns the brand of the card used for the transaction getpaymentcurrencycode – returns the iso currency code in which the transaction is valued getpaymentshippingaddress – returns the shipping/delivery address for the transaction getpaymentshippingmethod – returns the shipping method for the transaction for pgs using the direct model network tokens , the paymentcredential is a json object containing encrypted cryptogram which can be passed to the pg pgs using the indirect model gateway tokens like stripe, it is a json object containing reference card reference – a token id generated by the pg and status i e , authorized, pending, charged, or refunded refer to payment credential sample for details oncardinfoupdated - called when the user changes the payment card in this callback, updatesheet method must be called to update current payment sheet onfailure - called when the transaction fails; returns the error code and errordata bundle for the failure here’s how to call the startinapppaywithcustomsheet method of the paymentmanager class /* * customsheettransactioninfolistener is for listening callback events of in-app custom sheet payment * this is invoked when card is changed by the user on the custom payment sheet, * and also with the success or failure of online in-app payment */ private val transactionlistener = object customsheettransactioninfolistener { // this callback is received when the user changes card on the custom payment sheet in samsung pay override fun oncardinfoupdated selectedcardinfo cardinfo, customsheet customsheet { /* * called when the user changes card in samsung wallet * newly selected cardinfo is passed so merchant app can update transaction amount * based on different card if needed , */ val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 //item price amountboxcontrol updatevalue product_tax_id, 50 0 // sales tax amountboxcontrol updatevalue product_shipping_id, 10 0 // shipping fee amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" // additional item status amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only // grand total customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e java lang illegalstateexception { e printstacktrace } catch e java lang nullpointerexception { e printstacktrace } } /* * this callback is received when the payment is approved by the user and the transaction payload * is generated payload can be an encrypted cryptogram network token mode or the pg's token * reference id gateway token mode */ override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle { /* * called when samsung pay creates the transaction cryptogram, which merchant app then sends * to merchant server or pg to complete in-app payment */ try { val dpan = response cardinfo cardmetadata getstring spaysdk extra_last4_dpan, "" val fpan = response cardinfo cardmetadata getstring spaysdk extra_last4_fpan, "" toast maketext context, "dpan " + dpan + "fpan " + fpan, toast length_long show } catch e java lang nullpointerexception { e printstacktrace } toast maketext context, "transaction onsuccess", toast length_long show } override fun onfailure errorcode int, errordata bundle { // called when an error occurs during cryptogram generation toast maketext context, "transaction onfailure $errorcode", toast length_long show } } private fun startinapppaywithcustomsheet { // show custom payment sheet try { val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle paymentmanager = paymentmanager context, partnerinfo // request payment using samsung wallet paymentmanager startinapppaywithcustomsheet makecustomsheetpaymentinfo , transactionlistener } catch e illegalstateexception { e printstacktrace } catch e numberformatexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } catch e illegalargumentexception { e printstacktrace } } when an address is provided by samsung wallet, onaddressupdated is called whenever address information is updated in the custom payment sheet you can use the updatesheet method to update the shipping fee or any other relevant information in the payment sheet set the errorcode to determine if the address provided by samsung wallet app is invalid, out of delivery, or does not exist for example, when the merchant does not support the product delivery to the designated location billing address from samsung wallet is not valid for tax recalculation for all such cases, the merchant app should call updatesheet with one of the following error codes error_shipping_address_invalid error_shipping_address_unable_to_ship error_shipping_address_not_exist error_billing_address_invalid error_billing_address_not_exist the sample code included below under applying the address control demonstrates how to use the updatesheet method for 'addresscontrol' in the payment sheet 3 1 17 payment credential sample the paymentcredential is the resulting output of the startinapppaywithcustomsheet method the structure varies depending on the pg you’re using and the integration model—direct or indirect the following paymentcredential is for a visa card for pg using direct network token mode – e g first data, adyen, visa cybersourse sample paymentcredential json output using jwe-only { "billing_address" {"city" "billingcity","country" "usa","state_province" "ca","street" "billingaddr1","zip_postal_code" "123456"}, "card_last4digits" "1122", "3ds" {"data" "eyjhbgcioijsu0exxzuilcjrawqioijcak91a1h2afv4wu5wofiwvgs2y25oactzwwfqzxhiehrvz0vfdhlhyy9npsisinr5cci6ikppu0uilcjjagfubmvsu2vjdxjpdhldb250zxh0ijoiulnbx1blssisimvuyyi6ikexmjhhq00ifq fg2oouvhdgkkivyba2s5kturpwueujkzeyxz7n6kalhqahszv3p5jabaoj-rokcznfjdg3qierzjktu7zxst9gwv4oclahpfdw64w0x6ttaxeyjiivkjug-edxxtwajeyeikgc68wehf1cltsqg4zlwi6upvcaywdppbn0hl0c5wcf5az4wabytv_fda5ahguypne70keqrtwdlacw9mzejx2xth7msd9ohoulr8luq-7gha17jhoobwgmoq9q0haocnm0ljwiuhkoryyu-njulnbkk8fzus_aiumgdv2yn9ygfqilmculb0vwuf0yekx6isgaxi0zqhliusjkcz_w auzzxog46lnrtk3q qe2llws30vzh-zduue8b045cnfrm2p-rjzgbnzchels3v26n64cfg1av5mtp5f-fswbj3ntp5x4v1nk8fmdy0uspxzemfvl5badgac7w9frxt6x5xv1fqu6-q-zkbxcb9bygownt983bckoe1bd5djxfbodlrc4j68ikdjc5m3lebdx6hv0aqzkmilch-jevl3awqykbny4vj7m3fizw7u1prli2zfwukxdfs4vwv3bpm4qudemvnhxj qtymdmn4ne93juljnmwkjg","type" "s","version" "100"}, "merchant_ref" "merchantid", "method" "3ds", "recurring_payment" false } decrypt using the merchant’s private key below is sample private key -----begin rsa private key----- miieowibaakcaqea4lzyjqr+dqd/xleoxct9jwtjxhd2ptjke9djtmijki0h2oc2ghow4ujhhy/1jvft2+zcnjtoxuvlp+76/dwa3bcwfrj+fpp6x5kkylpb+djdyo1ttumltnqcwymjb3u7jbc+xr4vkfrzqjxke7xhn/sbb82ue8c3smzvkynuji<…> -----end rsa private key----- the decrypted output will be similar to this { "amount" "1000", "currency_code" "usd", "utc" "1490266732173", "eci_indicator" "5", "tokenpan" "1234567890123456", "tokenpanexpiration" "0420", //the format is **mmyy** "cryptogram" "ak+zkbpmcorcabcd3agraoacfa==" } note for amex, it needs to be displayed in the format “yymmdd”, so i would like to add this processing the payload depending on the structure of the payment processing api provided by your pg, your merchant app can send either of these directly to the pg entire paymentcredential output extracted “3ds” part only consult your pg documentation for specific guidance when using indirect model e g stripe in indirect gateway token mode, paymentcredential is the pg’s token reference id and its status here’s a sample of the json output { "reference" "tok_18rje5e6szui23f2mefakep7", "status" "authorized" } for stripe, your merchant app should be able to pass this token object directly to charge or another appropriate payment processing api provided by the pg 3 1 18 push provisioning the following diagram illustrates the flows of the app-to-app apis for payment card push provisioning the main classes involved are samsung pay – for fetching samsung wallet app status and wallet information on the device paymentmanager – for push provisioning and invoking favorite cards payment functionalities cardmanager – for payment card management watchmanager – for all functions related to samsung pay watch 3 1 19 requesting registered card list in the samsung pay the getallcards method of the cardmanager class is used to request a list of all cards currently registered/enrolled in samsung wallet on the same device running the issuer’s app to succeed, the issuer app must pass valid partnerinfo to 'cardmanager' for caller verification 'cardfilter' narrows the card list returned by samsung wallet to the issuername specified please be noted that getsamsungpaystatus must be called before getallcards getallcards could not return a cards list when getsamsungpaystatus responds with a code other than spay_ready noteto get the cards list of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class as of api level sdk version 1 4, cardfilter retrieves this information from the samsung pay developers portal certain issuers may need to register multiple issuer name s with the portal, depending on their app and/or the requirements of their token service provider tsp the getallcards parameter cardfilter matches the issuer name s specified with those registered in the portal only complete matches are returned this method is typically called when your partner app wants to check the card status it does not need to be called every time the partner app resumes therefore, you should create the card list with the 'oncreate ' method, rather than the 'onresume ' method the result of a getallcards call is delivered to getcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides the list of all filtered cards and their status card information includes cardid, cardstatus, and extra cardinfo data onfail - called when the operation fails here’s an example of how to use the 'getallcards ' api method in your issuer app val cardfilter = bundle // since api level 1 4, cardfilter param is ignored partner does not need to use it here // it is retrieved from the samsung pay developers portal cardfilter putstring cardmanager extra_issuer_name, issuername cardmanager getallcards null, object getcardlistener{ override fun onsuccess cards mutablelist<card>? { // getting card status is success if cards == null || cards isempty { log e tag, "no card is found" return } else { // perform operation with card data for s in cards { log d tag, "cardid " + s cardid + "cardstatus " + s cardstatus // get extra card data if s cardinfo != null { val cardid = s cardid // since api level 2 13, id from card network val last4fpan = s cardinfo getstring cardmanager extra_last4_fpan val last4dpan = s cardinfo getstring cardmanager extra_last4_dpan val cardtype = s cardinfo getstring cardmanager extra_card_type val cardissuername = s cardinfo getstring cardmanager extra_issuer_name log d tag, "last4fpan $last4fpan last4dpan $last4dpan cardid $cardid" } } } } override fun onfail errorcode int, errordata bundle? { // getting card status is failed } } 3 1 20 getting wallet information the samsungpay class provides the getwalletinfo api method, which is called to request wallet information from the samsung wallet app prior to calling the addcard api, when you want to avoid duplicate provisioning your issuer app uses this information to uniquely identify the user and the samsung wallet app on a particular device wallet device management id, device id, and wallet user id note to get wallet information of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class fun getwalletinfo list<string> keys, statuslistener callback the following example demonstrates how to use it // set the serviceid assigned by the samsung pay developers portal during service creation val serviceid = "sampleserviceid" val bundle = bundle bundle putstring samsungpay extra_issuer_name, "issuer name" bundle putstring samsungpay partner_service_type, servicetype app2app tostring val pinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, pinfo // add bundle keys to get wallet information from samsung pay // this information can be delivered to the partner server for an eligibility check val keys = arraylist<string> keys add samsungpay wallet_user_id keys add samsungpay device_id samsungpay getwalletinfo keys, object statuslistener{ override fun onsuccess status int, walletdata bundle { // log d tag, "dowalletinfo onsuccess callback is called" ; // for visa, deviceid can be set to "clientdeviceid" as defined by visa val deviceid = walletdata getstring samsungpay device_id // for visa, walletuserid can be set to "clientwalletaccountid" as defined by visa val walletuserid = walletdata getstring samsungpay wallet_user_id } override fun onfail errorcode int, errordata bundle? { log e tag, "onfail callback is called, errorcode " + errorcode ; // check the extra error codes in the errordata bundle for all the reasons in // samsungpay extra_error_reason, when provided } } 3 1 21 adding a card to samsung pay your issuer app calls the 'addcard ' api method of cardmanager to add a card to samsung wallet by providing the required card details, your app can make it convenient and easy for users to add their bank-issued debit/credit cards to samsung wallet directly from your app without additional steps, like switching between apps note if you want to add a card to samsung pay watch, you have to use the 'watchmanager' class instead of the cardmanager class for most issuers, getwalletinfo suffices for requesting current wallet information the response from samsung wallet tells the issuer app whether or not the user’s card has already been added to samsung wallet or is ineligible for provisioning it is therefore recommended that you call getwalletinfo before displaying the add to samsung pay button if the card is eligible, display the “add” button and, if the user taps it, call addcard important remember to obtain the governing issuer implementation guide s and specifications from the respective card network and implement each network’s required handling in your partner app and server the 'addcard ' result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcard api method in your issuer app val cardtype = card card_type_credit val tokenizationprovider string = addcardinfo provider_abcd // samsung pay does not provide detailed payload information; generate the provisioning payload in // accordance with your card network specifications val testpayload = "thisistestpayloadcardinfo1234567890" //bin bank identification number can be set to issuerid it is mandatory for some card network val issuerid = "123456" val carddetail = bundle carddetail putstring extra_provision_payload, testpayload carddetail putstring extra_issuer_id, issuerid val addcardinfo = addcardinfo cardtype, tokenizationprovider, carddetail cardmanager addcard addcardinfo, object addcardlistener { override fun onsuccess status int, card card? { log d tag, "onsuccess callback is called" ; } override fun onfail errorcode int, errordata bundle? { log d tag, "onfail callback is called" ; // check some extra error codes in the errordata bundle // such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } override fun onprogress currentcount int, totalcount int, bundledata bundle? { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } 3 1 22 adding a co-badge card to samsung pay co-badge payment cards combine two payment brands/networks to add a co-badge card through push provisioning, you must provide two different card network details one for the primary card network and another for the secondary card network issuer app calls the addcobadgecard api method of cardmanager to add a co-badge card to samsung pay in most cases, calling getwalletinfo will suffice to request current wallet information the response from samsung pay indicates whether the user's co-badge card has already been added to samsung pay or is ineligible for provisioning therefore, it is advisable to call getwalletinfo before displaying the add to samsung pay button if the co-badge card is eligible, display the "add" button and, upon user tapping, call addcobadgecard important please remember to refer to the relevant issuer implementation guide s and specifications provided by each card network and ensure that your partner app and server adhere to their specific requirements the addcobadgecard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcobadgecard api method in your issuer app notesamsung pay does not provide detailed payload information; generate the provisioning payload in accordance with your card networks specifications string cardtype = card card_type_credit; string primarytokenizationprovider = addcardinfo provider_abcd; //provide your primary card network payload string testprimarypayload = "thisistestprimarypayloadcardinfo1234567890"; string secondarytokenizationprovider = addcardinfo provider_efgh; //provide your secondary card network payload string testsecondarypayload = "thisistestsecondarypayloadcardinfo1234567890"; bundle primarycarddetail = new bundle ; primarycarddetail putstring addcardinfo extra_provision_payload, testprimarypayload ; addcardinfo primaryaddcardinfo = new addcardinfo cardtype, primarytokenizationprovider, primarycarddetail ; bundle secondarycarddetail = new bundle ; secondarycarddetail putstring addcardinfo extra_provision_payload, testsecondarypayload ; addcardinfo secondaryaddcardinfo = new addcardinfo cardtype, secondarytokenizationprovider, secondarycarddetail ; cardmanager addcobadgecard primaryaddcardinfo, secondaryaddcardinfo, new addcardlistener { @override public void onsuccess int status, card card { log d tag, "onsuccess callback is called" ; } @override public void onfail int error, bundle errordata { log d tag, "onfail callback is called" ; check some extra error codes in the errordata bundle such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } @override public void onprogress int currentcount, int totalcount, bundle bundledata { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } ; 3 1 23 sample applications sample apps, use cases, and ux strategies are included here to aid you in understanding the sdk and implementing it in your application sample source code and apks can be downloaded from download section sample merchant app included with the samsung pay sdk to demonstrate its features, the sample merchant app shows you how to implement the payment sheet’s dynamic controls to leverage additional customer order and payment data and/or create a more custom ui look and feel the following payment sheet controls are available addresscontrol plaintextcontrol amountboxcontrol spinnercontrol controls are applied to suit a particular purpose or need for example, displaying a promotion notice in the payment sheet using the plaintextcontrol applying an addresscontrol this control is used to display the billing or shipping address on the payment sheet based on samsung pay’s my info user profile or addresses provided by your merchant app during the transaction request when creating the control, controlld and sheetitemtype are needed to distinguish the billing address from the shipping address otherwise, your merchant app sets the following properties address title – displays a merchant-defined title on the payment sheet if empty, the default title such as “billing address” is displayed address – provides various methods to retrieve address details the merchant app can retrieve the phone number using the 'getphonenumber' method of 'customsheetpaymentinfo' address starting from api level 1 5, the addressee’s email address has also been added retrieve the email address using 'getemail' you can also set a display option for the shipping address with 'setdisplayoption' for more information, see the samsung pay sdk-api reference javadoc and the sample code included with the samsung pay sdk sheetupdatedlistener – used to capture the response from the samsung wallet app; merchant app must deliver to the samsung wallet app an amountboxcontrol to display payment information on a custom payment sheet when the onresult callback is called, the updatesheet method must also be called to update the current payment sheet errorcode – used for containing error codes directly related to the address the workflows for billingaddresscontrol the workflow for shippingaddresscontrol the following sample code demonstrates use of addresscontrol on the payment sheet fun makebillingaddresscontrol addresscontrol { val billingaddresscontrol = if !iszipcodeonly { // for billing address addresscontrol billing_address_id, sheetitemtype billing_address billingaddresscontrol addresstitle = "billing address" } else { /* * for billing address with zip code only * since api level 2 19, sheetitemtype zip_only_address * for us country only */ addresscontrol billing_address_id, sheetitemtype zip_only_address billingaddresscontrol addresstitle = "zip code" } //this callback is received when controls are updated billingaddresscontrol sheetupdatedlistener = sheetupdatedlistener return billingaddresscontrol } //listener for billing or zip code only billing address fun sheetupdatedlistener sheetupdatedlistener { return sheetupdatedlistener { updatedcontrolid string, customsheet customsheet -> log d tag, "onresult billingaddresscontrol updatedcontrolid $updatedcontrolid" val addresscontrol = customsheet getsheetcontrol updatedcontrolid as addresscontrol val billaddress = addresscontrol address //validate only zipcode or billing address and set errorcode if needed if addresscontrol sheetitem sheetitemtype == sheetitemtype zip_only_address { val errorcode int = validatezipcodebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } else { val errorcode = validatebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } // update transaction values val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 amountboxcontrol updatevalue product_tax_id, 50 0 amountboxcontrol updatevalue product_shipping_id, 10 0 amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol try { // call updatesheet for the full amountboxcontrol; mandatory paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } } // for shipping address fun makeshippingaddresscontrol addresscontrol { val shippingaddresscontrol = addresscontrol shipping_address_id, sheetitemtype shipping_address shippingaddresscontrol addresstitle = "shipping address" val shippingaddress = customsheetpaymentinfo address builde setaddressee "name" setaddressline1 "addline1" setaddressline2 "addline2" setcity "city" setstate "state" setcountrycode "usa" setpostalcode "zip" setphonenumber "555-123-1234" setemail "user@samsung com" build shippingaddresscontrol address = shippingaddress /* * set address display option on custom payment sheet * if displayoption is not set, then default addresscontrol is displayed on custom payment sheet * the possible values are combination of below constants * {display_option_addressee} * {display_option_address} * {display_option_phone_number} * {display_option_email} */ var displayoption_val = addressconstants display_option_addressee // addressee is mandatory displayoption_val += addressconstants display_option_address displayoption_val += addressconstants display_option_phone_number displayoption_val += addressconstants display_option_email shippingaddresscontrol displayoption = displayoption_val return shippingaddresscontrol } here’s how these controls display on a custom payment sheet billing address control zip code billing address control shipping address control applying a plaintextcontrol this control is used for displaying a title with two lines of text or a single line of text without a title on the payment sheet when allocating this control, a controlid is needed the merchant app sets both the title, as applicable, and the text diagrammed below is the flow between your merchant app and samsung pay plaintextcontrol flow the merchant app code invoking this class would look something like the following fun makeplaintextcontrol plaintextcontrol { val plaintextcontrol = plaintextcontrol "exampleplaintextcontrolid" plaintextcontrol settext "plain text [example]", "this is example of plaintextcontrol" return plaintextcontrol } and this is how it displays on the custom payment sheet applying an amountboxcontrol amountboxcontrol is used for displaying purchase amount information on the payment sheet it requires a controlid and a currencycode, and consists of item s and amounttotal, defined as follows and diagrammed on the next page item – consists of id, title, price, and extraprice if there is an extraprice in amountboxcontrol, its text is displayed on the payment sheet even though there is an actual numerical price value if there is no extraprice, then currencycode with the price value is displayed amounttotal – consists of price and displayoption the displayoption allows predefined strings only your merchant app can set the text to “estimated amount”, “amount pending”, “pending”, “free”, and so forth the ui format for the string is different for each option note the setamounttotal api may accept strings that are not predefined as an argument, but it generates an invalid parameter condition or returns an error code in such cases for details, see the javadoc samsung pay sdk-api reference, available in the documentation folder of your downloaded sdk package here’s a coding example to demonstrate the use of amountboxcontrol in a payment sheet fun makeamountcontrol amountboxcontrol { val amountboxcontrol = amountboxcontrol amount_control_id, "usd" amountboxcontrol additem product_item_id, "item", 1000 0, "" amountboxcontrol additem product_tax_id, "tax", 50 0, "" amountboxcontrol additem product_shipping_id, "shipping", 10 0, "" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only amountboxcontrol additem 3, product_fuel_id, "fuel", 0 0, "pending" return amountboxcontrol } the merchant app can also add new items using the 'additem' method of 'amountcontrolbox' during callback important your merchant app needs to call the updatevalue item_id method of amountboxcontrol to update each amount item then call customsheet updatecontrol to make the changes take effect in customsheet eventually, paymentmanager updatesheet 'customsheet' must be called to let samsung pay know that no further action is pending in the merchant app when the custom sheet is updated, the merchant can add new items to amountboxcontrol for example, if the user selects a specific card in the payment sheet which the merchant offers, a discount item can be added via the updatesheet // example for adding new item while updating values val amount = sheet getsheetcontroll "id_amount" amount updatevalue "itemid", 900 0 amount updatevalue "taxid", 50 0 amount updatevalue "shippingid", 10 0 amount updatevalue "fuelid", 0 0 // add “discount” item amount additem 4, "discountid", "discount", -60 0, "" amount setamounttotal 1000 0, amountconstants format_total_price_only sheet updatecontrol amount // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet sheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } applying the spinnercontrol this control is used for displaying spinner options on a payment sheet when creating the control, controlid, title, and sheetitemtype are needed to distinguish between the types of spinner to be displayed your merchant app sets the following properties with spinnercontrol title – the merchant-defined spinner title to appear the payment sheet sheetitemtype – provides various types of spinner a shipping_method_spinner and an installment_spinner are the two types of spinner available as of api level 1 6 note shipping_method_spinner can be used when the shipping address comes from the samsung wallet app; i e , when the customsheetpaymentinfo addressinpaymentsheet option is set to need_billing_and_shipping or need_ shipping_spay when the shipping address is provided by the merchant app send_shipping or need_billing_ send_shipping , it is not changeable in the payment sheet the shipping fee if applied must be pre-calculated on the merchant app side here’s an example of constructing a spinnercontrol within your merchant app // construct spinnercontrol for shipping method val spinnercontrol = spinnercontrol shippingmethod_spinner_id, "shipping method ", sheetitemtype shipping_method_spinner // let the user can select one shipping method option on the payment sheet spinnercontrol additem "shipping_method_1", getstring android r string standard_shipping_free spinnercontrol additem "shipping_method_2", getstring android r string twoday_shipping spinnercontrol additem "shipping_method_3", getstring android r string oneday_shipping spinnercontrol selecteditemid = "shipping_method_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol when spinnercontrol selecteditemid { "shipping_method_1" -> amountboxcontrol updatevalue product_shipping_id, 10 0 "shipping_method_2" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 1 "shipping_method_3" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 2 else -> amountboxcontrol updatevalue product_shipping_id, 10 0 } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_shipping_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } // construct spinnercontrol for installment plan val spinnercontrol = spinnercontrol installment_spinner_id, "installment", sheetitemtype installment_spinner spinnercontrol additem "installment_1", "1 month without interest" spinnercontrol additem "installment_2", "2 months with 2% monthly interest" spinnercontrol additem "installment_3", "3 months with 2 2% monthly interest" spinnercontrol selecteditemid = "installment_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol val totalinterest = 0 0 when spinnercontrol selecteditemid { "installment1" -> amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment2" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment3" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest else -> amountboxcontrol updatevalue product_total_interest_id, totalinterest } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_total_interest_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } update sheet with custom error message to display a custom error message on the payment sheet, use updatesheet with customerrormessage fun updatesheet sheet customsheet, errorcode int, customerrormessage string this api method is an extended version of the existing updatesheet sheet method which gives the merchant the ability to display a custom error message in the payment sheet’s authentication area it can be used to inform the user of any foreseen error scenarios encountered // update sheet with custom_messsage error code paymentmanager updatesheet customsheet, paymentmanager custom_message,"phone number entered is not valid please change your phone number " sample issuer app the samsung pay sdk also provides a sample issuer app to showcase samsung pay sdk features issuer app can add card to samsung wallet by selecting specific token service provider tsp from the dropdown menu to add cobadge card you need to select primary and secondary token service providers tsp from the dropdown menus for more information, refer to the samsung pay sdk api reference and sample code 3 1 24 api references
Develop Mobile Samsung eSE SDK
docsamsung ese sdk overview description of secure element a secure element is a tamper-resistant platform typically a one chip secure microcontroller capable of securely hosting applications and their confidential and cryptographic data such as cryptographic keys and sensitive data in accordance with the rules and security requirements set by well-identified trusted authorities there are various form factors of secure element subscriber identity module sim / universal integrated circuit card uicc embedded secure element microsd secure elements offers a separate hardware-backed security so that sensitive information or transaction can be performed independently from other processors ap, cp, cpu, and etc due to this, secure elements have been supporting immense needs of various industries that require additional protections, such as payment cards, e-id cards, health insurance cards, driver licenses, digital car keys, and door lock keys embedded secure element ese chips on samsung devices have been certified by authorities such as globalplatform, emvco and common criteria all of them have at least an eal5+ evaluation assurance level , which can provide equal or higher security level as an electronic passport can samsung is ready to open ese for service providers who wants to utilize our products our ese also supports industry standards such as javacard and globalplatform card specifications use cases the following are some use cases for ese on samsung devices transits payments digital key access door key, car key, and etc identification / authentication secure storage / certificate manager samsung devices with ese allow customers to use secure services in general, certain levels of security are required for services that deal with sensitive information with a highly secured samsung device, the service provider can provide their services securely to its customers samsung ese sdk samsung ese sdk provides the way for the service provider to deploy a service using ese on samsung devices it enables the service provider to manage their own service on each customer’s device it requires communication between, not only on the client application and ese, but also the server and device hence, there are a few requirements for the service provider to proceed with service development you can use samsung ese sdk to deploy a service on a customer’s device communicate with ese using a client application manage service provider’s own storage within ese requirements for the service provider applet development resides within ese tsm trusted service manager server service provider can choose one of the options below service provider tsm server samsung tsm tsm-less how to request partnership to use the samsung ese sdk, you must become a samsung partner to request partnership open the partnership request form if prompted, log in to your samsung account if you do not already have a samsung account, create one enter your company and developer information your name, email address, and country are filled in for you enter information about the application for which you are applying to use the samsung ese sdk provide the name and description for the application, and attach documents that detail the application features and use cases when you are ready to submit the request, click “submit ” your partnership request will be reviewed when it is approved, you will receive confirmation letter nda non-disclosure agreement shall be established between samsung and service provider after confirmation letter samsung ese sdk can be accessed under nda faq q 01 is there a device list for ese eligibility? a the device list will be provided after an nda non-disclosure agreement has been completed between the service provider and samsung q 02 do i need to have/develop an javacard applet for service? a yes, samsung will only provide certain storage within ese the service provider shall prepare an applet itself to be loaded / installed within ese q 03 who can apply for partnership? a samsung intends to provide service opportunities for 3rd parties who can manage secure service stable for a valuable customer however individual developer can't apply partnership for samsung ese sdk
Develop Samsung Pay
doc3 2 samsung pay sdk flutter plugin 3 2 1 flutter plugin overview the samsung pay sdk flutter plugin allows developers to integrate select features of samsung wallet into flutter-based android apps running on samsung devices it acts as a bridge between the flutter environment and the native samsung pay sdk, enabling secure and seamless payments through samsung pay purpose the primary aim of this plugin is to bring samsung pay sdk functionality into the flutter ecosystem—making it easier for developers to integrate mobile wallet capabilities without deep native android coding supported operations the samsung pay sdk flutter plugin supports the following major operations in-app payment lets users pay for goods and services within a partner app using samsung wallet push provisioning enables users to add bank cards directly to samsung wallet from the issuer’s app by providing required card details what’s included in the plugin package to support seamless integration, the flutter plugin package typically includes samsung pay sdk flutter plugin dart interface, platform channel code, and native android sdk wrappers java/kotlin contains all classes, interfaces, and native libraries needed to communicate with samsung pay services api reference documentation detailed descriptions of each supported api method and parameters usage guidance for implementing features like getsamsungpaystatus , activatesamsungpay , and transaction callbacks sample merchant & issuer apps complete working examples of how to accept in-app payments push provision a card into samsung wallet handle callback responses and errors demonstrates full implementation using flutter ui and platform logic benefits of using the flutter plugin cross-platform development with native payment features faster time to market by avoiding full native sdk integration pre-built sample apps and apis to accelerate onboarding seamless integration with samsung’s trusted payment environment 3 2 2 samsung pay sdk flutter plugin architecture the following diagram illustrates the high-level architecture and core interactions between the samsung pay sdk flutter plugin and a partner app at this level, the plugin enables partner apps to leverage samsung pay for key operations such as push provisioning for issuers and in-app payments for merchants key components and roles partner app - a flutter-based app developed by a merchant or issuer it integrates samsung pay features to support in-app or online payments merchants push provisioning and management issuers samsung pay sdk flutter plugin - the plugin layer embedded in the partner app it enables direct communication between the flutter app and samsung pay services on the device by bridging native sdk apis samsung pay app - the native samsung pay samsung wallet application on the user’s device it securely handles payment authorization, tokenization, card management, and transaction ui financial network - the back-end payment ecosystem, including payment gateways pgs acquirers and issuers card associations e g , visa, mastercard these entities work together to process transactions initiated through samsung pay under merchant agreements 3 2 3 setting up flutter plugin environment establishing a stable and well-configured development environment is essential for the successful integration of the samsung pay sdk flutter plugin into your partner app the following prerequisites and recommendations will help ensure a smooth setup and implementation prerequisites & requirements platform compatibility ensure your app is targeting android devices that support samsung pay for detailed android system requirements, refer to the [samsung pay android sdk overview] service registration to use the plugin, merchants and issuers must first register a service through the samsung pay developer portal this includes obtaining a valid service id sid and service type required for integration refer to the [service registration guide] for step-by-step instructions download the flutter plugin obtain the official samsung pay sdk flutter plugin package, which includes plugin libraries and dependencies api documentation sample flutter apps for merchant and issuer use cases the plugin has the following directory structure folder contents docs api reference documentation libs samsungpaysdkflutter_v1 03 00 flutter plugin – contains the samsung pay apis to be used by your partner app samples sample apps 3 2 4 integrate samsung pay sdk flutter plugin be sure to do the following before attempting to use the plugin if not already part of your environment, download and install an ide android studio is recommended download the samsung pay sdk flutter plugin configure your ide to integrate the samsung pay sdk flutter plugin with your partner app go to pubspec yaml and enter the following dependency dependencies samsung_pay_sdk_flutter path plugin_directory_path\ [note] if your plugin path is c \users\username\downloads, the dependency will be like below dependencies samsung_pay_sdk_flutter path c \users\username\downloads\ for android proguard rules and dexguard, please check the android sdk overview 3 2 5 common flow once the setup is complete, you're ready to start integrating samsung pay features into your partner app using the samsung pay sdk flutter plugin the plugin provides apis for the following core functionalities supported operations via apis check samsung wallet status activate the samsung wallet app update the samsung wallet app checking samsung wallet status the first step is to create a samsungpaysdkflutter instance this instance checks whether samsung wallet is supported and ready to use on the user’s device based on the result, your app will determine whether to display the samsung pay button for both merchant payments and issuer push provisioning important the partner app must initialize partnerinfo, passing the serviceid and servicetype these are assigned in the samsung pay developers portal and are used for partner verification blocked list checking version control between the plugin and the samsung wallet app string serviceid; map<string,dynamic> data; static final samsungpaysdkflutterplugin = samsungpaysdkflutter partnerinfo serviceid 'partner_app_service_id', data {spaysdk partner_service_type servicetype app2app name tostring } ; after setting partnerinfo, your partner app can now call getsamsungpaystatus this method of the samsungpay class must be called before using any other feature in the samsung pay sdk flutter plugin future<void> getsamsungpaystatus statuslistener? statuslistener the result is delivered to statuslistener and provides onsucccess and onfail events check the android sdk common flow for more details the following sample code shows how to use the getsamsungpaystatus api method myhomepage samsungpaysdkflutterplugin getsamsungpaystatus statuslistener onsuccess status, bundle async { showstatus status, bundle ; }, onfail errorcode, bundle { showerror errorcode, bundle ; } ; activating the samsung wallet app the samsungpaysdkflutter class provides the following api method to activate the samsung wallet app on a device future<void> activatesamsungpay activatesamsungpay is called to activate the samsung wallet app on the same device on which the partner app is running first, the partner app must check the samsung wallet status with a getsamsungpaystatus call if the status is spay_not_ready and extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to user, then call activatesamsungpay to launch the samsung wallet app so the user can sign in here’s an example of how to code this samsungpaysdkflutterplugin activatesamsungpay ; updating the samsung wallet app the samsungpaysdkflutter class provides the following api method to update the samsung wallet app on the device future<void> gotoupdatepage gotoupdatepage is called to update samsung wallet app on the same device on which the partner app is running as with all api calls, the partner app must first check the samsung wallet status with getsamsungpaystatus if this returns spay_not_ready and extra_error_reason is error_spay_app_need_to_update, then the partner app needs to display an appropriate message to the user and call gotoupdatepage , which launches the samsung wallet update page the following code sample reflects how to update samsung wallet samsungpaysdkflutterplugin gotoupdatepage ; 3 2 6 in-app online merchant applications can initiate secure in-app payments by interacting with the samsung pay sdk flutter plugin this process allows apps to display a custom payment sheet, retrieve card information, and handle payment requests smoothly within the app the following functionalities are ready to perform a variety of payment operations checking registered/enrolled card information before displaying the samsung pay button, a partner app can query card brand information for the user’s currently enrolled payment cards in samsung wallet to determine if payment is supported with the enrolled card to query the card brand, use the requestcardinfo api method of the samsungpaysdkflutter class the merchant app does not need to set a value for it now however, before calling this method, cardinfolistener must be registered so its listener can provide onresult and onfailure events the following snippet shows how to retrieve the list of supported card brands from samsung wallet samsungpaysdkflutterplugin requestcardinfo cardinfolistener {onresult paymentcardinfo showcardlist paymentcardinfo ; }, onfailure errorcode, bundle { showerror errorcode, bundle ; } ; creating a transaction request upon successful initialization of the samsungpaysdkflutter class, the merchant app needs to create a transaction request with payment information using the custom payment sheet to initiate a payment transaction with samsung wallet’s custom payment sheet, your merchant app must populate the following mandatory fields in customsheetpaymentinfo merchant name - as it will appear in samsung wallet’s payment sheet, as well as the user's card account statement customsheet - is called when the user changes card on the custom payment sheet in samsung wallet optionally, the following fields can be added to the payment information merchant id - can be used for the merchant’s own designated purpose at its discretion unless the merchant uses an indirect pg like stripe or braintree if an indirect pg is used, this field must be set to the merchant’s payment gateway id fetched from the samsung pay developers portal order number - usually created by the merchant app via interaction with a pg this number is required for refunds and chargebacks in the case of visa cards, the value is mandatory the allowed characters are [a-z][a-z][0-9,-] and the length of the value can be up to 36 characters address - the user’s billing and/or shipping address allowed card brands - specifies card brands accepted by the merchant if no brand is specified, all brands are accepted by default if at least one brand is specified, all other card brands not specified are set to "card not supported’ on the payment sheet here’s the 'customsheetpaymentinfo' structure string? merchantid; string merchantname; string? ordernumber; addressinpaymentsheet? addressinpaymentsheet; list<brand>? allowedcardbrand; paymentcardinfo? cardinfo; bool? iscardholdernamerequired; bool? isrecurring; string? merchantcountrycode; customsheet customsheet; map<string,dynamic>? extrapaymentinfo; your merchant app sends this customsheetpaymentinfo to samsung wallet via the applicable samsung pay sdk flutter plugin api methods upon successful user authentication in direct mode, samsung wallet returns the above "payment info" structure and a result string the result string is forwarded to the pg by your merchant app to complete the transaction it will vary based on the pg you’re using the following example demonstrates how to populate customsheet in the customsheetpaymentinfo class list<brand> brandlist = []; brandlist add brand visa ; brandlist add brand mastercard ; brandlist add brand americanexpress ; customsheetpaymentinfo customsheetpaymentinfo= customsheetpaymentinfo merchantname "merchantname", customsheet customsheet ; customsheetpaymentinfo setmerchantid "123456" ; customsheetpaymentinfo setmerchantname "sample merchant" ; customsheetpaymentinfo setaddressinpaymentsheet addressinpaymentsheet need_billing_send_shipping ; customsheetpaymentinfo setcardholdernameenabled true ; customsheetpaymentinfo setrecrringenabled false ; customsheetpaymentinfo setcustomsheet customsheet ; customsheetpaymentinfo allowedcardbrand = brandlist; return customsheetpaymentinfo; requesting payment with a custom payment sheet the startinapppaywithcustomsheet method of the samsungpaysdkflutter class is applied to request payment using a custom payment sheet in samsung wallet the two methods are defined as follows startinapppaywithcustomsheet - initiates the payment request with a custom payment sheet the payment sheet persists for 5 minutes after the api is called if the time limit expires, the transaction fails updatesheet - updates the custom payment sheet if any values on the sheet are changed as of api level 1 5, a merchant app can update the custom sheet with a custom error message refer to updating sheet with custom error message when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from it, the user can select a registered card for payment and change the billing and shipping addresses, as necessary the result is delivered to customsheettransactioninfolistener, which provides the following events onsuccess - called when samsung wallet confirms payment it provides the customsheetpaymentinfo object and the paymentcredential json string customsheetpaymentinfo is used for the current transaction it contains amount, shippingaddress, merchantid, merchantname, ordernumber api methods exclusively available in the onsuccess callback comprise getpaymentcardlast4dpan – returns the last 4 digits of the user's digitized personal/primary identification number dpan getpaymentcardlast4fpan – returns the last 4 digits of the user's funding personal/primary identification number fpan getpaymentcardbrand – returns the brand of the card used for the transaction getpaymentcurrencycode – returns the iso currency code in which the transaction is valued getpaymentshippingaddress – returns the shipping/delivery address for the transaction getpaymentshippingmethod – returns the shipping method for the transaction for pgs using the direct model network tokens , the paymentcredential is a json object containing encrypted cryptogram which can be passed to the pg pgs using the indirect model gateway tokens like stripe, it is a json object containing reference card reference – a token id generated by the pg and status i e , authorized, pending, charged, or refunded refer to payment credential sample for details oncardinfoupdated - called when the user changes the payment card in this callback, updatesheet method must be called to update current payment sheet onfailure - called when the transaction fails, returns the error code and errordata bundle for the failure here’s how to call the startinapppaywithcustomsheet method of the samsungpaysdkflutter class class customsheettransactioninfolistener{ function paymentcardinfo paymentcardinfo, customsheet customsheet oncardinfoupdated; function customsheetpaymentinfo customsheetpaymentinfo, string paymentcredential, map<string, dynamic>? extrapaymentdata onsuccess; function string errorcode, map<string, dynamic> bundle onfail; customsheettransactioninfolistener {required this oncardinfoupdated, required this onsuccess, required this onfail} ; } void oncardinfoupdated cardinfo selectedcardinfo, customsheet customsheet { amountboxcontrol amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol; amountboxcontrol updatevalue product_item_id, 1000 ; amountboxcontrol updatevalue product_tax_id, 50 ; amountboxcontrol updatevalue product_shipping_id, 10 ; amountboxcontrol updatevalue product_fuel_id, 0, "pending" ; amountboxcontrol setamounttotal 1060, amountconstants format_total_price_only ; customsheet updatecontrol amountboxcontrol ; } } void startinapppaywithcustomsheet customsheetpaymentinfo customsheetpaymentinfo,customsheettransactioninfolistener? customsheettransactioninfolistener { try{ methodchannelsamsungpaysdkflutter? startinapppaywithcustomsheet customsheetpaymentinfo, customsheettransactioninfolistener ; }on platformexception catch e { print e ; } } override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle {} override fun onfailure errorcode int, errordata bundle? {} 3 2 7 push provisioning the app-to-app service, also known as push provisioning, allows issuer apps to seamlessly add payment cards to the samsung wallet on a user’s samsung device—directly from within the app—using the samsung pay sdk flutter plugin this integration enhances the user experience by eliminating the need to manually launch samsung wallet or scan physical cards requesting registered card list in the samsung wallet the getallcards method of the cardmanager class is used to request a list of all cards currently registered/enrolled in samsung wallet on the same device running the issuer’s app to succeed, the issuer app must pass valid partnerinfo to 'cardmanager' for caller verification 'cardfilter' narrows the card list returned by samsung wallet to the issuername specified please be noted that getsamsungpaystatus must be called before getallcards getallcards could not return a cards list when getsamsungpaystatus responds with a code other than spay_ready as of api level sdk version 1 4, cardfilter retrieves this information from the samsung pay developers portal certain issuers may need to register multiple issuer name s with the portal, depending on their app and/or the requirements of their token service provider tsp the getallcards parameter cardfilter matches the issuer name s specified with those registered in the portal only complete matches are returned this method is typically called when your partner app wants to check the card status it does not need to be called every time the partner app resumes therefore, you should create the card list with the 'oncreate ' method, rather than the 'onresume ' method the result of a getallcards call is delivered to getcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides the list of all filtered cards and their status card information includes cardid, cardstatus, and extra cardinfo data onfail - called when the operation fails here’s an example of how to use the 'getallcards ' api method in your issuer app samsungpaysdkflutterplugin getallcards getcardlistener onsuccess list { showcardlist list ; }, onfail errorcode, bundle { showerror errorcode, bundle ; } ; getting wallet information the samsungpay class provides the getwalletinfo api method, which is called to request wallet information from the samsung wallet app prior to calling the addcard api, when you want to avoid duplicate provisioning your issuer app uses this information to uniquely identify the user and the samsung wallet app on a particular device wallet device management id, device id, and wallet user id void getwalletinfo statuslistener? statuslistener the following example demonstrates how to use it string serviceid; spaysdk partner_service_type servicetype app2app name tostring samsungpaysdkflutter partnerinfo serviceid "", data {} ; samsungpay=samsungpay context,partnerinfo val keys = arraylist<string> keys add samsungpay wallet_dm_id keys add samsungpay device_id keys add samsungpay wallet_user_id samsungpaysdkflutterplugin getwalletinfo statuslistener onsuccess status, bundle async { val deviceid string? = walletdata getstring samsungpay device_id val walletuserid string? = walletdata getstring samsungpay wallet_user_id }, onfail errorcode, bundle { util showerror context, errorcode, bundle ; } ; adding a card to samsung wallet your issuer app calls the addcard api method of cardmanager to add a card to samsung wallet by providing the required card details, your app can make it convenient and easy for users to add their bank-issued debit/credit cards to samsung wallet directly from your app without additional steps, like switching between apps for most issuers, getwalletinfo suffices for requesting current wallet information the response from samsung wallet tells the issuer app whether or not the user’s card has already been added to samsung wallet or is ineligible for provisioning it is therefore recommended that you call getwalletinfo before displaying the add to samsung pay button if the card is eligible, display the “add” button and, if the user taps it, call addcard the addcard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcard api method in your issuer app string cardtype = walletcard card_type_credit_debit; string tokenprovider = addcardinfo provider_abcd; string testpayload = "testpayloadcardinfoforflutterplugin"; map<string, dynamic> carddetail = {}; carddetail[addcardinfo extra_provision_payload] = testpayload; var addcardinfo = addcardinfo cardtype, tokenprovider,carddetail ; myapp samsungpaysdkflutterplugin addcard addcardinfo, addcardlistener onsuccess status, card { print "success $status / data $card" ; },onfail errorcode, bundle { util showerror context, errorcode, bundle ; print "error $errorcode / data $bundle" ; },on-progress currentcount, totalcount, bundle { print "currentcount $currentcount / totalcount $totalcount / data $bundle" ; } ; adding a co-badge card to samsung pay co-badge payment cards include two payment brands or networks when adding a co-badge card using push provisioning, you need to supply the card details for both networks one as the primary and the other as the secondary issuer app calls the addcobadgecard api method of cardmanager to add a co-badge card to samsung pay in most cases, calling getwalletinfo will suffice to request current wallet information the response from samsung pay indicates whether the user's co-badge card has already been added to samsung pay or is ineligible for provisioning therefore, it is advisable to call getwalletinfo before displaying the add to samsung pay button if the co-badge card is eligible, display the "add" button and, upon user tapping, call addcobadgecard important please remember to refer to the relevant issuer implementation guide s and specifications provided by each card network and ensure that your partner app and server adhere to their specific requirements the addcobadgecard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcobadgecard api method in your issuer app note samsung pay does not provide detailed payload information; generate the provisioning payload in accordance with your card networks specifications string cardtype = walletcard card_type_credit_debit; string primarytokenprovider = addcardinfo provider_abcd; //provide your primary card network payload string testprimarypayload = "thisistestprimarypayloadcardinfo1234567890"; string secondarytokenprovider = addcardinfo provider_efgh; //provide your secondary card network payload string testsecondarypayload = "thisistestsecondarypayloadcardinfo1234567890"; map<string, dynamic> primarycarddetails={}; primarycarddetails[addcardinfo extra_provision_payload] = testprimarypayload; map<string, dynamic> secondarycarddetails={}; secondarycarddetails[addcardinfo extra_provision_payload] = testsecondarypayload; var primaryaddcardinfo = addcardinfo cardtype, primarytokenprovider, primarycarddetails ; var secondaryaddcardinfo = addcardinfo cardtype, secondarytokenprovider, secondarycarddetails ; myapp samsungpaysdkflutterplugin addcobadgecard primaryaddcardinfo, secondaryaddcardinfo, addcardlistener onsuccess status, card { print "success $status / data $card" ; },onfail errorcode, bundle { print "error $errorcode / data $bundle" ; },on-progress currentcount, totalcount, bundle { print "currentcount $currentcount / totalcount $totalcount / data $bundle" ; } ; 3 2 8 sample apps sample applications sample apps with ux strategies are included here to aid you in understanding the sdk and implementing it in your application sample source code and apks can be downloaded from download section sample merchant app the sample merchant app shows you how to implement the payment sheet’s dynamic controls to leverage additional customer order and payment data and/or create a more custom ui look and feel the following payment sheet controls are available addresscontrol plaintextcontrol amountboxcontrol spinnercontrol controls are applied to suit a particular purpose or need check this android sdk sample merchant app for details sample issuer app the samsung pay sdk flutter plugin also provides a sample issuer app to showcase samsung pay sdk features for more information, refer to the javadoc samsung pay sdk api reference and sample code
events mobile, iot, ai, ar/vr/xr
blogthe first day of #sdc2017 is in the books and what a day it was. a sold out crowd of developers, creators, designers, partners and sponsors gathered at the moscone center here in downtown san francisco to hear about how samsung is unifying its iot services under smartthings, what the next-generation of bixby 2.0 looks like and how a google partnership will create advanced ar capabilities on more galaxy smartphones. (oh yeah – we’re getting pretty excited for stan lee and rain paris tomorrow.) in a very busy day, these were the highlights: the internet of things for everyone is announced during the kickoff keynote speech, samsung announced it is combining its existing iot services—smartthings, samsung connect, and artik—into one unified iot platform: smartthings cloud. it will provide a single, powerful cloud-based hub that can connect and control iot-enabled products and services from a unified touchpoint. smartthings cloud will build one of the world’s largest iot ecosystems, and will provide the infrastructure for a connected consumer experience that is innovative, versatile and holistic. yes! merging all @samsung #iot services under @smartthings platform, sez @samsungmobile pres dj koh. #sdc2017 pic.twitter.com/nalww41zil— mikefeibus - be well, people! (@mikefeibus) october 18, 2017 with it, devs everywhere will have access to one cloud api across all smartthings-compatible products to build connected solutions and bring them to more people. it will also provide secure interoperability and services for businesses developing commercial and industrial iot solutions. an even smarter bixby next, samsung announced it is shifting intelligence beyond devices and into a ubiquitous, personal and open ecosystem with the introduction of bixby 2.0 with sdk, integrated with viv technologies. bixby 2.0 will be available on a variety of devices including samsung smart tv and the family hub refrigerator. with it, bixby will sit at the center of consumers’ intelligent ecosystem. bixby 2.0 will introduce deep linking capabilities, and enhanced natural language abilities to better recognize individual users and create a predictive, personalized experience that better anticipate needs. faas? fridge as a service. #bixby comes to #familyhub on @samsung appliances. #iot #sdc2017 pic.twitter.com/rpzfvjvuil— mikefeibus - be well, people! (@mikefeibus) october 18, 2017 in order to build this faster, easier and more powerful intelligent assistant platform, samsung will provide the tools to bring bixby 2.0 into a wider number of applications and services. the bixby sdk will be available to select developers and through a private beta program, with general availability coming in 2018. samsung also demonstrated project ambience, a small dongle that can be applied into a wide variety of ordinary objects, allowing them to seamlessly connect, and create a ubiquitous bixby experience. project ambience: samsung has a dongle prototype that lets you turn any speaker into a smart speaker #sdc2017 pic.twitter.com/xhjyyguelt— karissa bell (@karissabe) october 18, 2017 a new venture into ar finally, samsung announced that in order to unlock new realities such as vr, the company is committed to continuing to advance technologies in ar. through a partnership with google, developers will be able to use the arcore sdk to bring ar to millions of samsung consumers on the samsung galaxy s8, galaxy s8+ and galaxy note8. this strategic partnership with google offers new business opportunities for developers, and a new platform for creating immersive new experiences for consumers. ar is the next reality #sdc2017 @samsungdevus @samsung pic.twitter.com/4zhgfrdvi7— pranav mistry (@pranavmistry) october 18, 2017 other highlights in a day full of them include the sdk bar, where devs learned about the latest/greatest sdks and apis to add to their toolboxes. there were many to discover, but a few of the really popular ones included the following: the bixby home card sdk, which allows devs to get the right information to their app service users at the right time. card users can interact with card content that is automatically kept up-to-date and with richer content. the gear apps – tizen sdk which helps devs design and develop standalone and companion apps for samsung gear s2 and s3 wearable devices (which combined for 19% market share in q1). the smartthings api, which allows device makers, service providers, telco partners and devs to create automations and cloud-to-cloud device integrations to build new iot solutions. the samsung artik smart iot platform, which brings hardware modules and cloud services together to speed up your time to market. the smart home cloud api, which provides methods to control and monitor samsung smart home devices. through this smart home control service, a partner’s app can connect with various devices and provide enhanced services. and that was just day one. day two will bring more exciting announcements and dev insights. watch for the second installment of the ‘the dev discourse – a daily roundup from #sdc2017’ for more tomorrow, and of course, follow us on twitter @samsung_dev and join the conversation using #sdc2017.
Samsung Developer Program
featured
bloghave you heard the news about samsung galaxy unpacked 2023, which was announced on the samsung developers portal and global channels? if you’ve received an email invitation to galaxy unpacked 2023, scheduled for july 26, add it to samsung wallet for a quick and convenient way to enter the event hall. the "add to samsung wallet" service enables samsung device users to clip and save a variety of digital content, such as tickets, coupons, boarding passes, membership cards, to samsung wallet for easy access. “add to samsung wallet” allows them to do this conveniently without having to leave the other online channels they are using, such as an application, website, email, or sms/mms message. smart ways to use "add to samsung wallet" 1. add your galaxy unpacked 2023 invitation on july 26, expect new, wonderful, and innovative android tablets, smart watches, and the most anticipated of all, 5th-generation foldable phones, to be revealed at galaxy unpacked 2023. you can also attend galaxy unpacked remotely by watching the real-time live stream on the samsung electronics website and youtube channel. try adding the invitation and entrance ticket for galaxy unpacked 2023 to samsung wallet for ease and convenience. open the email invitation on your galaxy mobile device and tap "add to samsung wallet" to add your ticket. 2. add other event tickets “add to samsung wallet” also supports different kinds of tickets, such as to movies, sports events, and concerts. the related apis allow you to implement the feature for your service, checking whether the user’s device supports samsung wallet and if so, enabling the "add to samsung wallet" button. for example, a tourist in france can add their tickets to exhibitions at the atelier des lumières art museum in paris and to the bassins de lumières in bordeaux to samsung wallet using the "add to samsung wallet" button (provided by splio). 3. add content from other services “add to samsung wallet” is not only for tickets! the "add to samsung wallet" feature also works with other content issued by our partners, such as boarding passes, coupons and membership cards: • add or register your boarding pass to samsung wallet to get push notifications for your boarding time and speed through the boarding process. • add coupons collected from various channels, including sms, mms and email, to samsung wallet. you can receive notifications and keep track of their validity. to learn more, see samsung wallet. special features for event tickets in samsung wallet • optional policy to prevent misuse of tickets • group ticket layout that presents multiple barcodes or qr codes in a single ticket • batch update the status for all tickets, for example, when an event is canceled or postponed; this feature requires the partner to share the relevant information. • provide up to 2 barcodes or qr codes for extra services at your event, such as coupons for snacks or parking, in addition to the barcode or qr code for the ticket itself • push notifications sent 1 hour before the event begins integrate "add to samsung wallet" for your event tickets for a detailed description of the registration process, development specifications, and testing tools for integrating “add to samsung wallet” to your service, go to the samsung wallet partner portal (english language links below). the partner portal contains tutorials that walk you through the integration process step-by-step. step 1. register as a partner at the samsung wallet partner portal https://developer.samsung.com/wallet/onboarding.html step 2. create and manage samsung wallet cards https://developer.samsung.com/wallet/manage.html step 3. integrate “add to samsung wallet” to your service https://developer.samsung.com/wallet/api/overview.html if you are in a country where the event ticket menu is not supported on galaxy devices, contact us through developer support and we will help you as quickly as possible.
Hye-In Min
We use cookies to improve your experience on our website and to show you relevant advertising. Manage you settings for our cookies below.
These cookies are essential as they enable you to move around the website. This category cannot be disabled.
These cookies collect information about how you use our website. for example which pages you visit most often. All information these cookies collect is used to improve how the website works.
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and tailor the website to provide enhanced features and content for you.
These cookies gather information about your browser habits. They remember that you've visited our website and share this information with other organizations such as advertisers.
You have successfully updated your cookie preferences.