This is a generic class that defines the interface between xTuple ERP and credit card processing services. More...
#include <creditcardprocessor.h>
Classes | |
class | FraudCheckResult |
Public Types | |
enum | CCTransaction { Authorize, Reverse, Capture, Charge, Credit, Void } |
enum | FraudCheck { Match, NoMatch, NotAvail, Address, PostalCode, Name, NotProcessed, Invalid, ServiceUnavailable, IssuerNotCertified, Suspicious, Unsupported } |
Properties | |
objectName | |
Public Member Functions | |
virtual | ~CreditCardProcessor () |
virtual int | authorize (const int pccardid, const QString &pcvv, const double pamount, double ptax, bool ptaxexempt, double pfreight, double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, QString preftype, int &prefid) |
Processes pre-authorization transactions. More... | |
bool | blockSignals (bool block) |
virtual int | charge (const int pccardid, const QString &pcvv, const double pamount, const double ptax, const bool ptaxexempt, const double pfreight, const double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, QString preftype, int &prefid) |
Processes charge transactions. More... | |
virtual int | chargePreauthorized (const QString &pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid) |
Processes 'capture' transactions, or charges against a prior preauthorization. More... | |
QObject * | child (const char *objName, const char *inheritsClass, bool recursiveSearch) const |
const QObjectList & | children () const |
const char * | className () const |
bool | connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const |
virtual int | credit (const int pccardid, const QString &pcvv, const double pamount, const double ptax, const bool ptaxexempt, const double pfreight, const double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, QString preftype, int &prefid) |
Processes credit transactions. More... | |
virtual Q_INVOKABLE int | defaultPort (bool=false) |
Return the default port expected by the subclass. More... | |
virtual Q_INVOKABLE QString | defaultServer () |
Return the default server expected by the subclass. More... | |
void | deleteLater () |
void | destroyed (QObject *obj) |
bool | disconnect (const char *signal, const QObject *receiver, const char *method) |
bool | disconnect (const QObject *receiver, const char *method) |
void | dumpObjectInfo () |
void | dumpObjectTree () |
QList< QByteArray > | dynamicPropertyNames () const |
virtual bool | event (QEvent *e) |
virtual bool | eventFilter (QObject *watched, QEvent *event) |
T | findChild (const QString &name) const |
QList< T > | findChildren (const QString &name) const |
QList< T > | findChildren (const QRegExp ®Exp) const |
virtual Q_INVOKABLE bool | handlesChecks () |
Returns whether the subclass handles checks. More... | |
virtual Q_INVOKABLE bool | handlesCreditCards () |
Returns whether the subclass handles credit cards. More... | |
bool | inherits (const char *className) const |
void | insertChild (QObject *object) |
void | installEventFilter (QObject *filterObj) |
bool | isA (const char *className) const |
virtual Q_INVOKABLE bool | isLive () |
Returns whether credit card processing is configured in live mode. More... | |
virtual Q_INVOKABLE bool | isTest () |
Returns whether credit card processing is configured in test mode. More... | |
bool | isWidgetType () const |
void | killTimer (int id) |
virtual const QMetaObject * | metaObject () const |
void | moveToThread (QThread *targetThread) |
const char * | name (const char *defaultName) const |
const char * | name () const |
QString | objectName () const |
QObject * | parent () const |
QVariant | property (const char *name) const |
void | removeChild (QObject *object) |
void | removeEventFilter (QObject *obj) |
virtual Q_INVOKABLE void | reset () |
Reset error handling internal settings so previous transactions don't interfere with new transactions. More... | |
virtual int | reversePreauthorized (const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, QString preftype, int prefid) |
Reverse a preauthorization. More... | |
void | setName (const char *name) |
void | setObjectName (const QString &name) |
void | setParent (QObject *parent) |
bool | setProperty (const char *name, const QVariant &value) |
bool | signalsBlocked () const |
int | startTimer (int interval) |
virtual Q_INVOKABLE int | testConfiguration () |
Test whether common credit card processing configuration options are consistent. More... | |
QThread * | thread () const |
virtual int | voidPrevious (int &) |
Processes void transactions. More... | |
Static Public Member Functions | |
static Q_INVOKABLE ParameterList | authorize (const ParameterList &) |
Processes pre-authorization transactions. More... | |
static Q_INVOKABLE ParameterList | charge (const ParameterList &) |
Processes charge transactions. More... | |
static Q_INVOKABLE ParameterList | chargePreauthorized (const ParameterList &) |
Captures preauthorized transactions. More... | |
bool | connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type) |
bool | connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type) |
static Q_INVOKABLE ParameterList | credit (const ParameterList &) |
Processes credit transactions. More... | |
bool | disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method) |
bool | disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method) |
static Q_INVOKABLE QString | errorMsg () |
Returns the most recent error message set by CreditCardProcessor or one of its subclasses. More... | |
static Q_INVOKABLE QString | errorMsg (const int) |
Returns the error message associated with the given pcode. More... | |
static Q_INVOKABLE CreditCardProcessor * | getProcessor (const QString=QString()) |
Get a new instance of a specific CreditCardProcessor subclass. More... | |
static Q_INVOKABLE int | printReceipt (const int) |
Print the CCReceipt report for a credit card transaction. More... | |
QString | tr (const char *sourceText, const char *disambiguation, int n) |
QString | trUtf8 (const char *sourceText, const char *disambiguation, int n) |
static Q_INVOKABLE QString | typeToCode (CCTransaction ptranstype) |
static Q_INVOKABLE ParameterList | voidPrevious (const ParameterList &) |
Processes void transactions. More... | |
Protected Slots | |
void | sslErrors (const QList< QSslError > &errors) |
Protected Member Functions | |
CreditCardProcessor () | |
Construct and initialize a default CreditCardProcessor. More... | |
virtual FraudCheckResult * | avsCodeLookup (QChar pcode) |
virtual QString | buildURL (const QString, const QString, const bool) |
Construct a valid URL from the information in the configuration. More... | |
bool | checkConnectArgs (const char *signal, const QObject *object, const char *method) |
virtual int | checkCreditCard (const int pccid, const QString &pcvv, QString &pccard_x) |
Check if the given credit card is consistent and active. More... | |
virtual int | checkCreditCardProcessor () |
virtual void | childEvent (QChildEvent *event) |
virtual void | connectNotify (const char *signal) |
virtual void | customEvent (QEvent *event) |
virtual FraudCheckResult * | cvvCodeLookup (QChar pcode) |
virtual void | disconnectNotify (const char *signal) |
virtual int | doAuthorize (const int pccardid, const QString &pcvv, double &pamount, const double ptax, const bool ptaxexempt, const double pfreight, const double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | doCharge (const int pccardid, const QString &pcvv, const double pamount, const double ptax, const bool ptaxexempt, const double pfreight, const double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | doChargePreauthorized (const int pccardid, const QString &pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | doCredit (const int pccardid, const QString &pcvv, const double pamount, const double ptax, const bool ptaxexempt, const double pfreight, const double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | doReversePreauthorized (const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | doTestConfiguration () |
Placeholder for subclasses to override. More... | |
virtual int | doVoidPrevious (const int pccardid, const QString &pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, QString &papproval, int &pccpayid, ParameterList &pparams) |
Placeholder for subclasses to override. More... | |
virtual int | fraudChecks () |
Handle fraud checking as determined by the system configuration. More... | |
int | receivers (const char *signal) const |
QObject * | sender () const |
int | senderSignalIndex () const |
virtual int | sendViaHTTP (const QString &, QString &) |
Send an HTTP request to the configured credit card service and wait for its response. More... | |
virtual void | timerEvent (QTimerEvent *event) |
virtual int | updateCCPay (int &, ParameterList &) |
Insert into or update the ccpay table based on parameters extracted from the credit card processing service' response to a transaction request. More... | |
Static Protected Member Functions | |
static double | currToCurr (const int, const int, const double, int *=0) |
Convert between two currencies. More... | |
QByteArray | normalizeSignalSlot (const char *signalSlot) |
Protected Attributes | |
QList< FraudCheckResult * > | _avsCodes |
QString | _company |
QList< FraudCheckResult * > | _cvvCodes |
int | _defaultLivePort |
QString | _defaultLiveServer |
int | _defaultTestPort |
QString | _defaultTestServer |
QList< QPair< QString, QString > > | _extraHeaders |
QHttp * | _http |
bool | _ignoreSslErrors |
bool | _passedAvs |
bool | _passedCvv |
QString | _plogin |
QString | _ppassword |
QString | _pport |
QString | _pserver |
Static Protected Attributes | |
static QString | _errorMsg |
static QHash< int, QString > | _msgHash |
This is a generic class that defines the interface between xTuple ERP and credit card processing services.
CreditCardProcessor encapsulates the common functionality shared across different services, including interaction with the database server and the proper stored procedures to call.
It should be subclassed once for each credit card processing company to be supported. Subclasses should override the following methods:
Subclasses should also set
It is the subclass' responsibility to ensure that all of the configuration options available on the Credit Card Configuration window are implemented either here or in the subclass. An example of an option that must be implemented in each subclass is CCTestResult
since the method for requesting error responses from the credit card processing service is different for every service.
In addition to subclassing CreditCardProcessor, alternate credit card processing services require changing CreditCardProcessor::getProcessor and configureCC, and to subclass ConfigCreditCardProcessor. CreditCardProcessor::getProcessor must be modified to instantiate the right subclass of CreditCardProcessor based on the CCCompany
metric or its QString argument. configureCC must be modified to store the service-specific CCCompany
value checked by getProcessor and to instantiate a ConfigCreditCardProcessor, which allows editing and saving service-specific metrics
Error handling:
The following rules are followed by CreditCardProcessor, which also expects its subclasses to follow them. It is the subclass' responsibility to follow these conventions. If they are not followed, the database will not represent what really happened and the user will not be informed of problems.
Each method in CreditCardProcessor and its subclasses involved in processing credit card transactions is expected to return an integer conforming to the following pattern and set _errorMsg to the string associated with this integer in the _msgHash:
If the function returns: | It means this: |
---|---|
greater than 0 | The interaction with the credit card processing service was successful but either there is a warning from the service, like the credit card processing company denied the transaction, or local post-processing generated an error, such as a database failure |
0 | the transaction succeeded in its entirety |
less than 0 | preprocessing failed or the credit card company returned an error, like a malformed message or communications could not be established to process the transaction |
Error codes between -100 and 100 inclusive are reserved for the CreditCardProcessor class itself. Values less than -100 or greater than 100 are available for use by subclasses and should be loaded into _msgHash in the subclass' constructor.
expose portions of this in the scriptapi doxygen module
use qabstractmessagehandler instead of qmessagebox
|
virtual |
|
protected |
Construct and initialize a default CreditCardProcessor.
This should never be called except by the constructor of a subclass. This should always be called by the constructor of a subclass. This constructor initializes _msgHash as well as some private and protected fields.
|
virtual |
Processes pre-authorization transactions.
This method performs application-level error checking and all of the database work required to handle a pre-authorization transaction. It calls doAuthorize to handle the direct communication with the service.
[in] | pccardid | The internal id of the credit card to preauthorize |
[in] | pcvv | The CVV/CCV code of the credit card to preauthorize |
[in] | pamount | The total amount to preauthorize. If the credit card processor does not preauthorize the full amount requested, the database will store the actual amount that was authorized If this occurs, the application will display an error if the amount authorized is 0 or a warning if the amount authorized is greater than 0. |
[in] | ptax | The subportion of the total which is tax |
[in] | ptaxexempt | Whether or not this transaction is tax exempt |
[in] | pfreight | The subportion of the total which is freight |
[in] | pduty | The subportion of the total which is customs duty |
[in] | pcurrid | The currency of the amount to preauthorize |
[in,out] | pneworder | The order number associated with this preauthorization |
[out] | preforder | The reference number associated with this preauthorization (may be required to 'capture' the preauthorization) |
[out] | pccpayid | The ccpay_id of the record created by this transaction |
[in] | preftype | Either cohead or cashrcpt or blank |
[in,out] | prefid | The cashrcpt_id or cohead_id associated with this transaction |
|
static |
Processes pre-authorization transactions.
This version of authorize is intended for use by scripts. Instead of passing all of the arguments in order, this method allows creating a QtScript object and setting properties on this object by name. Then the script can pass this object to authorize(const int pccardid, const int pcvv, const double pamount, double ptax, bool ptaxexempt, double pfreight, double pduty, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, QString preftype, int &prefid):
pinput | The parameter list to unpack and use to call authorize |
|
protectedvirtual |
|
protectedvirtual |
Construct a valid URL from the information in the configuration.
Handle the case where someone leaves off a piece of the URL when entering the basic configuration. Note that a lot of people are used to typing in web browsers, which fill in some parts for them.
If the user did not enter values for the server or the port on the configuration, use the defaults provided by the service' subclass.
pserver | Use this server, or the defaultServer if blank |
pport | Use this port, or the defaultPort if blank |
pinclport | Flag whether the port should be part of the constructed URL or not |
|
virtual |
Processes charge transactions.
This method performs application-level error checking and all of the database work required to handle a credit card charge transaction. It calls doCharge to handle the direct communication with the service.
[in] | pccardid | The internal id of the credit card to charge |
[in] | pcvv | The CVV/CCV code of the credit card to charge |
[in] | pamount | The total amount to charge |
[in] | ptax | The subportion of the total which is tax |
[in] | ptaxexempt | Whether or not this transaction is tax exempt |
[in] | pfreight | The subportion of the total which is freight |
[in] | pduty | The subportion of the total which is customs duty |
[in] | pcurrid | The currency of the amount to charge |
[in,out] | pneworder | The order number associated with this charge |
[out] | preforder | The reference number associated with this charge |
[out] | pccpayid | The ccpay_id of the record created by this transaction |
[in] | preftype | Either cohead or cashrcpt or blank |
[in,out] | prefid | The cashrcpt_id or cohead_id associated with this transaction |
|
static |
Processes charge transactions.
This version of charge is intended for use by scripts. Instead of passing all of the arguments in order, this method allows creating a QtScript object and setting properties on this object by name. Then the script can pass this object to charge.
pinput | The parameter list to unpack and use to call charge |
|
virtual |
Processes 'capture' transactions, or charges against a prior preauthorization.
This method performs application-level error checking and all of the database work required to 'capture' or complete the charge against a prior preauthorization. It calls doChargePreauthorized to handle the direct communication with the service.
[in] | pcvv | The CVV/CCV code of the credit card to charge |
[in] | pamount | The total amount to charge |
[in] | pcurrid | The currency of the amount to charge |
[in,out] | pneworder | The order number associated with this charge |
[in,out] | preforder | The reference number (preforder) generated by the preauthorization transaction |
[in,out] | pccpayid | When calling the method, pccpayid should be the ccpay_id of the preauthorization record. On return, this is the ccpay_id of the charge record, which may be the same as the preauthorization record. |
|
static |
Captures preauthorized transactions.
This version of chargePreauthorized is intended for use by scripts. Instead of passing all of the arguments in order, this method allows creating a QtScript object and setting properties on this object by name. Then the script can pass this object to chargePreauthorized.
pinput | The parameter list to unpack and use to call chargePreauthorized |
|
protectedvirtual |
Check if the given credit card is consistent and active.
This consistency check is used in a number of places before executing a credit card transaction. It confirms that the given card is marked as active in the system and has not expired. If the card has expired based on the expiration month and year, then it is marked as expired in the database. It also makes sure that the CVV has been entered if the system is configured to require it.
pccid | The ccard_id of the credit card to check | |
pcvv | The CVV from the card holder, -1 if not known, -2 if the caller knows it is not required or available (such as for void transactions). | |
[out] | pccard_x | The credit card number, with most of the digits replaced with X . Used for reporting errors. |
|
inlineprotectedvirtual |
|
virtual |
Processes credit transactions.
This method performs application-level error checking and all of the database work required to credit a prior charge. It calls doCredit to handle the direct communication with the service.
[in] | pccardid | The internal id of the credit card to credit |
[in] | pcvv | The CVV/CCV code of the credit card to credit |
[in] | pamount | The total amount to credit |
[in] | ptax | The subportion of the total which is tax |
[in] | ptaxexempt | Whether or not this transaction is tax exempt |
[in] | pfreight | The subportion of the total which is freight |
[in] | pduty | The subportion of the total which is customs duty |
[in] | pcurrid | The currency of the amount to credit |
[in,out] | pneworder | The order number associated with this credit |
[in,out] | preforder | The reference number (preforder) generated by the charge transaction |
[in,out] | pccpayid | When calling the method, pccpayid should be the ccpay_id of the original charge record. On return, this is the ccpay_id of the credit record. |
[in] | preftype | Either cohead or cashrcpt or blank |
[in,out] | prefid | The cashrcpt_id or cohead_id associated with this transaction |
|
static |
Processes credit transactions.
This version of credit is intended for use by scripts. Instead of passing all of the arguments in order, this method allows creating a QtScript object and setting properties on this object by name. Then the script can pass this object to credit.
pinput | The parameter list to unpack and use to call credit |
|
staticprotected |
Convert between two currencies.
This is slightly different than the version in the CurrDisplay widget because credit card processing has special error reporting needs.
pfrom | The source currency | |
pto | The destination currency | |
pamount | The value of the transaction in the source currency | |
[out] | perror | The CreditCardProcessor error code for a failed conversion |
|
protectedvirtual |
|
virtual |
Return the default port expected by the subclass.
This can differ depending on whether running in live or test mode. It is the subclass' responsibility to set both default ports.
|
virtual |
Return the default server expected by the subclass.
This can differ depending on whether running in live or test mode. It is the subclass' responsibility to set both default servers.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
protectedvirtual |
Placeholder for subclasses to override.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and VerisignProcessor.
|
protectedvirtual |
Placeholder for subclasses to override.
Reimplemented in CyberSourceProcessor, AuthorizeDotNetProcessor, YourPayProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
static |
Returns the most recent error message set by CreditCardProcessor or one of its subclasses.
|
static |
Returns the error message associated with the given pcode.
|
protectedvirtual |
Handle fraud checking as determined by the system configuration.
Reimplemented in YourPayProcessor.
|
static |
Get a new instance of a specific CreditCardProcessor subclass.
This method is used to retrieve a CreditCardProcessor for actual use by the application, rather than calling CreditCardProcessor::CreditCardProcessor.
getProcessor retrieves the right subclass for the current configuration.
pcompany | This causes the method to instantiate the subclass for the named service, rather than the configured service. pcompany should be an empty string except when checking for errors in configCC |
|
virtual |
Returns whether the subclass handles checks.
|
virtual |
Returns whether the subclass handles credit cards.
Reimplemented in CyberSourceProcessor, YourPayProcessor, AuthorizeDotNetProcessor, PaymentechProcessor, and ExternalCCProcessor.
|
virtual |
Returns whether credit card processing is configured in live mode.
|
virtual |
Returns whether credit card processing is configured in test mode.
|
static |
Print the CCReceipt report for a credit card transaction.
pccpayid | The internal id of the transaction for which to print the receipt |
|
virtual |
Reset error handling internal settings so previous transactions don't interfere with new transactions.
Reimplemented in YourPayProcessor.
|
virtual |
Reverse a preauthorization.
This method performs application-level error checking and all of the database work required to reverse a prior preauthorization. This makes available to the card holder the funds that have been reserved by that preauthorization.
pamount | The amount to be reversed, not necessarily the same as the amount originally authorized. |
pcurrid | The currency of the amount. |
pneworder | The order number associated with the preauthorization |
preforder | The reference number (preforder) generated by the preauthorization transaction |
pccpayid | The internal id of the preauthorization transaction |
preftype | Either cohead or cashrcpt or blank |
prefid | The cashrcpt_id or cohead_id associated with the preauthorization transaction |
|
protectedvirtual |
Send an HTTP request to the configured credit card service and wait for its response.
This method is intended to be called by subclasses of CreditCardProcessor. It sends a message to the service using HTTP or HTTPS, as set by the configuration, and waits for a response. If necessary it applies a local certificate for bidirectional encryption.
It is the caller's responsibility to format an appropriate message and decode the response.
[in] | prequest | The string to send via HTTP |
[out] | presponse | The string returned by the service |
|
virtual |
Test whether common credit card processing configuration options are consistent.
Calls toTestConfiguration to check if service-specific options are set.
Reimplemented in ExternalCCProcessor.
|
static |
|
protectedvirtual |
Insert into or update the ccpay table based on parameters extracted from the credit card processing service' response to a transaction request.
|
virtual |
Processes void transactions.
This method performs application-level error checking and all of the database work required to void a prior transaction. It calls doVoid to handle the direct communication with the service.
pccpayid | This should be the ccpay_id of the original transaction record. |
|
static |
Processes void transactions.
This version of voidPrevious is intended for use by scripts. Instead of passing all of the arguments in order, this method allows creating a QtScript object and setting properties on this object by name. Then the script can pass this object to voidPrevious.
pinput | The parameter list to unpack and use to call voidPrevious |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
staticprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Generated on Fri Jul 10 2015 | xTuple ERP Programmer Reference, Version 4.9.0 | 1.8.10 |