Overview
The Card Reader module decodes the card data when read through a card reader attachment. Currently this is available only on Symbol Technologies devices.Only the foreground application is given access to the card reader hardware, when an application is sent to the background its state will be saved and it will automatically relinquish control of the card reader. When brought back to the foreground, an application previously using the card reader will have its previous configuration (eg. pinTimeout) reapplied to the card reader automatically.
Enabling the API
There are two methods of enabling the CardReader API:
- Include all ebapi modules
- Include only the required API modules
For either of these methods, you'll need to include files from the /Enterprise Browser/JavaScript Files/Enterprise Browser
directory on the computer that you installed the Enterprise Browser.
Include all JS API modules
To include all JS APIs, copy the ebapi-modules.js file to a location accessible by the app's files and include a reference to the JavaScript file in the app's HTML. For instance, to include the modules file in the app's index.html
, copy the file to the same directory as that index.html
and add the following line to the HTML's HEAD section:
<script type="text/javascript" charset="utf-8" src="ebapi-modules.js"></script>
Note: that the pathing for this file is relative to the current page.
This will define the EB class within the page. Any page you need to use the modules will need to have the .js file included in this fashion.
Include only the required modules
To include single APIs, you must first include the ebapi.js
in your HTML as well as the API file you want to use. For instance, to use the CardReader API, I would add the following code to my HTML file(s), assuming the API files have been copied to the same directory as the HTML.
<script type="text/javascript" charset="utf-8" src="ebapi.js"></script>
<script type="text/javascript" charset="utf-8" src="eb.cardreader.js"></script>
The ebapi.js file is necessary for all single API inclusions.
Methods
close()
Closes the card reader.
Parameters
- callback : CallBackHandler
Returns
Synchronous Return:
- Void
Platforms
- Android
- Windows Mobile
- Windows CE
- Zebra Devices Only
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.close()
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.close()
enumerate()
Enumerates all the available card readers.
Parameters
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: ARRAY
- cardreaderArray : SELF_INSTANCE: EB.CardReader
Returns
Synchronous Return:
- ARRAY : Array of Card reader objects.
- cardreaderArray : SELF_INSTANCE: EB.CardReader
- cardreaderArray : SELF_INSTANCE: EB.CardReader
Platforms
- Android
- Windows Mobile
Method Access:
- Class Method: This method can only be accessed via the API class object.
EB.CardReader.enumerate()
getAllProperties()
This method will return all of object/value pairs for the propertyNames of the API class.
Parameters
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: HASH
- : STRING
Returns
Synchronous Return:
- HASH : Map of all available properties
- : STRING
- : STRING
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.getAllProperties()
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.getAllProperties()
getDefault()
This method will return an object that represents the default instance of the API Class. For example Camera.getDefault will return a Camera object that represents the default camera.
Parameters
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: SELF_INSTANCE
Returns
Synchronous Return:
- SELF_INSTANCE : Default object of Module.
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Class Method: This method can only be accessed via the API class object.
EB.CardReader.getDefault()
getProperties(ARRAY arrayofNames)
This method will return a set of object/value pairs for the list of the propertyName that is passed in. The propertyNames must be a valid property of the API class.
Parameters
- arrayofNames : ARRAY
List of properties I want to know about
- Object : STRING
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: HASH
- : STRING
Returns
Synchronous Return:
- HASH : Map of properties I want to know about
- : STRING
- : STRING
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.getProperties(ARRAY arrayofNames)
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.getProperties(ARRAY arrayofNames)
getProperty(STRING propertyName)
This method will return the value of the propertyName that is passed in. The propertyName must be a valid property of the API class.
Parameters
- propertyName : STRING
The property to return info about.
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: STRING
Returns
Synchronous Return:
- STRING : The property to return info about.
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.getProperty(STRING propertyName)
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.getProperty(STRING propertyName)
open()
Opens the card reader.
Parameters
- callback : CallBackHandler
Callback
Async Callback Returning Parameters: HASH
- data : STRING
Data read by the card reader. This may be card data, the PAN data extracted from the card data, encrypted PIN block data, or a message. In case of an ISO/ABA card [eg: a financial card], data is encrypted. For other cards, data is in the clear.
- mode : STRING
Describes the data. This will be either: 'CR','ENCDATA','PAN', or 'MESSAGE'. This equates to card data, encrypted PIN block data, PAN data, or a message, respectively.
- encryption : BOOLEAN
This provides the information regarding the card reader head configuration. Available only on Android.
- rawData : STRING
This is the raw data read by the card reader from all the tracks. Available only on Android and the value is in HEX format.
- track1 : STRING
The track1 clear/masked data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track1Status value returned is true.
- track2 : STRING
The track2 clear/masked data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track2Status value returned is true.
- track3 : STRING
The track3 clear/masked data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track3Status value returned is true.
- track1Status : BOOLEAN
The status of the track1 clear/masked data read by the card reader. Available only on Android.
- track2Status : BOOLEAN
The status of the track2 clear/masked data read by the card reader. Available only on Android.
- track3Status : BOOLEAN
The status of the track3 clear/masked data read by the card reader. Available only on Android.
- track1Encrypted : STRING
The track1 encrypted data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track1EncryptedStatus value returned is true.
- track2Encrypted : STRING
The track2 encrypted data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track2EncryptedStatus value returned is true.
- track3Encrypted : STRING
The track3 encrypted data read by the card reader. Available only on Android and the value is in HEX format. This value should be used only when the track3EncryptedStatus value returned is true.
- track1EncryptedStatus : BOOLEAN
The status of the track1 encrypted data read by the card reader. Available only on Android.
- track2EncryptedStatus : BOOLEAN
The status of the track2 encrypted data read by the card reader. Available only on Android.
- track3EncryptedStatus : BOOLEAN
The status of the track3 encrypted data read by the card reader. Available only on Android.
- ksn : STRING
The encrypted KSN serial number read by the card reader. Available only on Android. The value is in HEX format.
Returns
Synchronous Return:
- Void
Platforms
- Android
- Windows Mobile
- Windows CE
- Zebra Devices Only
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.open()
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.open()
setDefault(SELF_INSTANCE: EB.CardReader defaultInstance)
This method allows you to set the attributes of the default object instance by passing in an object of the same class.
Parameters
- defaultInstance : SELF_INSTANCE: EB.CardReader
An instance object that is of the same class.
- callback : CallBackHandler
Returns
Synchronous Return:
- Void
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Class Method: This method can only be accessed via the API class object.
EB.CardReader.setDefault(SELF_INSTANCE: EB.CardReader defaultInstance)
setProperties(HASH propertyMap)
This method will set the values of a list of properties for the API class. The propertyName must be a valid property for the class and must also not be read only.
Parameters
- propertyMap : HASH
Map of properties I want to set
- Object : STRING
- callback : CallBackHandler
Returns
Synchronous Return:
- Void
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.setProperties(HASH propertyMap)
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.setProperties(HASH propertyMap)
setProperty(STRING propertyName, STRING propertyValue)
This method will set the value of a property for the API class. The propertyName must be a valid property for the class and must also not be read only.
Parameters
- propertyName : STRING
The one property name that I want to set
- propertyValue : STRING
The one property value that I want to set
- callback : CallBackHandler
Returns
Synchronous Return:
- Void
Platforms
- Android
- Windows Mobile
- Windows CE
Method Access:
- Instance Method: This method can be accessed via an instance object of this class:
myObject.setProperty(STRING propertyName, STRING propertyValue)
- Default Instance: This method can be accessed via the default instance object of this class.
EB.CardReader.setProperty(STRING propertyName, STRING propertyValue)
Properties
autoEnter
Type
BOOLEAN
Description
When enabled, appends a carriage return to any data returned as keystrokes by the cardreader. This is useful for auto submitting returned data without extra interaction necessary.
Params
Default: false
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.autoEnter
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.autoEnter
Platforms
- Android
- Windows Mobile
- Windows CE
- Zebra Devices Only
autoTab
Type
BOOLEAN
Description
When enabled, appends a tab to any data returned as keystrokes by the cardreader. This is useful when filling out a form so that you can move to the next field without extra interaction necessary.
Params
Default: false
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.autoTab
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.autoTab
Platforms
- Android
- Windows Mobile
- Windows CE
- Zebra Devices Only
moduleName
Type
STRING
Description
Deprecated This method is present to provide backwards compatibility with PocketBrowser code, devices supported by the Enterprise Browser will have a single card reader driver installed as part of the platform. If the device has multiple card reader drivers installed this parameter is used to select which driver to use. The drivers present are output in the log file when the card reader is initialized. This parameter is also used to distinguish between an MSR and a DCR, e.g. if you attach a DCR7000 to your device you can specify that only the MSR functionality is used by specifying this parameter as 'MSR7000'.
Values
Possible Values (STRING):
- Constant: EB.CardReader.MSR9000 - String: msr9000 MSR9000 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSR3000.DLL.
- Constant: EB.CardReader.MSR9001 - String: msr9001 MSR9001 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSR3000.DLL.
- Constant: EB.CardReader.MSR9500 - String: msr9500 MSR9500 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSRMC50.DLL.
- Constant: EB.CardReader.MSRCAMEO - String: msrcameo MSRCAMEO drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSRCAMEO.DLL.
- Constant: EB.CardReader.MSR7000 - String: msr7000 MSR7000 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSRMC50.DLL.
- Constant: EB.CardReader.DCR7000 - String: dcr7000 DCR7000 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSRMC50.DLL.
- Constant: EB.CardReader.MSR55 - String: msr55 MSR55 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSRMC55.DLL.
- Constant: EB.CardReader.MSR3000 - String: msr3000 MSR3000 drivers. Return value while getting the property of moduleName will be its associated DLL name i.e. MSR3000.DLL.
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.moduleName
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.moduleName
Platforms
- Windows Mobile
- Zebra Devices Only
panData
Type
STRING
Description
Sets the card data without the need of a swipe. This accepts any 16 digit number as the string value. Ensure that pinEntry is true before getting the property of panData.
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.panData
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.panData
Platforms
- Windows Mobile
- Zebra Devices Only(Only compatible with DCR7000-x00)
pinEntry
Type
BOOLEAN
Description
Turns the PIN entry on or off.
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.pinEntry
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.pinEntry
Platforms
- Windows Mobile
- Zebra Devices Only(Only compatible with DCR7000-x00)
pinTimeout
Type
INTEGER
Description
PIN entry timeout in milliseconds. A value of 65535 sets the timeout to infinite. Accepts values between 0 and 65535.
Params
Default: 30000
Access
- Instance: This property can be accessed via an instance object of this class:
myObject.pinTimeout
- Default Instance: This property can be accessed via the default instance object of this class.
EB.CardReader.pinTimeout
Platforms
- Windows Mobile
- Zebra Devices Only(Only compatible with DCR7000-x00)
Remarks
General
If the CardReader open method is not specified with a callback, the cardreader data will be returned as keystrokes. If both the autotab and autoenter parameters are set to "enabled", autoenter will take precedence. An opened card reader must be closed before the attached card reader device and associated modulename parameter are changed. Any attempt to set a parameter to an invalid value, will result in no effect on the parameter's current value. There should be made a delay around 2 secs or more between API calls which interact with hardware.
Operational Modes (Backwards compatibility with PocketBrowser)
For the DCR7000 the ModuleName parameter must be set at least once before the readevent parameter is set. If the card reader is an MSR, when a card is swiped it returns the data read from the card. Setting ModuleName to a DCR will cause the card data to be returned followed by the PAN Data before waiting for a PIN to be entered on the keypad. Once entered the PIN will be encrypted and returned by a third ReadEvent. The card must be a validly formatted IATA or ABA card.
Closing the reader while PIN entry pending
There is no way to abort a pending PIN entry (other than the customer pressing the Cancel button), for security reasons. Therefore if the reader is closed or the Enterprise Browser is quit during that time it will become unresponsive until a PIN is entered or the PIN timeout occurs.
Blank card data
In certain circumstances it is possible that the card reader may return empty card data. The JavaScript event function should be able to handle this correctly.
Detaching / Reattaching the Card Reader
Applications running in the Enterprise Browser should be resilient against the card reader being detached and subsequently reattached. Card data parsing code should be robust against unexpected characters in the first read after reattachment.
Encrypted Card data
The encrypted data is supported only on the card readers that are configured for encryption. Since the encrypted data might contain unreadable characters sometimes it is recommended to use only JSON object method rather than JavaScript '%s' notation.
Examples
Accepting Card Swipes
This example shows how to enable the card reader and accept a card swipe. It then, displays the data in a human readable way. This example assumes that the ebapi-modules.js file is in the same directory as the html file invoking it.
<head>
<script type="text/javascript" charset="utf-8" src="ebapi-modules.js"></script>
<title>CardReader API Example</title>
<script>
var firstName = '';
var middleInit = '';
var lastName = '';
var cardNumber = '';
function openCardReader(){
EB.CardReader.open(cardReaderCallback);
}
function cardReaderCallback(params){
var scannedData = params['data'].split("^");
// The card number is preceded by a two characters: "%B" that need to be removed to display the number properly.
cardNumber = scannedData[0].substr(2);
var name = scannedData[1];
lastName = name.split("/")[0];
firstName = name.split("/")[1];
// Check for middle initial
if(firstName.split(" ")[1]){
middleInit = firstName.split(" ")[1];
}
cardData.innerHTML = 'Card Data: <br/>' +
'Name on Card: ' + firstName + ' ' + lastName + '<br/>' +
'Card Number: ' + cardNumber;
}
</script>
</head>
<body>
<h1>CardReader API</h1>
<br/>
<br/>
<div id='cardData'>Card Data: </div>
<br/>
<br/>
<button onClick='openCardReader()'>Activate Card Reader</button>
</body>