Commit e81624bf by 李定达

1.调整日志打印路径;2.调整dll加载路径;3.日结单功能实现

parent ffcf864b
build-sbkpay-Desktop_Qt_5_5_1_MinGW_32bit-Debug/
build-sbkpay-Desktop_Qt_5_5_1_MSVC2010_32bit-Debug/
build-sbkpay-Desktop_Qt_5_5_1_MSVC2010_32bit-Release/
......@@ -11,9 +11,30 @@
#include <QJsonObject>
#include <QEventLoop>
#include <QJsonDocument>
#include <Windows.h>
typedef int (* GetValue) (char *, char *);
typedef int (* GetRSACret)(int ,const char *,const char *);
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
typedef int (__stdcall *GetValue) (char *, char *);
typedef int (__stdcall *GetRSACret)(int ,const char *,const char *);
void Control::GetProcPath(char * pathBuf)
{
int curPos;
GetModuleFileNameA((HMODULE)&__ImageBase, pathBuf, MAX_PATH);
curPos = strlen(pathBuf) - 1;
while('\\' != pathBuf[curPos])
{
curPos--;
}
curPos++;
pathBuf[curPos] = '\0';
}
Control::Control(QObject *parent) : QObject(parent), _widget(NULL)
{
......@@ -72,7 +93,14 @@ void Control::InitModel()
bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, QString &error)
{
QLibrary lib(qApp->applicationDirPath() + "/" + "FreemudWrapper.dll");
char mod[MAX_PATH] = { 0 };
GetProcPath(mod);
QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll");
QLOG_INFO() << QString(mod) + "\\" + "FreemudWrapper.dll";
if(lib.load())
{
......@@ -121,7 +149,11 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
bool Control::GetRSA(QString &error)
{
QLibrary lib(qApp->applicationDirPath() + "/" + "FreemudWrapper.dll");
char mod[MAX_PATH] = { 0 };
GetProcPath(mod);
QLibrary lib(QString(mod) + "\\" + "FreemudWrapper.dll");
int rlt = 0;
error.clear();
......@@ -136,7 +168,7 @@ bool Control::GetRSA(QString &error)
QEventLoop loop;
QtConcurrent::run( [ this, &loop, &rlt, &error, getrsacret]()
{
int i = FMTool::GetString(_request.Reserved1, 48).toInt();
int i = FMTool::GetString(_request.PlatNo, 4).toInt();
QString storeID = FMTool::GetString(_request.StoreNo, 20);
QString PosNO = FMTool::GetString(_request.DeviceNo, 6);
rlt = getrsacret(i, storeID.toLatin1().data(), PosNO.toLatin1().data());
......@@ -213,6 +245,8 @@ void Control::Request(ReqType type, QStringList list)
if(rlt)
rlt = Control::GetJson(type, rtjson, outdata, error);
else
SetResPonseWithMessage("23", error);
_lock.lock();
if(_widget != NULL)
......
......@@ -18,6 +18,10 @@ public:
void Start(const char *indata, char *outdata);
static void GetProcPath(char *pathBuf);
signals:
void Exits();
private:
void GetResponse(QString errormessage, AlipayResponse &response);
......
......@@ -128,8 +128,8 @@ public:
static void SetString(void *beginptr, int size, const QString &in)
{
char buf[MAX_CHILED_LEN] = { 0 };
char tmpbuf[MAX_CHILED_LEN] = { 0 };
char buf[MAX_PRINT_LEN] = { 0 };
char tmpbuf[MAX_PRINT_LEN] = { 0 };
memset(beginptr, ' ', size);
......@@ -138,9 +138,9 @@ public:
strcpy(buf, in.toUtf8().data());
int len = UTF8ToGBK((unsigned char *)buf, (unsigned char *)tmpbuf, MAX_CHILED_LEN);
int len = UTF8ToGBK((unsigned char *)buf, (unsigned char *)tmpbuf, MAX_PRINT_LEN);
strncpy((char *)beginptr, tmpbuf, len - 1);
memcpy((char *)beginptr, tmpbuf, len - 1);
//qDebug() << tmpbuf;
......
......@@ -24,6 +24,7 @@
#define JSON_KEY_FMID "fmId"
#define JSON_KEY_TRANSAMOUNT "transAmount"
#define JSON_KEY_REFUNDAMOUT "refundAmount"
#define JSON_KEY_ENDTIME "endTime"
//response
#define JSON_KEY_MESSAGE "message"
......@@ -33,6 +34,7 @@
#define JSON_KEY_PRINT "print"
#define JSON_KEY_UNAMOUNT "undiscountAmount"
#define JSON_KEY_PARTORDERID "partnerOrderId"
//array products
#define JSON_KEY_PRODUCTS "products"
......
......@@ -23,7 +23,7 @@ HostWidget::HostWidget(QWidget *parent) :
_curr_show_widget = NULL;
ui->btn_mananger_print->setEnabled(false);
//ui->btn_mananger_print->setEnabled(false);
ui->btn_mananger_check->setEnabled(false);
InitWidget();
......@@ -61,7 +61,8 @@ void HostWidget::ShowWidget(QWidget *showwidget)
}
_widgetlist.at(i)->hide();
}
this->show();
//this->show();
this->showFullScreen();
}
void HostWidget::InitWidget()
......@@ -150,18 +151,6 @@ void HostWidget::ShowWithRequest(AlipayRequest request)
ui->btn_pay_exit->setText(QString::fromLocal8Bit("取消退款"));
ui->label_pay_money->setText(QString::fromLocal8Bit("退款 ¥ %1").arg(Amount));
}
if(reqtype.compare("80") == 0)
{
ShowWidget(ui->pay);
_curr_show_widget = ui->pay;
}
if(reqtype.compare("90") == 0)
{
ShowWidget(ui->pay);
_curr_show_widget = ui->pay;
}
}
void HostWidget::ShowWiteMGS(ReqType type, bool flag, QString message)
......@@ -226,6 +215,12 @@ void HostWidget::ShowWiteMGS(ReqType type, bool flag, QString message)
return ;
}
if(type == endday)
{
emit Exits();
return;
}
}
void HostWidget::on_btn_mananger_register_clicked()
......
......@@ -61,7 +61,7 @@ private:
json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE);
json.insert(JSON_KEY_REQTYPE, JSON_REQTYPE_PAY);
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.Reserved1), 48).toInt());
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.PlatNo), 4).toInt());
json.insert(JSON_KEY_STOREID, FMTool::GetString((const void *)&(request.StoreNo), 20));
json.insert(JSON_KEY_STATIONID, FMTool::GetString((const void *)&(request.DeviceNo), 6));
json.insert(JSON_KEY_OPERATORID, FMTool::GetString((const void *)&(request.CashierNo), 6));
......@@ -70,6 +70,7 @@ private:
json.insert(JSON_KEY_CODE, list[0]);
json.insert(JSON_KEY_TRANSAMOUNT, FMTool::GetString((const void *)&(request.Amount), 12).toInt());
json.insert(JSON_KEY_UNAMOUNT, FMTool::GetString((const void *)&(request.non_sale_Amount), 12).toInt());
json.insert(JSON_KEY_PARTORDERID, FMTool::GetString((const void *)&(request.Reserved1), 64));
int len = FMTool::GetString((const void *)&(request.item_line_qty), 2).toInt();
QJsonArray prod;
......@@ -111,7 +112,7 @@ private:
json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE);
json.insert(JSON_KEY_REQTYPE, JSON_REQTYPE_REFUND);
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.Reserved1), 48).toInt());
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.PlatNo), 4).toInt());
json.insert(JSON_KEY_STOREID, FMTool::GetString((const void *)&(request.StoreNo), 20));
json.insert(JSON_KEY_STATIONID, FMTool::GetString((const void *)&(request.DeviceNo), 6));
json.insert(JSON_KEY_OPERATORID, FMTool::GetString((const void *)&(request.CashierNo), 6));
......@@ -119,6 +120,7 @@ private:
json.insert(JSON_KEY_BUSINESSDATE, FMTool::GetString((const void *)&(request.BusinessDay), 8));
json.insert(JSON_KEY_FMID, list[0]);
json.insert(JSON_KEY_REFUNDAMOUT, FMTool::GetString((const void *)&(request.Amount), 12).toInt());
json.insert(JSON_KEY_PARTORDERID, FMTool::GetString((const void *)&(request.Reserved1), 64));
return true;
......@@ -126,13 +128,13 @@ private:
//日结
static bool GetDayEndJson(QJsonObject &json, const AlipayRequest &request, QStringList list)
{
if(list.size() != 1 || list[0].isEmpty())
return false;
json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE);
json.insert(JSON_KEY_REQTYPE, JSON_REQTYPE_REFUND);
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.Reserved1), 48));
json.insert(JSON_KEY_REQTYPE, JSON_REQTYPE_ENDDAY);
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.PlatNo), 4).toInt());
json.insert(JSON_KEY_STOREID, FMTool::GetString((const void *)&(request.StoreNo), 20));
json.insert(JSON_KEY_STATIONID, FMTool::GetString((const void *)&(request.DeviceNo), 6));
json.insert(JSON_KEY_ENDTIME, FMTool::GetString((const void *)&(request.BusinessDay), 8).append( FMTool::GetString((const void *)&(request.TransTime), 6)));
json.insert(JSON_KEY_PARTORDERID, FMTool::GetString((const void *)&(request.Reserved1), 64));
return true;
}
......@@ -143,7 +145,7 @@ private:
return false;
json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE);
json.insert(JSON_KEY_REQTYPE, JSON_REQTYPE_REFUND);
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.Reserved1), 48));
json.insert(JSON_KEY_PARTNERID, FMTool::GetString((const void *)&(request.PlatNo), 4).toInt());
json.insert(JSON_KEY_STOREID, FMTool::GetString((const void *)&(request.StoreNo), 20));
json.insert(JSON_KEY_STATIONID, FMTool::GetString((const void *)&(request.DeviceNo), 6));
json.insert(JSON_KEY_OPERATORID, FMTool::GetString((const void *)&(request.CashierNo), 6));
......
http://118.89.191.136:80/adapter/downloadRsaKey
http://118.89.191.136:80/adapter
60
60
1
\ No newline at end of file
[a0]
template={"ver":1}
[0]
template={"ver":1,"statusCode":0,"message":"","type":0,"paymentMethod":"","paymentMethodCode":"","ext":{"print":"","hint":""},"info":{"status":"","statusDesc":"","actId":"","actName":"","vdata":"","code":"","authCode":"","amount":0,"products":[{"pid":"","name":"","scope":"","discount":0,"number":0,"priceAct":0,"payment":{"remaining":0,"paid":0}}]}}
[71]
template={"ver":1,"statusCode":0,"message":"","fmId":"","consumeFactAmount":0,"consumeDiscountAmount":0,"type":0,"paymentMethod":"","paymentMethodCode":"","ext":{"print":"","hint":""},"actInfo":[{"actId":"","actName":"","code":""}]}
[72]
template={"ver":1,"statusCode":0,"message":"","payAccount":"","payTransId":"","fmId":"","type":0,"paymentMethod":"","paymentMethodCode":"","ext":{"print":"","hint":"","printRow":0,"printSign":""},"transAmount":0,"merchantDiscount":0,"platformDiscount":0}
[62]
template={"ver":1,"statusCode":0,"message":"","fmId":"","ext":{"print":"","hint":"","printRow":0,"printSign":""}}
......@@ -12,12 +12,23 @@
#include "rspfactory.h"
#include <QDir>
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/ )
{
static bool ownApplication = FALSE;
if ( dwReason == DLL_PROCESS_ATTACH )
if ( dwReason == DLL_PROCESS_ATTACH ) {
char mod[MAX_PATH] = { 0 };
GetModuleFileNameA((HMODULE)&__ImageBase, mod, MAX_PATH);
char *ch = strrchr(mod,'\\');
if (ch++) {
*ch = '\0';
}
QString path = QString::fromLocal8Bit(mod);
QApplication::addLibraryPath(path);
ownApplication = QMfcApp::pluginInstance( hInstance );
}
if ( dwReason == DLL_PROCESS_DETACH && ownApplication )
delete qApp;
......@@ -29,11 +40,14 @@ extern "C" __declspec(dllexport) void Start(const char *indata, char *outdata)
HWND parent = GetDesktopWindow();
QWinWidget win( parent );
QString logDir = QString("%1/log").arg(QApplication::applicationDirPath());
char path[MAX_PATH] = {0};
Control::GetProcPath(path);
QString logDir = QString("%1/log").arg(QString(path));
QDir().mkdir(logDir);
QsLogging::Logger& logger = QsLogging::Logger::instance();
logger.setLoggingLevel(QsLogging::TraceLevel);
QString str = qApp->applicationDirPath() + "/log/sbuxpay.txt";
QString str = QString(path) + "\\log\\sbuxpay.txt";
/* 配置输出定向器 */
QsLogging::DestinationPtr fileDestination(QsLogging::DestinationFactory::MakeFileDestination(
......@@ -121,6 +135,68 @@ void TestGetResPonseWithError()
}
typedef int (* GetValue) (char *, char *);
typedef int (__stdcall * GetRSACret)(int ,const char *,const char *);
void TestDllWapper()
{
QLibrary lib(qApp->applicationDirPath() + "/" + "FreemudWrapper.dll");
if(lib.load())
{
GetValue getvalue = (GetValue)lib.resolve("_GetValue@8");
GetRSACret getrsacret = (GetRSACret)lib.resolve("_GetRSACret@12");
qDebug() << getvalue;
qDebug() << getrsacret;
int j = -1;
char t1[25600] = {0};
char t2[25600] = {0};
// getrsacret();
//int i = getrsacret(1 , "1314", "2678");
getvalue(t1, t2);
qDebug() << j;
qDebug() << t1;
qDebug() << t2;
}
else
qDebug() << "load error";
}
void TestDllFmclient()
{
QLibrary lib(qApp->applicationDirPath() + "/" + "test02.dll");
qDebug() << qApp->applicationDirPath() + "/" + "test02.dll";
if(lib.load())
{
GetValue getvalue = (GetValue)lib.resolve("GetValue");
GetRSACret getrsacret = (GetRSACret)lib.resolve("_GetRSACret@12");
qDebug() << getvalue;
qDebug() << getrsacret;
int j = -1;
// getrsacret();
getrsacret(1 , "1314", "2678");
qDebug() << j;
}
}
int main(int argc, char *argv[])
{
......@@ -144,36 +220,44 @@ int main(int argc, char *argv[])
logger.addDestination(consleDest);
//pass
TestSetString();
//TestSetString();
//pass
TestGetResPonseWithError();
//TestGetResPonseWithError();
//pass
TestSetPinter();
//TestSetPinter();
//pass
TestGetResPonseJson();
//TestGetResPonseJson();
//error
//TestDllWapper();
//
//TestDllFmclient();
qDebug() << "1212367123";
AlipayRequest req;
FMTool::SetString(req.BusinessDay, 8 , QString("20170908"));
FMTool::SetString(req.TransType, 2 , QString("40"));
FMTool::SetString(req.Reserved1, 64 , QString("1443"));
FMTool::SetString(req.TransType, 2 , QString("30"));
FMTool::SetString(req.PlatNo, 4, QString("1443"));
FMTool::SetString(req.TransTime, 6, QString("130301"));
FMTool::SetString(req.StoreNo, 20 , QString("17607"));
FMTool::SetString(req.DeviceNo, 6 , QString("1"));
FMTool::SetString(req.CashierNo, 6 , QString("0123"));
FMTool::SetString(req.CashTraceNo, 6 , QString("123123"));
FMTool::SetString(req.Amount, 12, QString("1"));
req.item_line_qty[0] = '9';
req.item_line_qty[1] = '9';
// struct product{
// char productID[8]; //商品id
// char buyCount[4]; //购买数量
// char unitPrice[8]; //单件商品价格
// char isCombo[1]; //默认为0
// char isNonsale[1]; //(废弃)
// char productName[20]; //商品名字
// };
FMTool::SetString(req.Reserved1, 48 , QString("124112312312312312312----32"));
req.item_line_qty[0] = '2';
req.item_line_qty[1] = ' ';
struct product{
char productID[8]; //商品id
char buyCount[4]; //购买数量
char unitPrice[8]; //单件商品价格
char isCombo[1]; //默认为0
char isNonsale[1]; //(废弃)
char productName[20]; //商品名字
};
for(int i = 0; i < 99; ++i)
{
......
......@@ -48,6 +48,7 @@ struct product{
char productID[8]; //商品id
char buyCount[4]; //购买数量
char unitPrice[8]; //单件商品价格
char originPrice[8];//单件商品原价
char isCombo[1]; //默认为0
char isNonsale[1]; //(废弃)
char productName[20]; //商品名字
......@@ -55,19 +56,20 @@ struct product{
struct AlipayRequest
{
char PlatNo[2]; // 平台
char PlatNo[4]; // *商户编
char TransType[2]; // 交易类型
char PayType[2]; // 支付类型.
char StoreNo[20]; // 门店号.
char BusinessDay[8]; // 营业日期. ex:"20140307"
char DeviceNo[6]; // 设备编号. ex: "000001"
char TransTime [6]; //交易时间 时分秒(HHMMss)
char DeviceNo[6]; // *pos编号
char CashierNo[6]; // 收银员编号。 ex:"001"
char Amount[12]; // 需支付的金额(分). ex:"1000"
char Ticket_Amount[12]; //整单总金额(分). ex:"2000"
char non_sale_Amount[12]; //非卖品总金额(分)
char CashTraceNo[6]; // 流水号. ex:"080001"
char OriginTrace[64]; // 退款订单号(退款时使用)
char Reserved1[48]; // 保留字段。"启用为商户编号"
char Reserved1[48]; // 保留字段。
char Reserved2[48]; // ""
char Reserved3[48]; // ""
char Reserved4[48]; // ""
......
......@@ -77,7 +77,13 @@ private:
static bool GetDayEndResponse(AlipayResponse &response, const QJsonObject &json)
{
return false;
FMTool::SetString(response.ResponseCode, 3, QString::number(json[JSON_KEY_STATUSCODE].toInt()));
FMTool::SetString(response.ResponseMsg, 40, json[JSON_KEY_MESSAGE].toString());
FMTool::SetString(response.NeedPrint, 2, QString("01"));
if(json[JSON_KEY_STATUSCODE].toInt() == 100)
return SetPinter(response, json);
return true;
}
static bool GetAgainPrinteResponse(AlipayResponse &response, const QJsonObject &json)
......
......@@ -13,11 +13,10 @@ TARGET = sbkpay
include("./QsLog/QsLog.pri")
CONFIG += C++11 SBKDLL
CONFIG += C++11
DLLDESTDIR = $$[QT_INSTALL_PREFIX]/bin
include($$PWD/qtwinmigrate/src/qtwinmigrate.pri)
include($$PWD/qtwinmigrate/src/qtwinmigrate.pri)
SBKDLL {
TEMPLATE = lib
DEFINES += SBKDLL
......@@ -25,6 +24,12 @@ SBKDLL {
} else {
TEMPLATE = app
DEFINES += FM_TEST
}
release {
QMAKE_CXXFLAGS += /Zi
QMAKE_LFLAGS_RELEASE += /DEBUG
}
SOURCES += main.cpp\
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2017-08-12T12:26:37. -->
<!-- Written by QtCreator 3.5.1, 2017-08-14T12:31:22. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
......@@ -61,7 +61,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.55.win32_msvc2010_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
......
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