@cybersource/flex-sdk-node
Version:
Easily create keys for use in a Flex API integration and verifying Flex token contents
146 lines (112 loc) • 4.05 kB
Markdown
@cybersource/flex-sdk-node
=============
This Node SDK helps with server side aspects of a Flex integration:
- Requesting a transaction specific key
- Verifying the token response
# Installation
Using npm:
```
npm install @cybersource/flex-sdk-node --save
```
Then in node scripts require the sdk:
```js
var FlexSDKNode = require('@cybersource/flex-sdk-node');
```
# Initializing the SDK
To request a transaction specific key, you must supply:
- authentication credentials
- production or test environment
- Optional params passed directly to underlying request object. See docs for [usage](https://www.npmjs.com/package/request)
- `proxy`
## Using credentials obtained through [CyberSource Business Center](https://ebc2.cybersource.com/ebc2):
```js
var flex = FlexSDKNode({
// auth credentials
mid: '__YOUR_MERCHANT_ID__',
keyId: '__YOUR_KEY_ID__',
sharedSecret: '__YOUR_SHARED_SECRET__',
// live environment
production: true
});
```
## Using credentials obtained through [Visa Developer Center](https://developer.visa.com):
```js
var flex = FlexSDKNode({
// auth credentials
apiKey: '__YOUR_API_KEY__',
sharedSecret: '__YOUR_SHARED_SECRET__',
// test environment
production: false
});
```
## Addtional Options
```js
// CGK test environment with proxy
// Proxy with credentials can be supplied as
// 'http://username:password@localproxy.com'
var flex = FlexSDKNode({
mid: '__YOUR_MERCHANT_ID__',
keyId: '__YOUR_KEY_ID__',
sharedSecret: '__YOUR_SHARED_SECRET__',
production: false,
proxy: 'http://localproxy.com'
});
```
# Debug Settings
Debug logging is used for the keys request and response.
See docs for [usage](https://www.npmjs.com/package/debug#usage)
# Request a key
Flex encrypts the card number in transit, for additional protection against [MitM attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) where the cardholder's network connection is compromised.
The following encryption methods are supported:
- `RsaOaep256`
- `RsaOaep` (Recommended for widest browser compatibility)
- `None` (No encryption of the card number)
```js
var options = {
encryptionType: flex.constants.encryptionType.RsaOaep
};
flex.createKey(options, function(err, resp, key) {
if (err) {
// handle error
console.error(err);
return;
}
// you can now pass this key to your front end client for token creation. Ensure to persist
// this somewhere so you can verify the signatures on any created tokens later on!
mySavedKey = key;
});
```
If you are requesting a key for use with Flex Microform then you must also supply the origin of the website in which Flex Microform will be embedded:
```js
var options = {
encryptionType: flex.constants.encryptionType.RsaOaep,
targetOrigin: 'https://shop.merchant.com'
};
```
Additional optional settings may also be supplied:
```js
var options = {
encryptionType: flex.constants.encryptionType.RsaOaep,
settings: {
currency: 'USD', // Currency to be used with the token
enableAutoAuth: true, // Whether an automatic authorization should be performed prior to generating a token
enableBillingAddress: true, // Whether dummy address data should be supplied for the token
unmaskedLeft: 6, // The number of unmasked digits to be shown at the beginning of the card number (BIN)
unmaskedRight: 4 // The number of unmasked digits to be shown at the end of the card number
}
};
```
# Verify a token response
There is a possibility that the token response can be tampered with as it passes through the client. Therefore you should always verify the integrity of the response using the SDK.
```js
if (!flex.verifyToken(publicKey, token)) {
// Reject token
}
```
- `publicKey` can be:
- a `jwk` js object
- a pem formatted string
- the base64 encoded pem contents (sans header & footer)
- `token` as a js object
## Copyright and license
Code and documentation copyright 2018 [CyberSource](http://www.cybersource.com/). Released under the CyberSource SDK License Agreement as detailed in `./LICENSE.md`.