Commit cd2b790f by guanghui.cui

新增接口查询,支付、退款接口更新

parent f58de8d8
......@@ -78,3 +78,13 @@ QByteArray FMPePay::DockRefundRespond()
{
return d_func()->DockRefundRespond();
}
void FMPePay::DockQueryRequest(const QByteArray &json)
{
d_func()->DockQueryRequest(json);
}
QByteArray FMPePay::DockQueryRespond()
{
return d_func()->DockQueryRespond();
}
......@@ -28,6 +28,8 @@ public:
void DockRefundRequest(const QByteArray &json);
QByteArray DockRefundRespond();
void DockQueryRequest(const QByteArray &json);
QByteArray DockQueryRespond();
protected slots:
void InitService();
......
......@@ -19,6 +19,18 @@
#define FMP_EPAY_ANIMATION "needanimation"
#define FMP_EPAY_TIMEOUT "timeout"
//支付请求
#define FMP_EPAY_POS_VER "pos_ver"
#define FMP_EPAY_FMCMD "fm_cmd"
#define FMP_EPAY_ORDER_AMOUNT "order_amount"
#define FMP_EPAY_PAID_AMOUNT "paid_amount"
#define FMP_EPAY_UNDIS_AMOUNT "undis_amount"
#define FMP_EPAY_BARCODE "barcode"
#define FMP_EPAY_PRODUCTS "products"
#define FMP_EPAY_CONSUME_NUM "consume_num"
#define FMP_EPAY_PRICE "price"
#define FMP_EPAY_PID "pid"
//
#define FMP_JKEY_POS_TRANSID "trans_id"
#define FMP_JKEY_FM_ORDERID "fm_id"
......
......@@ -28,6 +28,9 @@ public:
virtual void DockRefundRequest(const QByteArray &json) = 0;
virtual QByteArray DockRefundRespond() = 0;
virtual void DockQueryRequest(const QByteArray &json) = 0;
virtual QByteArray DockQueryRespond() = 0;
signals:
void TriggerInit();
void TriggerUninit();
......
......@@ -160,23 +160,29 @@ void FMPePayPrivate::Init()
hash[FMP_EPAY_STATIONID] = _origin_request["pos_id"].toVariant();
hash[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID].toVariant();
hash[FMP_EPAY_BUSINESSDATE] = _origin_request[FMP_EPAY_BUSINESSDATE].toVariant();
QJsonObject trans = _origin_request["transactions"].toObject();
QJsonObject trans = _origin_request["transaction"].toObject();
if (_origin_request["fm_cmd"].toInt() == 10031) {
hash["amount"] = trans["order_amount"].toInt() - trans["paid_amount"].toInt();
hash["amount"] = _origin_request["order_amount"].toInt() - _origin_request["paid_amount"].toInt();
}
else if (_origin_request["fm_cmd"].toInt() == 10041) {
hash["amount"] = trans["refund_amount"].toVariant();
hash[FMP_JKEY_FM_ORDERID] = trans[FMP_JKEY_FM_ORDERID].toVariant();
hash[FMP_JKEY_FM_ORDERID] = trans["fm_order_id"].toVariant();
if (trans.contains("refund_amount") && trans["refund_amount"].toInt() != 0
&& trans.contains(FMP_JKEY_FM_ORDERID) && !trans[FMP_JKEY_FM_ORDERID].toString().isEmpty()
|| trans.contains(FMP_JKEY_PAY_TRANSID) && !trans[FMP_JKEY_PAY_TRANSID].toString().isEmpty()) {
&& trans.contains("fm_order_id") && !trans["fm_order_id"].toString().isEmpty()
|| trans.contains("trans_id") && !trans["trans_id"].toString().isEmpty()) {
connect(this, &FMPePayPrivate::finished, this, &FMPePayPrivate::confirmClicked);
connect(this, &FMPePayPrivate::error, this, &FMPePayPrivate::confirmClicked);
ControlRefundJson(trans);
return;
}
}
else if(_origin_request["fm_cmd"].toInt() == 10030){
connect(this, &FMPePayPrivate::finished, this, &FMPePayPrivate::confirmClicked);
connect(this, &FMPePayPrivate::error, this, &FMPePayPrivate::confirmClicked);
ControlQueryJson();
return;
}
QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray products;
int i = 1;
......@@ -247,24 +253,28 @@ QByteArray FMPePayPrivate::DockPayRespond()
if (!_api_abort) {
_docked_response = QJsonObject();
_docked_response[FMP_EPAY_STATUSCODE] = _origin_response[FMP_EPAY_STATUSCODE];
_docked_response["status_code"] = _origin_response[FMP_EPAY_STATUSCODE];
_docked_response[FMP_EPAY_ERRORMSG] = _origin_response.contains("msg") ? _origin_response[FMP_EPAY_ERRORMSG] : QJsonValue("");
_docked_response["prompt"] = 0;
if (_origin_response["statusCode"].toInt() == 100) {
_docked_response["fm_transId"] = _origin_response["pay_transId"];
_docked_response[FMP_EPAY_FMID] = _origin_response["fmId"];
_docked_response["fm_trans_id"] = _origin_response["pay_transId"];
_docked_response["fm_order_id"] = _origin_response["fmId"];
_docked_response[SQL_KEY_TRANSID] = _origin_response[SQL_KEY_TRANSID];
_docked_response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"];
_docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response[FMP_EPAY_INVOICE_AMOUNT];
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt() + _origin_response["pcoupon_amount"].toInt();
_docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response.contains(FMP_EPAY_INVOICE_AMOUNT) ? _origin_response[FMP_EPAY_INVOICE_AMOUNT]:QJsonValue(0);
int platform_discount=0,merchant_discount=0;
merchant_discount=_origin_response.contains("pcoupon_amount") ? _origin_response["pcoupon_amount"].toInt():0;
platform_discount=_origin_response.contains("mcoupon_amount") ? _origin_response["mcoupon_amount"].toInt():0;
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = merchant_discount + platform_discount;
QJsonArray pay_channels;
QJsonObject pay_ch;
pay_ch[FMP_EPAY_PAY_ID] = _origin_response["pay_ebcode"];
pay_ch[FMP_EPAY_PAY_DESC] = _origin_response["pay_id"];
pay_ch["code"] = _origin_response["code"];
pay_ch["pay_amount"] = _origin_response["total_amount"];
pay_ch["pay_account"] = _origin_response["pay_acount"];
pay_ch["platform_discount"] = _origin_response["mcoupon_amount"];
pay_ch["merchant_discount"] = _origin_response["pcoupon_amount"];
pay_ch["pay_account"] =_origin_response.contains("pay_acount") ? _origin_response["pay_acount"]:QJsonValue("");
pay_ch["platform_discount"] = platform_discount;
pay_ch["merchant_discount"] = merchant_discount;
if (_origin_response.contains("ext")) {
pay_ch["ext"] = _origin_response["ext"];
}
......@@ -274,6 +284,7 @@ QByteArray FMPePayPrivate::DockPayRespond()
}
_origin_response = QJsonObject();
qDebug()<<"_docked_response : " << _docked_response;
json = QJsonDocument(_docked_response).toJson();
}
......@@ -309,6 +320,59 @@ QByteArray FMPePayPrivate::DockRefundRespond()
return json;
}
void FMPePayPrivate::DockQueryRequest(const QByteArray &json)
{
_is_api = true;
_api_abort = false;
_origin_request = QJsonDocument::fromJson(json).object();
}
QByteArray FMPePayPrivate::DockQueryRespond()
{
QByteArray json = "{\"statusCode\":106, \"msg\":\"\347\252\227\345\217\243\345\267\262\345\205\263\351\227\255\357\274\214\344\272\244\346\230\223\345\217\226\346\266\210\", \"prompt\":0}";
_api_evt.exec();
qDebug()<<"query _origin_response : " << _origin_response;
if (!_api_abort) {
_docked_response = QJsonObject();
_docked_response["status_code"] = _origin_response["statusCode"];
if (_origin_response.contains("msg")) {
_docked_response["msg"] = _origin_response["msg"];
}
_docked_response["prompt"] = 0;
if (_origin_response["statusCode"].toInt() == 100){
_docked_response["fm_trans_id"] = _origin_response["pay_transId"];
_docked_response["fm_order_id"] = _origin_response["fmId"];
_docked_response[SQL_KEY_TRANSID] = _origin_response[SQL_KEY_TRANSID];
_docked_response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"];
_docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response.contains(FMP_EPAY_INVOICE_AMOUNT) ? _origin_response[FMP_EPAY_INVOICE_AMOUNT]:QJsonValue(0);
int platform_discount=0,merchant_discount=0;
merchant_discount=_origin_response.contains("pcoupon_amount") ? _origin_response["pcoupon_amount"].toInt():0;
platform_discount=_origin_response.contains("mcoupon_amount") ? _origin_response["mcoupon_amount"].toInt():0;
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = merchant_discount + platform_discount;
QJsonObject pay_ch;
QJsonArray pay_channels;
pay_ch[FMP_EPAY_PAY_ID] = _origin_response["pay_ebcode"];
pay_ch[FMP_EPAY_PAY_DESC] = _origin_response.contains("pay_id") ? _origin_response["pay_id"]:QJsonValue("");
pay_ch["code"] = _origin_response.contains("code") ? _origin_response["code"]:QJsonValue("");
pay_ch["pay_amount"] = _origin_response["total_amount"];
pay_ch["pay_account"] =_origin_response.contains("pay_acount") ? _origin_response["pay_acount"]:QJsonValue("");
pay_ch["platform_discount"] = platform_discount;
pay_ch["merchant_discount"] = merchant_discount;
if (_origin_response.contains("ext")) {
pay_ch["ext"] = _origin_response["ext"];
}
pay_channels.append(pay_ch);
_docked_response[FMP_EPAY_PAY_IDS] = pay_channels;
}
_origin_response = QJsonObject();
json = QJsonDocument(_docked_response).toJson();
qDebug()<<"query _docked_response : " << _docked_response;
}
return json;
}
void FMPePayPrivate::OnFinish()
{
if (_origin_response.isEmpty()) {
......@@ -347,6 +411,7 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
return ;
}
qDebug()<<"pay json : " << _docked_request;
FMP_INFO() << "pay json : " << _docked_request;
QString errors;
......@@ -465,6 +530,7 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
}
FMP_INFO() << outjson;
qDebug()<<"outjson:"<<outjson;
int statusCode = outjson[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt();
int reqType = json[FMP_EPAY_REQUESTTYPE].toInt();
......@@ -665,6 +731,36 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
});
}
void FMPePayPrivate::ControlQueryJson()
{
QtConcurrent::run( [&, this]()
{
Q_Q(FMPePay);
GetQueryJson();
FMP_INFO() << "query json : " << _docked_request;
qDebug()<<"query json : " << _docked_request;
QString errors;
QJsonObject outjson;
if(!HttpPost(outjson, _docked_request ,errors, q->_time_out)) {
emit error(errors);
_origin_response = outjson;
}
else {
if (_is_api) {
outjson.insert(FMP_EPAY_TRANSID, _docked_request[FMP_EPAY_TRANSID].toString());
_origin_response = outjson;
emit finished(outjson);
}
}
disconnect(this, &FMPePayPrivate::finished, this, &FMPePayPrivate::confirmClicked);
connect(this, &FMPePayPrivate::error, this, &FMPePayPrivate::confirmClicked);
});
}
void FMPePayPrivate::ControlReverseJson()
{
_reverse_flag = true;
......@@ -694,22 +790,22 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code)
transaction.insert(FMP_EPAY_TRANSTRACTION_CODE, code);
if (_is_api) {
QJsonObject origin_trans = _origin_request["transactions"].toObject();
transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = (int)(origin_trans["order_amount"].toDouble() + 0.005);
QJsonObject pos_trans = _origin_request["transactions"].toObject();
QJsonArray pos_products = pos_trans["products"].toArray();
transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = _origin_request[FMP_EPAY_ORDER_AMOUNT].toInt()-_origin_request[FMP_EPAY_PAID_AMOUNT].toInt();
transaction["undis_amount"]=_origin_request[FMP_EPAY_UNDIS_AMOUNT].toInt();
QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray products;
int i = 1;
foreach (QJsonValue v, pos_products) {
QJsonObject o = v.toObject();
o["seq"] = i++;
products.append(o);
}
transaction["products"] = products;
_docked_request[FMP_EPAY_STOREID] = _origin_request[FMP_EPAY_STOREID];
_docked_request[FMP_EPAY_STATIONID] = _origin_request["pos_id"];
_docked_request[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID];
_docked_request[FMP_EPAY_BUSINESSDATE] = _origin_request[FMP_EPAY_BUSINESSDATE];
transaction["products"] = products;
qDebug()<<"products:"<<products;
_docked_request.insert( FMP_EPAY_STOREID, _origin_request[FMP_EPAY_STOREID].toString());
_docked_request.insert( FMP_EPAY_TRANSID, _origin_request[FMP_EPAY_TRANSID].toString());
_docked_request.insert( FMP_EPAY_STATIONID, _origin_request["pos_id"].toString());
_docked_request.insert( FMP_EPAY_OPERATORID, _origin_request[FMP_EPAY_OPERATORID].toString());
_docked_request.insert( FMP_EPAY_VER, _origin_request[FMP_EPAY_POS_VER].toInt());
}
else {
transaction.insert(FMP_EPAY_TRANSTRACTION_AMOUNT, (int)((sum.toDouble() + 0.005) * 100));
......@@ -717,19 +813,15 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code)
_docked_request.insert( FMP_EPAY_STOREID, q->_store_id);
_docked_request.insert( FMP_EPAY_STATIONID, q->_station_id);
_docked_request.insert( FMP_EPAY_OPERATORID, q->_operator_id);
_docked_request.insert( FMP_EPAY_VER, ver);
}
transactionarry.append( transaction);
_docked_request.insert( FMP_EPAY_VER, ver);
_docked_request.insert( FMP_EPAY_REQUESTTYPE, 72);
_docked_request.insert( FMP_EPAY_PARTNERID, q->_partner_id.toInt());
_docked_request.insert( FMP_EPAY_CLIENTREQCOUNT, (int)((++s_ClientReqCount)%=10000000));
// _docked_request.insert( FMP_EPAY_TRANSID, QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));
_docked_request.insert(FMP_EPAY_TRANSID, _origin_request[FMP_EPAY_TRANSID].toString());
_docked_request.insert( FMP_EPAY_TRANSTRACTION, transactionarry);
_docked_request.insert( FMP_EPAY_TRANSTRACTION, transactionarry);
return true;
}
......@@ -749,18 +841,18 @@ bool FMPePayPrivate::GetRefundJson(const QJsonObject &trans)
int ver = 2;
if(trans.contains(FMP_JKEY_FM_ORDERID) && !trans[FMP_JKEY_FM_ORDERID].toString().isEmpty())
if(trans.contains("fm_order_id") && !trans["fm_order_id"].toString().isEmpty())
{
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_FMID, trans[FMP_JKEY_FM_ORDERID]);
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_FMID, trans["fm_order_id"]);
if (_is_api) {
QJsonObject orig_trans = _origin_request["transactions"].toObject();
QJsonObject orig_trans = _origin_request["transaction"].toObject();
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)(orig_trans["refund_amount"].toDouble() + 0.005));
}
else {
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)(trans[FMP_JKEY_REFUND_AMOUNT].toDouble() + 0.005));
}
// _docked_request.insert(FMP_EPAY_TRANSID, QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));
_docked_request.insert(FMP_EPAY_TRANSID, _origin_request[FMP_EPAY_TRANSID].toString());
_docked_request.insert(FMP_EPAY_TRANSID, trans[FMP_EPAY_TRANSID].toString());
}
else {
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_EBCODE, trans[FMP_JKEY_PAY_EBCODE]);
......@@ -789,6 +881,7 @@ bool FMPePayPrivate::GetRefundJson(const QJsonObject &trans)
_docked_request.insert( FMP_EPAY_OPERATORID, q->_operator_id);
_docked_request.insert( FMP_EPAY_TRANSTRACTION, transactionarry);
}
qDebug()<<"_docked_request:"<<_docked_request;
return true;
}
......@@ -797,3 +890,19 @@ void FMPePayPrivate::GetReverseJson()
{
_docked_request[FMP_EPAY_REQUESTTYPE] = 3;
}
bool FMPePayPrivate::GetQueryJson()
{
_docked_request = QJsonObject::fromVariantMap( QVariantMap() );
_docked_request.insert( FMP_EPAY_VER, 2);
_docked_request.insert( FMP_EPAY_REQUESTTYPE, 52);
_docked_request.insert(FMP_EPAY_TRANSID, _origin_request[FMP_EPAY_TRANSID]);
_docked_request.insert("fmid", _origin_request["fm_order_id"]);
_docked_request[FMP_EPAY_STOREID] = _origin_request[FMP_EPAY_STOREID];
_docked_request[FMP_EPAY_STATIONID] = _origin_request["pos_id"];
_docked_request[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID];
_docked_request[FMP_EPAY_BUSINESSDATE] = _origin_request[FMP_EPAY_BUSINESSDATE];
_docked_request["partnerId"] = _origin_request["partnerId"];
return true;
}
......@@ -31,6 +31,8 @@ public:
void ControlRefundJson(const QJsonObject &trans);
void ControlQueryJson();
void GetCheckMode(QString sum);
void GetMode();
......@@ -43,6 +45,9 @@ public:
void DockRefundRequest(const QByteArray &json);
QByteArray DockRefundRespond();
void DockQueryRequest(const QByteArray &json);
QByteArray DockQueryRespond();
private:
void ControlReverseJson();
......@@ -52,6 +57,8 @@ private:
bool GetPayJson(const QString &sum, const QString &code);
bool GetQueryJson();
bool HttpPost(QJsonObject& outjson, QJsonObject json, QString &error, int timeout = 60);
bool CheckReturnJson(QByteArray data, QJsonObject &returnjson);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment