Integration
To integrate plugin to your app you have to add a dependency for plugin itself and a dependecny for PCSDK.
1. Adding flutter plugin
In order to include a flutter plugin in your app, you are supposed to add the follwoing lines to pubspec.yaml
:
yaml
dependencies:
pcsdk:
git: https://repo.payconfirm.org/git/flutter/pcsdk-flutter.git
2. Adding PCSDK
To make the plugin work, you have to embed PCSDK for each platfrom separately.
In iOS project (usually in
<your_project>/ios
folder) add the new dependency to aPodfile
:target 'Runner' do ... pod 'PCSDKModule', :git => 'https://repo.payconfirm.org/git/ios/pcsdk.git' ... end
In Android project (
<your_project>/android
folder) add the follwoing maven repository to a rootbuild.gradle
:allprojects { repositories { ... maven { url "https://repo.payconfirm.org/android/maven" } } }
Then, add the dependency with the last PCSDK version into a module-level
build.gradle
:// Dependency in your module-level build.gradle implementation 'tech.paycon.sdk.v5:pcsdk:5.4.<LATEST_VERSION>'
Initialization
PCSDK must be initialized before using. To inialize PC SDK library you just call PCSDK.initialize()
method. Also, you may turn on SDK's logger providing the required log level.
import 'package:pcsdk/pcsdk.dart';
import 'package:pcsdk/models/pcloggingoptions.dart';
...
await PCSDK.setLogLevel(PCLoggingOptions.debug + PCLoggingOptions.sensitive);
await PCSDK.initialize();
User registration
User registration process contains followings steps:
- Getting personalization data from the PC Server (via QR, QR + activation code, JSON-value)
- Registering PC User on PC Server
- Store user's keys in internal storage for futher using
The activation code could be delivered by other channel (SMS, Push Notifications)
import 'package:pcsdk/models/pcuser.dart';
import 'package:pcsdk/pcusersmanager.dart';
String userJSON = ... ; // String with user's data in JSON format
// Importing JSON info
PCUser user = await PCUsersManager.importUser(userJSON);
// Activating the user
if (await user.isActivated() == false) {
await PCUsersManager.activate(user, activationCode);
}
// Registering
await PCUsersManager.register(user, deviceToken);
// Storing
await PCUsersManager.store(user, userName, passwordToStore);
After successfull registration you can use this user to confirm and decline transactions.
List<PCUser> users = await PCUsersManager.listUsers();
PCUser firstUser = users.first;
Transactions
Online Methods
// Getting the appropriate user.
// We are using the first stored user in this example
PCUser user = await PCUsersManager.listUsers().first;
// Getting the available transactions list for this user
List<String> transactionsIDs = await PCTransactionsManager.getTransactionsList(user);
// Getting transactions's data
// We are using the first transaction in the list in this example
PCTransaction transaction = await PCTransactionsManager.getTransaction(transactionsIDs.first, user);
// Transaction may contain the binary data
// It is necessary to download it before confirming or declining
if (transaction.hasBinaryData) {
String? binaryDataURL = await transaction.getBinaryDataUrl();
if (binaryDataURL == null) {
await PCTransactionsManager.getTransactionBinaryData(transaction, user);
}
}
// Providing password before processing
bool isReadyToSign = await user.isReadyToSign();
if (!isReadyToSign) {
await PCUsersManager.submit(user, password);
}
// Confirming transaction
await PCTransactionsManager.sign([transaction], user);
// ... or declining transaction
await PCTransactionsManager.decline([transaction], user);
Offline Methods
// Getting the appropriate user.
// We are using the first stored user in this example
PCUser user = await PCUsersManager.listUsers().first;
String transactionJSON = ... ; // String with transaction's data in JSON format
// Importing a transaction from JSON
PCTransaction transaction = await PCTransactionsManager.importTransaction(transactionJSON);
// Providing password before processing
bool isReadyToSign = await user.isReadyToSign();
if (!isReadyToSign) {
await PCUsersManager.submit(user, password);
}
// Confirming transaction
PCConfirmation confirmation = await PCTransactionsManager.signOffline(transaction, user);
// PCConfirmation contains a confirmationCode to complete confirmation process on the server
// ... or declining transaction
PCDeclination declination = await PCTransactionsManager.declineOffline(transaction, user);
// PCDeclination contains a declineCode to complete decline process on the server
Errors
There are two types of errors in SDK:
PC_ERROR
: returning by SDKPC_SERVER_ERROR
: returning by PC server
PC_ERROR codes
Code | Description |
---|---|
PC_ERROR_INTERNAL_ERROR | Internal error |
PC_ERROR_STORAGE_NOT_INITIALIZED | Storage is not initialized |
PC_ERROR_EMPTY_KEYS_CONTENT | The user's source does not contain the key content |
PC_ERROR_EMPTY_DEVICE_TOKEN | The device token is not set |
PC_ERROR_MISSING_INTERACTION_URL | Interaction url is missing |
PC_ERROR_MISSING_TRANSACTION_DATA | Transaction's data is missing |
PC_ERROR_MISSING_KAUTH | Authorization data is missing |
PC_ERROR_MISSING_REQUESTED_DATA | Requested data is missing |
PC_ERROR_EMPTY_PASSWORD | Password is not set |
PC_ERROR_EMPTY_NAME | Name is not set |
PC_ERROR_INVALID_ACTIVATION_CODE | Activation code is invalid |
PC_ERROR_INVALID_PASSWORD | The password is invalid |
PC_ERROR_PASSWORD_DOES_NOT_MATCH_CONDITIONS | Provided password does not match the policy conditions |
PC_ERROR_USER_IS_NOT_ACTIVATED | The user is not activated |
PC_ERROR_USER_IS_NOT_REGISTERED | User is not registered |
PC_ERROR_USER_IS_EXPIRED | User is expired |
PC_ERROR_USER_NOT_FOUND | User is not found in the storage |
PC_ERROR_BINARY_UNAVAILABLE | This transaction does not contain a binary data |
PC_ERROR_BINARY_REQUIRED | Downloading transaction's binary data is required before confirmation or declining |
PC_ERROR_UNABLE_TO_STORE_BINARY_DATA | Unable to store the transaction's binary data |
PC_ERROR_BINARY_DATA_IS_CORRUPTED | Binary data is corrupted |
PC_ERROR_API_IS_NOT_SUPPORTED | This version of the SDK does not support the API version of the server |
PC_ERROR_API_IS_UNDEFINED | Interaction server api is undefined |
PC_ERROR_UNSUPPORTED_KEY_VERSION | This version of the key is unsupported |
PC_ERROR_ENDPOINT_UNAVAILABLE | Endpoint unavailable |
PC_ERROR_SIGNING_ERROR | An error occured during signing operation |
PC_ERROR_INVALID_HANDLE | Entering password is required |
PC_ERROR_SCORING_UNAVAILABLE | Scoring is unavailable for this user |
PC_ERROR_AUTOSIGN_UNAVAILABLE | Auto-signing is unavailable |
PC_ERROR_INVALID_JSON | JSON data is invalid |
PC_ERROR_INVALID_QR | QR code is invalid |
PC_ERROR_EXT_AUTH_NOT_FOUND | The extended authentication type is not registered for the user |
PC_ERROR_REMOTE_UPDATE_DISABLED | The remote update is not available for this user |
PC_ERROR_LOGIN_SESSION_IS_EXPIRED | Login session is expired |
PC_ERROR_PROCESSING_ERROR | Failed to process one or more transactions |
PC_ERROR_EXTERNAL_KEYS_PROCESSOR_IS_REQUIRED | External keys processor is required |
PC_SERVER_ERROR codes
Code | Description |
---|---|
PC_SERVER_ERROR_UNDEFINED | Undefined error |
PC_SERVER_ERROR_ATTEMPT_ID_IS_NULL | Attempt ID not set |
PC_SERVER_ERROR_AUTH_CODE_IS_NULL | Authentication code is null |
PC_SERVER_ERROR_AUTOSIGN_FAILED | Transaction autoconfirm failed |
PC_SERVER_ERROR_AUTOSIGN_NOT_ALLOWED | Autoconfirm is not allowed |
PC_SERVER_ERROR_AUTOSING_SIGNATURE_IS_INVALID | Signature for autoconfirm is invalid |
PC_SERVER_ERROR_BILL_DATE_CORRUPTED | Billing date is corrupted |
PC_SERVER_ERROR_BILL_REQUEST_ALREADY_PROCESSED | Billing is closed for this date |
PC_SERVER_ERROR_BILLING_TYPE_CORRUPTED | Billing type corrupted in database |
PC_SERVER_ERROR_CALLBACK_URL_IS_NULL | Callback url is NULL |
PC_SERVER_ERROR_COLLECTION_IS_EMPTY | Collection is empty |
PC_SERVER_ERROR_CONFIRM_CODE_IS_NULL | Confrimation code is null |
PC_SERVER_ERROR_CONFIRM_CODE_LENGTH_IS_WRONG | Confirmation code length is not valid |
PC_SERVER_ERROR_CONFIRM_TYPE_IS_NULL | Confirm type is null |
PC_SERVER_ERROR_CREATE_OPERATION_ERROR | Create operation error |
PC_SERVER_ERROR_DATA_TYPE_IS_WRONG | Data type is wrong |
PC_SERVER_ERROR_DECLINE_REASON_IS_NULL | Decline reason is null |
PC_SERVER_ERROR_DEVICE_ID_IS_NULL | Device ID is null |
PC_SERVER_ERROR_DEVICE_TYPE_IS_INCORRECT | Device type is incorrect |
PC_SERVER_ERROR_DEVICE_TYPE_IS_NULL | Device type is null |
PC_SERVER_ERROR_DS_STRUCT_ERROR | Digital signature is corrupted |
PC_SERVER_ERROR_DS_VERIFY_ERROR | Digital signature is not valid |
PC_SERVER_ERROR_ERROR_PARSE_REGISTER_SYSTEM_INFO | Request is corrupted |
PC_SERVER_ERROR_EXT_AUTH_FAILED | Extended authentication failed |
PC_SERVER_ERROR_EXT_AUTH_NEEDED | Extended authentication needed |
PC_SERVER_ERROR_EXT_AUTH_TEMPLATE_NOT_FOUND | Extended authentication template not found |
PC_SERVER_ERROR_EXT_AUTH_TYPE_NOT_SUPPORTED | Extended authentication type not supported |
PC_SERVER_ERROR_FLEXIBLE_LICENSE_ERROR | Flexible license error |
PC_SERVER_ERROR_FPRINT_IS_EMPTY | Fingerprint is empty |
PC_SERVER_ERROR_FPRINT_IS_NOT_EMPTY | Fingerprint has not been set |
PC_SERVER_ERROR_HIGH_SCORING_RISK_LEVEL | Scoring risk level is very high |
PC_SERVER_ERROR_HTTP_AUTH_CODE_INVALID | HTTP Authorization failed |
PC_SERVER_ERROR_INCORRECT_USER_TYPE | User type is incorrect |
PC_SERVER_ERROR_INVALID_HMAC | HMAC is not valid |
PC_SERVER_ERROR_INVALID_KDF | Export param format is not valid |
PC_SERVER_ERROR_INVALID_OTP | OTP is not valid |
PC_SERVER_ERROR_JAVA_INTERNAL_ERROR | Internal Error |
PC_SERVER_ERROR_JSON_REQUEST_INCORRECT | JSON request is incorrect |
PC_SERVER_ERROR_JSON_SCHEME_NOT_SUPPORTED | JSON scheme not supported |
PC_SERVER_ERROR_KEY_CONTAINER_ALIAS_IS_NULL | Key alias is null |
PC_SERVER_ERROR_KEY_CONTAINER_NOT_EXISTS | Key container does not exist |
PC_SERVER_ERROR_KEY_EXPIRED | The key has been expired, to continue you should update the key |
PC_SERVER_ERROR_KEY_INFO_NOT_FOUND | User key not found |
PC_SERVER_ERROR_LICENSE_ERROR | License error |
PC_SERVER_ERROR_LICENSE_EXPIRED | License expired |
PC_SERVER_ERROR_LICENSE_NOT_FOUND | License not found |
PC_SERVER_ERROR_LICENSE_UPDATE_ERROR | License update error |
PC_SERVER_ERROR_LICENSE_USER_COUNT_EXCEEDED | Licensed users count exceeded |
PC_SERVER_ERROR_NO_RESULT | Empty result |
PC_SERVER_ERROR_NOT_SUPPORTED | Operation not supported |
PC_SERVER_ERROR_OPERATION_EXPIRED | Operation has been expired |
PC_SERVER_ERROR_OPERATION_NOT_EXISTS | Operation not exists |
PC_SERVER_ERROR_OPERATION_STATUS_INVALID | Operation status invalid |
PC_SERVER_ERROR_OTP_IS_NOT_VALID | OTP is not valid |
PC_SERVER_ERROR_PIN_IS_EMPTY | PIN is empty |
PC_SERVER_ERROR_PIN_LENGTH_IS_WRONG | PIN length is invalid |
PC_SERVER_ERROR_PUBKEY_IS_EMPTY | Public key is empty |
PC_SERVER_ERROR_PUBKEY_IS_NOT_EMPTY | Public key was already set |
PC_SERVER_ERROR_PUSH_ID_IS_NULL | PUSH ID is null |
PC_SERVER_ERROR_PUSH_NOT_FOUND | Device ID not found |
PC_SERVER_ERROR_REMOTE_UPDATE_DISABLED | Remote update disabled |
PC_SERVER_ERROR_REMOTE_UPDATE_ERROR_BLOCK | Remote update error, user was blocked |
PC_SERVER_ERROR_REMOTE_UPDATE_ERROR | Remote update error |
PC_SERVER_ERROR_REPORT_TPL_IS_NULL | Report template is null |
PC_SERVER_ERROR_REQUEST_ERROR | Request error |
PC_SERVER_ERROR_REQUEST_SIGNATURE_NOT_VALID | Requset digital signature invalid |
PC_SERVER_ERROR_SCORING_FAILED | Scoring failed |
PC_SERVER_ERROR_SCORING_SETTINGS_IS_NULL | Scoring settings not set |
PC_SERVER_ERROR_SERVER_SCORING_SETTINGS_INCORRECT | Scoring settings are invalid on the server |
PC_SERVER_ERROR_SIGNATURE_AND_CONFIRM_CODE_ARE_NULL | Signature or confirm code must be specified |
PC_SERVER_ERROR_SIGNATURE_IS_INVALID | Signature is invalid |
PC_SERVER_ERROR_SIGNATURE_IS_NULL | Signature is null |
PC_SERVER_ERROR_SPART_LENGTH_IS_WRONG | Second key part length is not valid |
PC_SERVER_ERROR_STATUS_LIST_IS_EMPTY | Transaction status list is empty |
PC_SERVER_ERROR_STATUS_LIST_IS_INCORRECT | Status list is incorrect |
PC_SERVER_ERROR_STORE_TYPE_IS_NULL | Key store type is null |
PC_SERVER_ERROR_STORE_TYPE_IS_WRONG | Key storage type is unsupported |
PC_SERVER_ERROR_SYSTEM_ID_IS_NULL | System ID is null |
PC_SERVER_ERROR_SYSTEM_ID_IS_WRONG | System ID is wrong |
PC_SERVER_ERROR_SYSTEM_ID_NOT_UNIQUE | System ID is not unique |
PC_SERVER_ERROR_SYSTEM_IS_DELETED | System has been deleted |
PC_SERVER_ERROR_SYSTEM_NAME_IS_NULL | System name is null |
PC_SERVER_ERROR_SYSTEM_NOT_FOUND | System not found |
PC_SERVER_ERROR_SYSTEM_NOT_VALID | System is not valid |
PC_SERVER_ERROR_SYSTEM_PROPERTY_ERROR | System property error |
PC_SERVER_ERROR_SYSTEM_TYPE_IS_WRONG | System type is not valid |
PC_SERVER_ERROR_TRANSACTION_CHECKED | Transaction is confirmed |
PC_SERVER_ERROR_TRANSACTION_DATA_ERROR | Transaction data error |
PC_SERVER_ERROR_TRANSACTION_DATA_IS_NULL | Transaction data is null |
PC_SERVER_ERROR_TRANSACTION_DATA_TYPE_IS_NULL | Transaction data type is null |
PC_SERVER_ERROR_TRANSACTION_DATA_UID_ERROR | Transaction data is corrupted (User ID does not match) |
PC_SERVER_ERROR_TRANSACTION_EXPIRED | Transaction expired |
PC_SERVER_ERROR_TRANSACTION_ID_IS_NULL | Transaction ID is null |
PC_SERVER_ERROR_TRANSACTION_IS_DELETE | Transaction is marked as deleted |
PC_SERVER_ERROR_TRANSACTION_IS_NOT_IN_OPERATION | Transaction is not in operation |
PC_SERVER_ERROR_TRANSACTION_IS_NOT_UNIQUE | Transaction is not unique |
PC_SERVER_ERROR_TRANSACTION_IS_NULL | Transaction is NULL |
PC_SERVER_ERROR_TRANSACTION_STATUS_INVALID | Invalid transaction status |
PC_SERVER_ERROR_TRANSFER_STORAGE | Unable to transfer data from old storage |
PC_SERVER_ERROR_UNSUPPORTED_BILLING_TYPE | Unsupported billing type |
PC_SERVER_ERROR_USER_BILL_DATE_CORRUPTED | User billing date is corrupted |
PC_SERVER_ERROR_USER_ID_IS_NULL | User ID is null |
PC_SERVER_ERROR_USER_ID_PREF_IS_NULL | User ID prefix is null |
PC_SERVER_ERROR_USER_ID_PREF_TOO_LONG | User ID Prefix is too long |
PC_SERVER_ERROR_USER_IS_BLOCKED | User is blocked |
PC_SERVER_ERROR_USER_IS_DELETED | User has been deleted |
PC_SERVER_ERROR_USER_NOT_FOUND | User not found |
PC_SERVER_ERROR_VALID_DATE_EXPIRED | Key has expired |
PC_SERVER_ERROR_WRONG_AUTH_CODE | Authentication code is invalid |
PC_SERVER_ERROR_WRONG_SYSTEM_TYPE | System type is not valid |
PC_SERVER_ERROR_DN_IS_NULL | Distinguished Name not set |
PC_SERVER_ERROR_CERT_REQUEST_PARAMS_IS_NULL | Certificate request params not set |
PC_SERVER_ERROR_CERT_ISSUE_ERROR | Certificate issuing error |
PC_SERVER_ERROR_NO_CERT_REQUEST | Certificate Request or Certificate is absent |
PC_SERVER_ERROR_NO_CERT | No certificate for this operation |
PC_SERVER_ERROR_NO_PKI_SETTINGS_DEFINED | No PKI settings defined in service configuration |
PC_SERVER_ERROR_CAN_NOT_USE_CERTIFICATE_CHAIN | Can not use one or more certificates in provided chain |
PC_SERVER_ERROR_CERT_STATUS_INVALID | Certificate status invalid for this operation |
PC_SERVER_ERROR_CERT_REVOKE_ERROR | Certificate revoking error |
PC_SERVER_ERROR_KEY_INDEX_OBSOLETED | This key is not longer relevant. It was re-emitted |
PC_SERVER_ERROR_KEY_INDEX_WRONG | Key index is wrong |
PC_SERVER_ERROR_DEVICE_FINGERPRINT_MISMATCH | The fingerprint of the device does not match the saved one |
PC_SERVER_ERROR_KEY_NOT_ACTIVATED | Key is not activated |
PC_SERVER_ERROR_ACTIVATION_ATTEMPTS_EXCEEDED | The number of activation attempts exceeded |
PC_SERVER_ERROR_ACTIVATION_CODE_INCORRECT | Activation code is incorrect |
PC_SERVER_ERROR_PASSWORD_ATTEMPTS_EXCEEDED | Password attempts exceeded |
PC_SERVER_ERROR_PASSWORD_INCORRECT | Password incorrect |
PC_SERVER_ERROR_PASSWORD_NOT_SET | Password not set |
PC_SERVER_ERROR_CREDENTIALS_NOT_INITIALIZED | Credentials not initialized |
Changelog
1.0.1
- Supporting of offline transactions
1.0.0
- Initial release with common functional