int PaymentechProcessor::doAuthorize(const int pccardid, const int 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) { if (DEBUG) qDebug("Paymentech:doAuthorize(%d, %d, %f, %f, %d, %f, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, ptax, ptaxexempt, pfreight, pduty, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = pamount; //double tax = ptax; //double freight = pfreight; //double duty = pduty; int currid = pcurrid; QString request; returnValue = buildCommon(pneworder, pccardid, pcvv, amount, currid, request, "AU"); if (returnValue != 0) return returnValue; QString response; returnValue = sendViaHTTP(request, response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "A", amount, currid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int YourPayProcessor::doChargePreauthorized(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("YP:doChargePreauthorized(%d, %d, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = currToCurr(pcurrid, _ypcurrid, pamount, &returnValue); if (returnValue < 0) return returnValue; QDomDocument request; returnValue = buildCommon(pccardid, pcvv, amount, request, "POSTAUTH"); if (returnValue != 0) return returnValue; QDomElement elem = request.createElement("transactiondetails"); request.documentElement().appendChild(elem); CREATECHILDTEXTNODE(elem, "oid", preforder); CREATECHILDTEXTNODE(elem, "terminaltype", "UNSPECIFIED"); QString response; returnValue = sendViaHTTP(request.toString(), response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "CP", pamount, pcurrid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int PaymentechProcessor::doVoidPrevious(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, QString &papproval, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("Paymentech:doVoidPrevious(%d, %d, %f, %d, %s, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), papproval.toAscii().data(), pccpayid); QString tmpErrorMsg = _errorMsg; int returnValue = 0; double amount = pamount; int currid = pcurrid; QString request; returnValue = buildCommon(pneworder, pccardid, pcvv, amount, currid, request, "AR"); if (returnValue != 0) return returnValue; QString response; returnValue = sendViaHTTP(request, response); _errorMsg = tmpErrorMsg; if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "V", amount, currid, pneworder, preforder, pccpayid, pparams); if (! tmpErrorMsg.isEmpty()) _errorMsg = tmpErrorMsg; return returnValue; }
int PaymentechProcessor::doChargePreauthorized(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("Paymentech:doChargePreauthorized(%d, %d, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = pamount; int currid = pcurrid; QString request; returnValue = buildCommon(pneworder, pccardid, pcvv, amount, currid, request, "AU"); if (returnValue != 0) return returnValue; QString response; returnValue = sendViaHTTP(request, response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "CP", amount, currid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int AuthorizeDotNetProcessor::doCharge(const int pccardid, const int 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) { if (DEBUG) qDebug("AN:doCharge(%d, %d, %f, %f, %d, %f, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, ptax, ptaxexempt, pfreight, pduty, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = pamount; double tax = ptax; double freight = pfreight; double duty = pduty; int currid = pcurrid; if (_metrics->value("CCANCurrency") != "TRANS") { currid = _metrics->value("CCANCurrency").toInt(); amount = currToCurr(pcurrid, currid, pamount, &returnValue); if (returnValue < 0) return returnValue; tax = currToCurr(pcurrid, currid, ptax, &returnValue); if (returnValue < 0) return returnValue; freight = currToCurr(pcurrid, currid, pfreight, &returnValue); if (returnValue < 0) return returnValue; duty = currToCurr(pcurrid, currid, pduty, &returnValue); if (returnValue < 0) return returnValue; } QString request; returnValue = buildCommon(pccardid, pcvv, amount, currid, request, "AUTH_CAPTURE"); if (returnValue != 0) return returnValue; APPENDFIELD(request, "x_tax", QString::number(tax)); APPENDFIELD(request, "x_tax_exempt", ptaxexempt ? "TRUE" : "FALSE"); APPENDFIELD(request, "x_freight", QString::number(freight)); APPENDFIELD(request, "x_duty", QString::number(duty)); if (! preforder.isEmpty()) APPENDFIELD(request, "x_po_num", preforder); QString response; returnValue = sendViaHTTP(request, response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "C", amount, currid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int PaymentechProcessor::doVoidPrevious(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, QString &papproval, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("Paymentech:doVoidPrevious(%d, %d, %f, %d, %s, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), papproval.toAscii().data(), pccpayid); QString tmpErrorMsg = _errorMsg; int returnValue = 0; double amount = pamount; int currid = pcurrid; QString authcode; QString respdate; XSqlQuery ccq; ccq.prepare("SELECT ccpay_status, ccpay_r_approved, ccpay_r_code, ccpay_yp_r_tdate FROM ccpay WHERE (ccpay_id=:ccpayid);"); ccq.bindValue(":ccpayid", pccpayid); ccq.exec(); if(!ccq.first()) { return -1; } if(ccq.value("ccpay_status").toString() == "C" && ccq.value("ccpay_r_approved").toString() != "SUBMITTED") { return -60; // we can not void a processed charge. } authcode = ccq.value("ccpay_r_code").toString(); respdate = ccq.value("ccpay_yp_r_tdate").toString(); QString request; returnValue = buildCommon(pneworder, pccardid, pcvv, amount, currid, request, "AR", authcode, respdate); // TODO: This may need to be different if it was charged already if (returnValue != 0) return returnValue; QString response; returnValue = sendViaHTTP(request, response); _errorMsg = tmpErrorMsg; if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "V", amount, currid, pneworder, preforder, pccpayid, pparams); if (! tmpErrorMsg.isEmpty()) _errorMsg = tmpErrorMsg; return returnValue; }
int AuthorizeDotNetProcessor::doVoidPrevious(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, QString &papproval, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("AN:doVoidPrevious(%d, %d, %f, %d, %s, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), papproval.toAscii().data(), pccpayid); QString tmpErrorMsg = _errorMsg; int returnValue = 0; double amount = pamount; int currid = pcurrid; if (_metrics->value("CCANCurrency") != "TRANS") { currid = _metrics->value("CCANCurrency").toInt(); amount = currToCurr(pcurrid, currid, pamount, &returnValue); if (returnValue < 0) { _errorMsg = tmpErrorMsg; return returnValue; } } QString request; returnValue = buildCommon(pccardid, pcvv, amount, currid, request, "VOID"); if (returnValue != 0) return returnValue; APPENDFIELD(request, "x_trans_id", preforder); QString response; returnValue = sendViaHTTP(request, response); _errorMsg = tmpErrorMsg; if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "V", amount, currid, pneworder, preforder, pccpayid, pparams); if (! tmpErrorMsg.isEmpty()) _errorMsg = tmpErrorMsg; return returnValue; }
int YourPayProcessor::doVoidPrevious(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, QString &papproval, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("YP:doVoidPrevious(%d, %d, %f, %d, %s, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), papproval.toAscii().data(), pccpayid); int returnValue = 0; double amount = currToCurr(pcurrid, _ypcurrid, pamount, &returnValue); if (returnValue < 0) return returnValue; // distinguish void errors from errors from problems that cause us to void QString tmpErrorMsg = _errorMsg; QDomDocument request; returnValue = buildCommon(pccardid, pcvv, amount, request, "VOID"); if (returnValue != 0) return returnValue; QDomElement elem = request.createElement("transactiondetails"); request.documentElement().appendChild(elem); CREATECHILDTEXTNODE(elem, "oid", preforder); CREATECHILDTEXTNODE(elem, "terminaltype", "UNSPECIFIED"); QString response; returnValue = sendViaHTTP(request.toString(), response); _errorMsg = tmpErrorMsg; if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "V", pamount, pcurrid, pneworder, preforder, pccpayid, pparams); _errorMsg = tmpErrorMsg; return returnValue; }
int YourPayProcessor::doCredit(const int pccardid, const int 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) { if (DEBUG) qDebug("YP:doCredit(%d, %d, %f, %f, %d, %f, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, ptax, ptaxexempt, pfreight, pduty, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = currToCurr(pcurrid, _ypcurrid, pamount, &returnValue); if (returnValue < 0) return returnValue; QDomDocument request; returnValue = buildCommon(pccardid, pcvv, amount, request, "CREDIT"); if (returnValue != 0) return returnValue; QDomElement elem = request.createElement("transactiondetails"); request.documentElement().appendChild(elem); CREATECHILDTEXTNODE(elem, "oid", preforder); CREATECHILDTEXTNODE(elem, "reference_number", pneworder); CREATECHILDTEXTNODE(elem, "terminaltype", "UNSPECIFIED"); CREATECHILDTEXTNODE(elem, "taxexempt", ptaxexempt ? "Y" : "N"); CREATECHILDTEXTNODE(request.elementsByTagName("payment").at(0), "tax", QString::number(ptax)); QString response; returnValue = sendViaHTTP(request.toString(), response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "R", pamount, pcurrid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int AuthorizeDotNetProcessor::doChargePreauthorized(const int pccardid, const int pcvv, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("AN:doChargePreauthorized(%d, %d, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = pamount; int currid = pcurrid; if (_metrics->value("CCANCurrency") != "TRANS") { currid = _metrics->value("CCANCurrency").toInt(); amount = currToCurr(pcurrid, currid, pamount, &returnValue); if (returnValue < 0) return returnValue; } QString request; returnValue = buildCommon(pccardid, pcvv, amount, currid, request, "PRIOR_AUTH_CAPTURE"); if (returnValue != 0) return returnValue; APPENDFIELD(request, "x_trans_id", preforder); QString response; returnValue = sendViaHTTP(request, response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "CP", amount, currid, pneworder, preforder, pccpayid, pparams); return returnValue; }
int YourPayProcessor::doCharge(const int pccardid, const int 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) { if (DEBUG) qDebug("YP:doCharge(%d, %d, %f, %f, %d, %f, %f, %d, %s, %s, %d)", pccardid, pcvv, pamount, ptax, ptaxexempt, pfreight, pduty, pcurrid, pneworder.toAscii().data(), preforder.toAscii().data(), pccpayid); int returnValue = 0; double amount = currToCurr(pcurrid, _ypcurrid, pamount, &returnValue); if (returnValue < 0) return returnValue; QDomDocument request; returnValue = buildCommon(pccardid, pcvv, amount, request, "SALE"); if (returnValue != 0) return returnValue; QDomElement elem; elem = request.createElement("transactiondetails"); request.documentElement().appendChild(elem); // in case we're reusing an order number QString oidstr = pneworder; XSqlQuery ypq; ypq.prepare("SELECT MAX(COALESCE(ccpay_order_number_seq, -1)) + 1" " AS next_seq " " FROM ccpay " " WHERE (ccpay_order_number=:ccpay_order_number);"); ypq.bindValue(":ccpay_order_number", pneworder); ypq.exec(); if (ypq.first() && ! ypq.value("next_seq").isNull()) oidstr = oidstr + "-" + ypq.value("next_seq").toString(); else if (ypq.lastError().type() != QSqlError::NoError) { _errorMsg = errorMsg(-44); return -44; } CREATECHILDTEXTNODE(elem, "oid", oidstr); CREATECHILDTEXTNODE(elem, "terminaltype", "UNSPECIFIED"); CREATECHILDTEXTNODE(elem, "taxexempt", ptaxexempt ? "Y" : "N"); if (! preforder.isEmpty()) CREATECHILDTEXTNODE(elem, "ponumber", preforder); /* TODO: salesOrder.cpp had the following, but it doesn't appear to be useful except for having YP calculate shipping charges. since we don't use YP to calculate shipping and this is a SALE and not a CALCSHIPPING transaction, we won't bother for now. elem = request.createElement("shipping"); request.documentElement().appendChild(elem); CREATECHILDTEXTNODE(elem, "address1", _shipto_address1); CREATECHILDTEXTNODE(elem, "address2", _shipto_address2); CREATECHILDTEXTNODE(elem, "city", _shipto_city); CREATECHILDTEXTNODE(elem, "name", _shipto_name); CREATECHILDTEXTNODE(elem, "state", _shipto_state); CREATECHILDTEXTNODE(elem, "zip", _shipto_zip); */ CREATECHILDTEXTNODE(request.elementsByTagName("payment").at(0), "tax", QString::number(ptax)); QString response; returnValue = sendViaHTTP(request.toString(), response); if (returnValue < 0) return returnValue; returnValue = handleResponse(response, pccardid, "C", pamount, pcurrid, pneworder, preforder, pccpayid, pparams); return returnValue; }