Payment Middleware |
---|
See paymentmw.h |
#include
| Code Block |
---|
| #include "datamngr.h"
#include "dataxchng.h"
//---- Agnos Framework Headers ----
#include "agnos.h"
//---- Global Headers ----
#include "gpi_agnos_framework_globals.h" |
| -- |
#define
| Code Block |
---|
| #define CHIP_MODE 0x05
#define MAG_MODE 0x90
#define FALLBACK_MODE 0x80
#define MANUAL_MODE 0x01
#define EMV_CL_MODE 0x07
#define MAG_CL_MODE 0x91
#define PSE_DDF_NAME "1PAY.SYS.DDF01"
#define PSE_DDF_LENGTH 14
#define PPSE_DDF_NAME "2PAY.SYS.DDF01"
#define PPSE_DDF_LENGTH 14
#define ACCOUNT_TYPE_RANGE 10 |
| -- |
tTransactionType
| Code Block |
---|
| typedef enum {
ttPURCHASE,
ttCASH,
ttWITH_CASHBACK,
ttREFUND,
ttMANUAL_CASH,
ttQUASI_CASH,
ttDEPOSIT,
ttINQUIRY,
ttPAYMENT,
ttTRANSFER,
ttADMINISTRATIVE,
ttHOUSE_KEEPING,
ttRETRIEVAL,
ttUPDATE,
ttAUTHENTICATION,
ttCASH_DISBURSEMENT,
ttPRE_AUTHORIZATION,
ttMONEY_ADD,
ttVOID,
ttCLEAN_ALL,
ttRESET,
ttUNDEFINED
} tTransactionType; |
| -- |
tAccountType
| Code Block |
---|
| typedef enum {
atDEFAULT,
atSAVINGS,
atCHECKING,
atCREDIT
} tAccountType; |
| -- |
tStartingPoint
| Code Block |
---|
| typedef enum {
spNO_START,
spSTART_A, // as per EMVCo contactless specifications
spSTART_B, // as per EMVCo contactless specifications
spSTART_C, // as per EMVCo contactless specifications - No used by external calling applications (internal start)
spSTART_D, // as per EMVCo contactless specifications
// Amadis to generalize EMVCo's entrypoint architecture pattern
spSTART_K, // Agnos call for EMV contact transactions -> DEPRECATED
spSTART_M, // Agnos call for MAG stripe transactions -> DEPRECATED
spSTART_L // Agnos call for ManualKey entry transactions -> DEPRECATED
} tStartingPoint; |
| -- |
tOutCome
| Code Block |
---|
| typedef enum {
ocNONE,
ocTRY_ANOTHER_INTERFACE,
ocOFFLINE_APPROVED,
ocOFFLINE_DECLINED,
ocOFFLINE_FAILED,
ocOFFLINE_NOT_ACCEPTED,
ocAPPROVED,
ocDECLINED,
ocFAILED,
ocNOT_ACCEPTED,
ocTRANSACTION_CANCELLED,
ocSELECT_NEXT_NOT_ACCEPTED,
ocSELECT_NEXT_RETRY,
ocTRY_AGAIN,
ocONLINE_REQUEST,
ocEND_APPLICATION,
ocNOT_EMV_CARD_POOLED
} tOutCome; |
| -- |
tInterface
| Code Block |
---|
| typedef enum {
stCONTACT,
stCONTACTLESS,
stMAGSTRIPE,
stMANUAL,
stNUMBER_OF_INTERFACE,
} tInterface |
| -- |
tAlternateInterfacePreference
| Code Block |
---|
| typedef enum {
ipNONE, // i.e. not applicable
ipCONTACTCHIP,
ipMAGSTRIPE
} tAlternateInterfacePreference; |
| -- |
tOnlineResponseData
| Code Block |
---|
| typedef enum {
rdNONE, // i.e. not applicable
rdEMV,
rdANY
} tOnlineResponseData; |
| -- |
tCVM
| Code Block |
---|
| typedef enum {
cvNONE, // i.e. not applicable
cvNO_CVM,
cvOBTAIN_SIGNATURE,
cvONLINE_PIN,
cvCONFIRMATION_CODE_VERIFIED
} tCVM; |
| -- |
tOutComeParameter
| Code Block |
---|
| typedef struct {
tOutCome mOutCome;
tStartingPoint mStartingPoint;
tOnlineResponseData mOnlineResponseData;
tCVM mCVM;
tBoolean mUIReqOnOutcomePresent; // If bTRUE, found in DataExchange
tBoolean mUIReqOnRestartPresent; // If bTRUE, found in DataExchange
tBoolean mReceipt;
tBoolean mDRPresent; // Data record. If present, found in DataExchange
tBoolean mDDPresent; // Discretionary Data. If present, found in DataExchange
tAlternateInterfacePreference mAlternateInterfacePreference;
tWord mFieldOffReq;
tWord mRemovalTimeout;
} tOutComeParameter; |
| -- |
tPaymentContext
| Code Block |
---|
| typedef struct {
////////////////////////////////////////////////////////////////////
// Information provided by Level3
tAmount *mAmount; // EMV Tag 9F02 = "Amount, Authorized" + "Amount, Other"
tAmount *mCashBack; // EMV Tag 9F03 = "Amount, Other"
tTransactionType mTransactionType; // EMV Tag 9C
tNumericDate mTransactionDate[3]; // EMV Tag 9A
tNumericDate mTransactionTime[3]; // EMV Tag 9F21
tByte mMerchantCustomData[20]; // EMV Tag 9F7C
tByte mTransactionCurrencyCode[2]; // EMV Tag 5F2A
tByte mTransactionCurrencyExponent; // EMV Tag 5F36
tByte mTransactionCategoryCode; // EMV Tag 9F53
tByte mMerchantCategoryCode[2]; // EMV Tag 9F15
tByte mMerchantID[15]; // EMV Tag 9F16
tBoolean mForcedOnline; // As per merchant decision
char mWorkingPath[2*MAX_NAME_LENGTH];
////////////////////////////////////////////////////////////////////
// Information set by Payment System
tBoolean mEMVContact; // by configuration (terminal)
tBoolean mEMVContactless; // by configuration (terminal)
tBoolean mMagstripe; // by configuration (terminal)
tAmount mAmountReferenceCurrency; // EMV Tag 9F3A - not used yet
tByte mTransactionReferenceCurrencyCode[2]; // EMV Tag 9F3C - not used yet
tByte mTransactionReferenceCurrencyExponent; // EMV Tag 9F3D - not used yet
tByte mTerminalRiskManagementData[8]; // EMV Tag 9F1D - not used yet
tAccountType mAccountType; // EMV Tag 5F57 - payment application specific
tByte mPOSEntryMode; // EMV Tag 9F39 - payment application specific
tCounter mTransactionSequenceCounter;
tARC mARC; //Authorization Response Code, eg mapping from Issuer's Response Code (ISO8583:DE39)
tBoolean mUnableToGoOnline;
////////////////////////////////////////////////////////////////////
// Information set by Payment Application (from Agnos primitives)
tByte mRID[RID_LENGTH];
tADF mADF;
tByte mADFOrderNumber; // For a given configuration, AID's order number
tBoolean mAdvice;
tBoolean mBatchData;
tBoolean mReversal;
////////////////////////////////////////////////////////////////////
// Information set by EMV Library
tSessionId mSession;
tByte mCID; // Information used by Level3 to detect transaction's outcome requested by ICC
// CID Bit map (see also EMV4.2 book III section 6.5.5.4)
// b8 b7 b6 b5 b4 b3 b2 b1
// AAC 0 0
// TC 0 1
// ARQC 1 0
// RFU 1 1
// Payment System-specific cryptogram x x
// No advice required 0
// Advice required 1
// Reason/advice code x x x
// No information given 0 0 0
// Service not allowed 0 0 1
// PIN try limit exceeded 0 1 0
// Issuer authentication failed 0 1 1
// Other values RFU 1 x x
//
// Important: terminal shall inspect CID to detect whether transaction requires an advice (when supported by terminal)
// Pls, refer to payment system rules
//
////////////////////////////////////////////////////////////////////
// Information calculated by Level3 once transaction is completed (from paymentMW primitives)
tByte mFinal9F02[6];
tByte mCVMResult[3];
tByte mTVR[5];
tByte mTSI[2];
tByte mAC[8];
tByte mUN[4];
tByte mAID[MAX_AID_LENGTH];
tByte mAIDLen;
tByte mPANSHA[20];
tByte mCardholderNameLen;
tByte mCardholderName[26];
tByte mAgnosTVR[AGNOS_TVR_SIZE];
#ifdef _AGNOSISR_
tBoolean mIsScriptExecuted;
tByte mIssuerScriptResultLen;
tByte mIssuerScriptResult[2*MAX_SCRIPT*sizeof(tScriptResult)];
#endif
////////////////////////////////////////////////////////////////////
// Level3 <-> Level2 communication
tDataExchange mDataExchange;
tExitCondition mExitCondition;
} tPaymentContext; |
| |
pmwGetPaymentMiddlewareVersionNumber
| Code Block |
---|
| DLLEXPORT char* pmwGetPaymentMiddlewareVersionNumber(void); |
| Get AgnosMW version. |
pmwGetKernelVersion
| Code Block |
---|
| DLLEXPORT tString pmwGetKernelVersion(void); |
| Get EMV core engine version. |
pmwInitializePaymentContext
| Code Block |
---|
| DLLEXPORT void pmwInitializePaymentContext(tPaymentContext *ctx); |
| Reset the payment context. Shall be called before any new transaction. |
pmwInitializeOutComeParameter
| Code Block |
---|
| DLLEXPORT void pmwInitializeOutComeParameter(tOutComeParameter *outcome); |
| Reset the outcome context. Shall be called before any new transaction. |
pmwProceedToUniversalFinalSelection
| Code Block |
---|
| DLLEXPORT tPaymentError pmwProceedToUniversalFinalSelection(
tADFList *mutualList,
tByte *AIDIndex, // Index in the AID list supported by the terminal (see processing context)
tByte *MLIndex, // Index in the mutual list
const tTerminalContext *terminal,
tBoolean CLMode); |
| Proceed to standard final selection following EMVCo specs. This mechanism can be overloaded: In contact, don’t call the primitive and implement a specific selection processing (see selectionlogic.c) In contactless, use tApplicationSelectionMethod callback
|
pmwSetEMVResult | | Set EMV parameters after a transaction within tPaymentContext based on Agnos status. In contact, this shall be systematically called by payment application. In contactless, AgnosEP encapsulated that call. |
pmwCloseSession | | Close Agnos session |