cardissuer_impl.cpp 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566
  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include "stdafx.h"
  3. #include "cardissuer_impl.h"
  4. #include "log4vendor.h"
  5. #include "path.h"
  6. #ifdef RVC_OS_WIN
  7. #include <direct.h>
  8. #define GetCurrentDir _getcwd
  9. #else
  10. #include <unistd.h>
  11. #include<cstring>
  12. #include <cstdio>
  13. #include <netdb.h> //gethostbyname
  14. #include <arpa/inet.h> //ntohl
  15. #include <unistd.h> // Linux系统中
  16. #include <netdb.h>
  17. #include <net/if.h>
  18. #include <arpa/inet.h>
  19. #include <sys/ioctl.h>
  20. #include <sys/types.h>
  21. #include <sys/socket.h>
  22. #include <netinet/in.h>
  23. #define GetCurrentDir getcwd
  24. #endif
  25. #define MAX_SHOW 1024
  26. #define MAX_TRACK_SIZE 512
  27. #define ENTITY_NAME "CardIssuerStand"
  28. #ifdef RVC_OS_WIN
  29. BOOL APIENTRY DllMain(HMODULE hModule,
  30. DWORD ul_reason_for_call,
  31. LPVOID lpReserved
  32. )
  33. {
  34. switch (ul_reason_for_call)
  35. {
  36. case DLL_PROCESS_ATTACH:
  37. case DLL_THREAD_ATTACH:
  38. case DLL_THREAD_DETACH:
  39. case DLL_PROCESS_DETACH:
  40. break;
  41. }
  42. return TRUE;
  43. }
  44. #endif
  45. string get_current_directory() {
  46. char buff[256];
  47. GetCurrentDir(buff, 256);
  48. string current_working_directory(buff);
  49. return current_working_directory;
  50. }
  51. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pBaseObj)
  52. {
  53. pBaseObj = new CardIssuerImpl();
  54. if (pBaseObj == NULL) {
  55. return Error_Resource;
  56. }
  57. cmb::log_init_config config;
  58. config.dev_name = ENTITY_NAME;
  59. #ifdef RVC_OS_WIN
  60. config.log_dir = ("C:\\rvc\\dbg\\");
  61. #else
  62. config.log_dir = ("/opt/rvc/dbg/");
  63. #endif
  64. std::string str;
  65. cmb::log4vendor::init(config, str);
  66. printf("init after: %s\n", str.c_str());
  67. return Error_Succeed;
  68. }
  69. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pBaseObj)
  70. {
  71. if (pBaseObj == NULL) {
  72. return Error_Param;
  73. }
  74. if (CardIssuerImpl* pTmp = dynamic_cast<CardIssuerImpl*>(pBaseObj))
  75. {
  76. delete pTmp;
  77. pTmp = NULL;
  78. return Error_Succeed;
  79. }
  80. return Error_Param;
  81. }
  82. CardIssuerImpl::CardIssuerImpl()
  83. {
  84. }
  85. CardIssuerImpl::~CardIssuerImpl()
  86. {
  87. }
  88. ErrorCodeEnum CardIssuerImpl::GetDevCategory(DevCategoryInfo& devCategory)
  89. {
  90. if (GetDevCategoryHttp(devCategory)) {
  91. strcpy(devCategory.szModel, "CM=2.0#CID=00000000");
  92. strcpy(devCategory.szType, "PVER=ACT#MID=ACT-F5-5540-0SH");
  93. strcpy(devCategory.szVendor, "cmbszSimulator");
  94. return Error_Succeed;
  95. }
  96. else {
  97. return Error_Exception;
  98. }
  99. }
  100. ErrorCodeEnum CardIssuerImpl::Reset()
  101. {
  102. return Error_Succeed;
  103. }
  104. ErrorCodeEnum CardIssuerImpl::DevClose()
  105. {
  106. return Error_Succeed;
  107. }
  108. ErrorCodeEnum CardIssuerImpl::GetLastErr(DevErrorInfo& devErrInfo)
  109. {
  110. static int times = 0;
  111. char szMessage[1024];
  112. string lastErr = "{\"Description\": \"test DevAdapter is execute fail\"}";
  113. //sprintf(szMessage, "这是第 %d 条错误信息", ++times);
  114. strcpy(devErrInfo.szErrMsg, lastErr.c_str());
  115. devErrInfo.dwErrMsgLen = lastErr.length();
  116. return Error_Succeed;
  117. }
  118. ErrorCodeEnum CardIssuerImpl::GetDevStatus(CardIssuerStatus& devStatus)
  119. {
  120. if (GetDevStatusHttp(devStatus)) {
  121. return Error_Succeed;
  122. }
  123. else {
  124. return Error_Exception;
  125. }
  126. }
  127. ErrorCodeEnum CardIssuerImpl::GetDeviceSN(char*& pDevSN)
  128. {
  129. if (GetDeviceSNHttp(pDevSN)) {
  130. return Error_Succeed;
  131. }
  132. else {
  133. return Error_Exception;
  134. }
  135. }
  136. ErrorCodeEnum CardIssuerImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
  137. {
  138. if (MoveCardHttp(eCardPos, hopperNo)) {
  139. return Error_Succeed;
  140. }
  141. else {
  142. return Error_Exception;
  143. }
  144. }
  145. ErrorCodeEnum CardIssuerImpl::SetCardInType(CardInEnum eCardIn)
  146. {
  147. if (SetCardInTypeHttp(eCardIn)) {
  148. return Error_Succeed;
  149. }
  150. else {
  151. return Error_Exception;
  152. }
  153. }
  154. ErrorCodeEnum CardIssuerImpl::MagRead(MagTracks& magTracks)
  155. {
  156. if (MagReadHttp(magTracks)) {
  157. return Error_Succeed;
  158. }
  159. else {
  160. return Error_Exception;
  161. }
  162. }
  163. ErrorCodeEnum CardIssuerImpl::MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode)
  164. {
  165. if (MagWriteHttp(magTracks, eWriteMode)) {
  166. return Error_Succeed;
  167. }
  168. else {
  169. return Error_Exception;
  170. }
  171. }
  172. ErrorCodeEnum CardIssuerImpl::ActiveICCard()
  173. {
  174. if (ActiveICCardHttp()) {
  175. return Error_Succeed;
  176. }
  177. else {
  178. return Error_Exception;
  179. }
  180. }
  181. ErrorCodeEnum CardIssuerImpl::ContactIC()
  182. {
  183. if (ContactICHttp()) {
  184. return Error_Succeed;
  185. }
  186. else {
  187. return Error_Exception;
  188. }
  189. }
  190. ErrorCodeEnum CardIssuerImpl::ReleaseIC()
  191. {
  192. if (ReleaseICHttp()) {
  193. return Error_Succeed;
  194. }
  195. else {
  196. return Error_Exception;
  197. }
  198. }
  199. ErrorCodeEnum CardIssuerImpl::WarmReset()
  200. {
  201. if (WarmResetHttp()) {
  202. return Error_Succeed;
  203. }
  204. else {
  205. return Error_Exception;
  206. }
  207. }
  208. ErrorCodeEnum CardIssuerImpl::ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  209. {
  210. if (ICCommandHttp(sendBuf, recvBuf)) {
  211. return Error_Succeed;
  212. }
  213. else {
  214. return Error_Exception;
  215. }
  216. }
  217. ErrorCodeEnum CardIssuerImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  218. {
  219. if (SAMCommandHttp(sendBuf, recvBuf)) {
  220. return Error_Succeed;
  221. }
  222. else {
  223. return Error_Exception;
  224. }
  225. }
  226. ErrorCodeEnum CardIssuerImpl::ActiveICCardATR(CmdInfo& atrBuf)
  227. {
  228. if (ActiveICCardATRHttp(atrBuf)) {
  229. return Error_Succeed;
  230. }
  231. else {
  232. return Error_Exception;
  233. }
  234. }
  235. ErrorCodeEnum CardIssuerImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType)
  236. {
  237. if (ActiveContactlessICCardHttp(fstType, scdType, thdType, outType)) {
  238. return Error_Succeed;
  239. }
  240. else {
  241. return Error_Exception;
  242. }
  243. }
  244. ErrorCodeEnum CardIssuerImpl::DeactivateICCard()
  245. {
  246. if (DeactivateICCardHttp()) {
  247. return Error_Succeed;
  248. }
  249. else {
  250. return Error_Exception;
  251. }
  252. }
  253. ErrorCodeEnum CardIssuerImpl::DeactContactlessICCard()
  254. {
  255. if (DeactContactlessICCardHttp()) {
  256. return Error_Succeed;
  257. }
  258. else {
  259. return Error_Exception;
  260. }
  261. }
  262. ErrorCodeEnum CardIssuerImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  263. {
  264. if (RFTypeABCommandHttp(sendBuf, recvBuf)) {
  265. return Error_Succeed;
  266. }
  267. else {
  268. return Error_Exception;
  269. }
  270. }
  271. ErrorCodeEnum CardIssuerImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType)
  272. {
  273. LOG4VTM(INFO, "当前目录:" << get_current_directory());
  274. depCfgPath = get_current_directory() + SPLIT_SLASH_STR + "dep" + SPLIT_SLASH_STR + "cmbsz.ini";
  275. bool ret = iniRead.ReadConfig(depCfgPath);
  276. if (ret == false)
  277. {
  278. LOG4VTM(INFO, "dep ReadConfig is Error,cfg=" << depCfgPath);
  279. }
  280. if (DevOpenExHttp(dwPort, dwBaudRate, btOpenType, pDevSN, btType)) {
  281. return Error_Succeed;
  282. }
  283. else {
  284. return Error_Exception;
  285. }
  286. }
  287. ErrorCodeEnum CardIssuerImpl::TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey)
  288. {
  289. if (TransferEnInitHttp(iStatus, Cr1, lenR1, Cr3, lenR3, dKey, lenKey)) {
  290. return Error_Succeed;
  291. }
  292. else {
  293. return Error_Exception;
  294. }
  295. }
  296. ErrorCodeEnum CardIssuerImpl::SetR2(int& iStatus, BYTE* pCr2, int lenR2)
  297. {
  298. if (SetR2Http(iStatus, pCr2, lenR2)) {
  299. return Error_Succeed;
  300. }
  301. else {
  302. return Error_Exception;
  303. }
  304. }
  305. ErrorCodeEnum CardIssuerImpl::SendWorkingKey(const char* pWorkingKey)
  306. {
  307. if (SendWorkingKeyHttp(pWorkingKey)) {
  308. return Error_Succeed;
  309. }
  310. else {
  311. return Error_Exception;
  312. }
  313. }
  314. ErrorCodeEnum CardIssuerImpl::MoveCardToSlot(int slot)
  315. {
  316. if (MoveCardToSlotHttp(slot)) {
  317. return Error_Succeed;
  318. }
  319. else {
  320. return Error_Exception;
  321. }
  322. }
  323. ErrorCodeEnum CardIssuerImpl::MoveCardFromSlot(int slot)
  324. {
  325. if (MoveCardFromSlotHttp(slot)) {
  326. return Error_Succeed;
  327. }
  328. else {
  329. return Error_Exception;
  330. }
  331. }
  332. ErrorCodeEnum CardIssuerImpl::ReadAccount(CardNo& cardNo)
  333. {
  334. if (ReadAccountHttp(cardNo)) {
  335. return Error_Succeed;
  336. }
  337. else {
  338. return Error_Exception;
  339. }
  340. }
  341. ErrorCodeEnum CardIssuerImpl::GetSlotSum(int& sum)
  342. {
  343. if (GetSlotSumHttp(sum)) {
  344. return Error_Succeed;
  345. }
  346. else {
  347. return Error_Exception;
  348. }
  349. }
  350. ErrorCodeEnum CardIssuerImpl::QuerySlotsStatus(SlotStatus& slots, const int slot, bool bFull /*= false*/)
  351. {
  352. if (QuerySlotsStatusHttp(slots, slot, bFull)) {
  353. return Error_Succeed;
  354. }
  355. else {
  356. return Error_Exception;
  357. }
  358. }
  359. ErrorCodeEnum CardIssuerImpl::PrintCardFaceRightNow(const KakuPrintInfo printInfo)
  360. {
  361. if (PrintCardFaceRightNowHttp(printInfo)) {
  362. return Error_Succeed;
  363. }
  364. else {
  365. return Error_Exception;
  366. }
  367. }
  368. bool CardIssuerImpl::GetDevCategoryHttp(DevCategoryInfo& devCategory)
  369. {
  370. LOG4VTM(INFO, "GetDevCategoryHttp");
  371. return commonSimpleHttp("GetDevCategory");
  372. }
  373. /////////////////////////////////////////
  374. bool CardIssuerImpl::GetDevStatusHttp(CardIssuerStatus& devStatus)
  375. {
  376. LOG4VTM(INFO, "GetDevStatusHttp");
  377. CommonReq cReq;
  378. CommonRet cRet;
  379. IHttpFunc* client;
  380. client = create_http(HttpsLogCallBack);
  381. Json::Value rootReq;
  382. Json::FastWriter writer;
  383. rootReq["ip"] = GetLocalIP();
  384. rootReq["entityName"] = ENTITY_NAME;
  385. rootReq["adapterInterName"] = "GetDevStatus";//适配器接口名
  386. cReq.m_url = getUrl();
  387. cReq.m_timeOut = 30;
  388. string jsonReq = writer.write(rootReq);
  389. cReq.m_reqStr = jsonReq;//请求参数
  390. bool ret = client->Post(cReq, cRet);
  391. if (ret) {
  392. Json::Reader reader;
  393. Json::Value rootRet;
  394. if (!reader.parse(cRet.m_retStr, rootRet, false))
  395. {
  396. LOG4VTM(INFO, "GetDevStatusHttp parse resp is fail,url=" << cReq.m_url.c_str());
  397. return false;//失败
  398. }
  399. bool isSucc = rootRet["success"].asBool();
  400. if (isSucc) {
  401. //解析数据
  402. if (rootRet.isMember("data")) {
  403. bool isResult = rootRet["data"]["result"].asBool();
  404. if (isResult) {
  405. int eMediaRet = rootRet["data"]["eMedia"].asInt();
  406. devStatus.eMedia = (CardStatusEnum)eMediaRet;
  407. int eRetainBinRet = rootRet["data"]["eRetainBin"].asInt();
  408. devStatus.eRetainBin = (RtBinStatusEnum)eRetainBinRet;
  409. int dwRetainCountRet = rootRet["data"]["dwRetainCount"].asInt();
  410. devStatus.dwRetainCount = dwRetainCountRet;
  411. for (int i = 0; i < 12; i++) {
  412. int eIssuerBinRet = rootRet["data"]["eIssuerBin"][i].asInt();
  413. devStatus.eIssuerBin[i] = (IssHopperStatusEnum)eIssuerBinRet;
  414. }
  415. for (int i = 0; i < 12; i++) {
  416. int dwIssuerCountRet = rootRet["data"]["dwIssuerCount"][i].asInt();
  417. devStatus.dwIssuerCount[i] = dwIssuerCountRet;
  418. }
  419. for (int i = 0; i < 8; i++) {
  420. int eKakuTapeRet = rootRet["data"]["eKakuTape"][i].asInt();
  421. devStatus.eKakuTape[i] = (KakuPrintStatusEnum)eKakuTapeRet;
  422. }
  423. LOG4VTM(INFO, "GetDevStatusHttp devStatus.eMedia=" << devStatus.eMedia);
  424. LOG4VTM(INFO, "GetDevStatusHttp devStatus.eRetainBin=" << devStatus.eRetainBin);
  425. LOG4VTM(INFO, "GetDevStatusHttp devStatus.dwRetainCount=" << devStatus.dwRetainCount);
  426. return true;
  427. }
  428. else {
  429. return false;
  430. }
  431. }
  432. else {
  433. LOG4VTM(INFO, "GetDevStatusHttp return [data] is null");
  434. return false;
  435. }
  436. }
  437. else {
  438. LOG4VTM(INFO, "GetDevStatusHttp [success] is false,");
  439. return false;
  440. }
  441. }
  442. else {
  443. LOG4VTM(INFO, "GetDevStatusHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  444. return false;
  445. }
  446. }
  447. bool CardIssuerImpl::GetDeviceSNHttp(char*& pDevSN)
  448. {
  449. LOG4VTM(INFO, "GetDeviceSNHttp");
  450. CommonReq cReq;
  451. CommonRet cRet;
  452. IHttpFunc* client;
  453. client = create_http(HttpsLogCallBack);
  454. Json::Value rootReq;
  455. Json::FastWriter writer;
  456. rootReq["ip"] = GetLocalIP();
  457. rootReq["entityName"] = ENTITY_NAME;
  458. rootReq["adapterInterName"] = "GetDeviceSN";//适配器接口名
  459. cReq.m_url = getUrl();
  460. cReq.m_timeOut = 30;
  461. string jsonReq = writer.write(rootReq);
  462. cReq.m_reqStr = jsonReq;//请求参数
  463. bool ret = client->Post(cReq, cRet);
  464. if (ret) {
  465. Json::Reader reader;
  466. Json::Value rootRet;
  467. if (!reader.parse(cRet.m_retStr, rootRet, false))
  468. {
  469. LOG4VTM(INFO, "GetDeviceSNHttp parse resp is fail,url=" << cReq.m_url.c_str());
  470. return false;//失败
  471. }
  472. bool isSucc = rootRet["success"].asBool();
  473. if (isSucc) {
  474. //解析数据
  475. if (rootRet.isMember("data")) {
  476. bool isResult = rootRet["data"]["result"].asBool();
  477. if (isResult) {
  478. string devSNStr = rootRet["data"]["devSN"].asString();;
  479. strncpy(pDevSN, devSNStr.c_str(), (128 > devSNStr.length()) ? devSNStr.length() : 128);
  480. LOG4VTM(INFO, "GetDeviceSNHttp devSN=" << devSNStr);
  481. return true;
  482. }
  483. else {
  484. return false;
  485. }
  486. }
  487. else {
  488. LOG4VTM(INFO, "GetDeviceSNHttp return [data] is null");
  489. return false;
  490. }
  491. }
  492. else {
  493. LOG4VTM(INFO, "GetDeviceSNHttp [success] is false,");
  494. return false;
  495. }
  496. }
  497. else {
  498. LOG4VTM(INFO, "GetDeviceSNHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  499. return false;
  500. }
  501. }
  502. bool CardIssuerImpl::MoveCardHttp(CardPosEnum eCardPos, int hopperNo)
  503. {
  504. LOG4VTM(INFO, "MoveCardHttp eCardPos=" << eCardPos << " hopperNo=" << hopperNo);
  505. return commonSimpleHttp("MoveCard");
  506. }
  507. bool CardIssuerImpl::SetCardInTypeHttp(CardInEnum eCardIn)
  508. {
  509. LOG4VTM(INFO, "SetCardInTypeHttp eCardIn=" << eCardIn);
  510. return commonSimpleHttp("SetCardInType");
  511. }
  512. bool CardIssuerImpl::MagReadHttp(MagTracks& magTracks)
  513. {
  514. LOG4VTM(INFO, "MagReadHttp");
  515. CommonReq cReq;
  516. CommonRet cRet;
  517. IHttpFunc* client;
  518. client = create_http(HttpsLogCallBack);
  519. Json::Value rootReq;
  520. Json::FastWriter writer;
  521. rootReq["ip"] = GetLocalIP();
  522. rootReq["entityName"] = ENTITY_NAME;
  523. rootReq["adapterInterName"] = "MagRead";//适配器接口名
  524. cReq.m_url = getUrl();
  525. cReq.m_timeOut = 30;
  526. string jsonReq = writer.write(rootReq);
  527. cReq.m_reqStr = jsonReq;//请求参数
  528. bool ret = client->Post(cReq, cRet);
  529. if (ret) {
  530. Json::Reader reader;
  531. Json::Value rootRet;
  532. if (!reader.parse(cRet.m_retStr, rootRet, false))
  533. {
  534. LOG4VTM(INFO, "MagReadHttp parse resp is fail,url=" << cReq.m_url.c_str());
  535. return false;//失败
  536. }
  537. bool isSucc = rootRet["success"].asBool();
  538. if (isSucc) {
  539. //解析数据
  540. if (rootRet.isMember("data")) {
  541. bool isResult = rootRet["data"]["result"].asBool();
  542. if (isResult) {
  543. int eRangeRet = rootRet["data"]["eRange"].asInt();
  544. magTracks.eRange = (TrackRange)eRangeRet;
  545. LOG4VTM(INFO, "MagReadHttp magTracks.eRange=" << magTracks.eRange);
  546. for (int i = 0; i < 3; i++) {
  547. int eSourceRet = rootRet["data"]["track"][i]["eSource"].asInt();
  548. magTracks.track[i].eSource = (TrackSrcEnum)eSourceRet;
  549. int eStatusRet = rootRet["data"]["track"][i]["eStatus"].asInt();
  550. magTracks.track[i].eStatus = (TrackDataStateEnum)eStatusRet;
  551. int dwSizeRet = rootRet["data"]["track"][i]["dwSize"].asInt();
  552. magTracks.track[i].dwSize = dwSizeRet;
  553. string dataRet = rootRet["data"]["track"][i]["data"].asString();
  554. //PBYTE pData = new BYTE[MAX_SHOW];
  555. //ZeroMemory(pData, MAX_SHOW);
  556. //int dataLen = StrBuf2HexBuf(dataRet.c_str(), &pData);
  557. //memcpy(magTracks.track[i].data, pData, dataLen);//赋值
  558. //delete[] pData;
  559. memcpy(magTracks.track[i].data, dataRet.c_str(), dwSizeRet);//赋值
  560. LOG4VTM(INFO, "MagReadHttp magTracks.track.eSource=" << magTracks.track[i].eSource);
  561. LOG4VTM(INFO, "MagReadHttp magTracks.track.eStatus=" << magTracks.track[i].eStatus);
  562. LOG4VTM(INFO, "MagReadHttp magTracks.track.dwSize=" << magTracks.track[i].dwSize);
  563. LOG4VTM(INFO, "MagReadHttp magTracks.track.data.len=" << strlen((const char*)magTracks.track[i].data));
  564. }
  565. return true;
  566. }
  567. else {
  568. return false;
  569. }
  570. }
  571. else {
  572. LOG4VTM(INFO, "MagReadHttp return [data] is null");
  573. return false;
  574. }
  575. }
  576. else {
  577. LOG4VTM(INFO, "MagReadHttp [success] is false,");
  578. return false;
  579. }
  580. }
  581. else {
  582. LOG4VTM(INFO, "MagReadHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  583. return false;
  584. }
  585. }
  586. bool CardIssuerImpl::MagWriteHttp(MagTracks magTracks, MagWriteModeEnum eWriteMode)
  587. {
  588. LOG4VTM(INFO, "MagWriteHttp eWriteMode=" << eWriteMode);
  589. return commonSimpleHttp("MagWrite");
  590. }
  591. bool CardIssuerImpl::ActiveICCardHttp()
  592. {
  593. LOG4VTM(INFO, "ActiveICCardHttp");
  594. return commonSimpleHttp("ActiveICCard");
  595. }
  596. bool CardIssuerImpl::ContactICHttp()
  597. {
  598. LOG4VTM(INFO, "ContactICHttp");
  599. return commonSimpleHttp("ContactIC");
  600. }
  601. bool CardIssuerImpl::ReleaseICHttp()
  602. {
  603. LOG4VTM(INFO, "ReleaseICHttp");
  604. return commonSimpleHttp("ReleaseIC");
  605. }
  606. bool CardIssuerImpl::WarmResetHttp()
  607. {
  608. LOG4VTM(INFO, "WarmResetHttp");
  609. return commonSimpleHttp("WarmReset");
  610. }
  611. bool CardIssuerImpl::ICCommandHttp(CmdInfo sendBuf, CmdInfo& recvBuf)
  612. {
  613. char* show = new char[MAX_SHOW];
  614. ZeroMemory(show, MAX_SHOW);
  615. HexBuf2StrBuf(sendBuf.data, &show, sendBuf.dwSize);
  616. LOG4VTM(INFO, "ICCommandHttp sendBuf=" << show);
  617. CommonReq cReq;
  618. CommonRet cRet;
  619. IHttpFunc* client;
  620. client = create_http(HttpsLogCallBack);
  621. Json::Value rootReq;
  622. Json::FastWriter writer;
  623. rootReq["ip"] = GetLocalIP();
  624. rootReq["entityName"] = ENTITY_NAME;
  625. rootReq["adapterInterName"] = "ICCommand";//适配器接口名
  626. //rootReq["dwSize"] = CSimpleStringA::Format("%d",sendBuf.dwSize).GetData();
  627. //rootReq["dwData"] = CSimpleStringA::Format("%s",show).GetData();
  628. cReq.m_url = getUrl();
  629. cReq.m_timeOut = 30;
  630. string jsonReq = writer.write(rootReq);
  631. cReq.m_reqStr = jsonReq;//请求参数
  632. bool ret = client->Post(cReq, cRet);
  633. delete[] show;
  634. if (ret) {
  635. Json::Reader reader;
  636. Json::Value rootRet;
  637. if (!reader.parse(cRet.m_retStr, rootRet, false))
  638. {
  639. LOG4VTM(INFO, "ICCommandHttp parse resp is fail,url=" << cReq.m_url.c_str());
  640. return false;//失败
  641. }
  642. bool isSucc = rootRet["success"].asBool();
  643. if (isSucc) {
  644. //解析数据
  645. if (rootRet.isMember("data")) {
  646. bool isResult = rootRet["data"]["result"].asBool();
  647. if (isResult) {
  648. int dwSizeRet = rootRet["data"]["dwSize"].asInt();
  649. string dataRet = rootRet["data"]["data"].asString();
  650. LOG4VTM(INFO, "ICCommandHttp recvBuf.dwSize=" << dwSizeRet << ", recvBuf.dwData=" << dataRet);
  651. //反解析
  652. PBYTE pData = new BYTE[MAX_SHOW];
  653. ZeroMemory(pData, MAX_SHOW);
  654. int dataLen = StrBuf2HexBuf(dataRet.c_str(), &pData);
  655. ZeroMemory(recvBuf.data, MAX_SHOW);
  656. memcpy(recvBuf.data, pData, dataLen);//赋值
  657. recvBuf.dwSize = dataLen;//赋值
  658. LOG4VTM(INFO, "ICCommandHttp recvBuf.dwSize=" << recvBuf.dwSize << ", recvBuf.dwData=" << dataRet);
  659. delete[] pData;
  660. return true;
  661. }
  662. else {
  663. return false;
  664. }
  665. }
  666. else {
  667. LOG4VTM(INFO, "ICCommandHttp return [data] is null");
  668. return false;
  669. }
  670. }
  671. else {
  672. LOG4VTM(INFO, "ICCommandHttp [success] is false,");
  673. return false;
  674. }
  675. }
  676. else {
  677. LOG4VTM(INFO, "ICCommandHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  678. return false;
  679. }
  680. }
  681. bool CardIssuerImpl::SAMCommandHttp(CmdInfo sendBuf, CmdInfo& recvBuf)
  682. {
  683. char* show = new char[MAX_SHOW];
  684. ZeroMemory(show, MAX_SHOW);
  685. HexBuf2StrBuf(sendBuf.data, &show, sendBuf.dwSize);
  686. LOG4VTM(INFO, "SAMCommandHttp sendBuf=" << show);
  687. CommonReq cReq;
  688. CommonRet cRet;
  689. IHttpFunc* client;
  690. client = create_http(HttpsLogCallBack);
  691. Json::Value rootReq;
  692. Json::FastWriter writer;
  693. rootReq["ip"] = GetLocalIP();
  694. rootReq["entityName"] = ENTITY_NAME;
  695. rootReq["adapterInterName"] = "SAMCommand";//适配器接口名
  696. //rootReq["CmdInfo"]["dwSize"] = CSimpleStringA::Format("%d", sendBuf.dwSize).GetData();
  697. //rootReq["CmdInfo"]["dwData"] = CSimpleStringA::Format("%s", show).GetData();
  698. cReq.m_url = getUrl();
  699. cReq.m_timeOut = 30;
  700. string jsonReq = writer.write(rootReq);
  701. cReq.m_reqStr = jsonReq;//请求参数
  702. bool ret = client->Post(cReq, cRet);
  703. delete[] show;
  704. if (ret) {
  705. Json::Reader reader;
  706. Json::Value rootRet;
  707. if (!reader.parse(cRet.m_retStr, rootRet, false))
  708. {
  709. LOG4VTM(INFO, "SAMCommandHttp parse resp is fail,url=" << cReq.m_url.c_str());
  710. return false;//失败
  711. }
  712. bool isSucc = rootRet["success"].asBool();
  713. if (isSucc) {
  714. //解析数据
  715. if (rootRet.isMember("data")) {
  716. bool isResult = rootRet["data"]["result"].asBool();
  717. if (isResult) {
  718. int dwSizeRet = rootRet["data"]["dwSize"].asInt();
  719. string dataRet = rootRet["data"]["data"].asString();
  720. LOG4VTM(INFO, "SAMCommandHttp recvBuf.dwSize=" << dwSizeRet << ", recvBuf.dwData=" << dataRet);
  721. //反解析
  722. PBYTE pData = new BYTE[MAX_SHOW];
  723. ZeroMemory(pData, MAX_SHOW);
  724. int dataLen = StrBuf2HexBuf(dataRet.c_str(), &pData);
  725. ZeroMemory(recvBuf.data, MAX_SHOW);
  726. memcpy(recvBuf.data, pData, dataLen);//赋值
  727. recvBuf.dwSize = dataLen;//赋值
  728. LOG4VTM(INFO, "SAMCommandHttp recvBuf.dwSize=" << recvBuf.dwSize << ", recvBuf.dwData=" << dataRet);
  729. delete[] pData;
  730. return true;
  731. }
  732. else {
  733. return false;
  734. }
  735. }
  736. else {
  737. LOG4VTM(INFO, "SAMCommandHttp return [data] is null");
  738. return false;
  739. }
  740. }
  741. else {
  742. LOG4VTM(INFO, "SAMCommandHttp [success] is false,");
  743. return false;
  744. }
  745. }
  746. else {
  747. LOG4VTM(INFO, "SAMCommandHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  748. return false;
  749. }
  750. }
  751. bool CardIssuerImpl::ActiveICCardATRHttp(CmdInfo& atrBuf)
  752. {
  753. LOG4VTM(INFO, "ActiveICCardATRHttp");
  754. CommonReq cReq;
  755. CommonRet cRet;
  756. IHttpFunc* client;
  757. client = create_http(HttpsLogCallBack);
  758. Json::Value rootReq;
  759. Json::FastWriter writer;
  760. rootReq["ip"] = GetLocalIP();
  761. rootReq["entityName"] = ENTITY_NAME;
  762. rootReq["adapterInterName"] = "ActiveICCardATR";//适配器接口名
  763. cReq.m_url = getUrl();
  764. cReq.m_timeOut = 30;
  765. string jsonReq = writer.write(rootReq);
  766. cReq.m_reqStr = jsonReq;//请求参数
  767. bool ret = client->Post(cReq, cRet);
  768. if (ret) {
  769. Json::Reader reader;
  770. Json::Value rootRet;
  771. if (!reader.parse(cRet.m_retStr, rootRet, false))
  772. {
  773. LOG4VTM(INFO, "ActiveICCardATRHttp parse resp is fail,url=" << cReq.m_url.c_str());
  774. return false;//失败
  775. }
  776. bool isSucc = rootRet["success"].asBool();
  777. if (isSucc) {
  778. //解析数据
  779. if (rootRet.isMember("data")) {
  780. bool isResult = rootRet["data"]["result"].asBool();
  781. if (isResult) {
  782. int dwSizeRet = rootRet["data"]["dwSize"].asInt();
  783. string dataRet = rootRet["data"]["data"].asString();
  784. LOG4VTM(INFO, "ActiveICCardATRHttp recvBuf.dwSize=" << dwSizeRet << ", recvBuf.dwData=" << dataRet);
  785. //反解析
  786. PBYTE pData = new BYTE[MAX_SHOW];
  787. ZeroMemory(pData, MAX_SHOW);
  788. int dataLen = StrBuf2HexBuf(dataRet.c_str(), &pData);
  789. ZeroMemory(atrBuf.data, MAX_SHOW);
  790. memcpy(atrBuf.data, pData, dataLen);//赋值
  791. atrBuf.dwSize = dataLen;//赋值
  792. LOG4VTM(INFO, "ActiveICCardATRHttp recvBuf.dwSize=" << atrBuf.dwSize << ", recvBuf.dwData=" << dataRet);
  793. delete[] pData;
  794. return true;
  795. }
  796. else {
  797. return false;
  798. }
  799. }
  800. else {
  801. LOG4VTM(INFO, "ActiveICCardATRHttp return [data] is null");
  802. return false;
  803. }
  804. }
  805. else {
  806. LOG4VTM(INFO, "ActiveICCardATRHttp [success] is false,");
  807. return false;
  808. }
  809. }
  810. else {
  811. LOG4VTM(INFO, "ActiveICCardATRHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  812. return false;
  813. }
  814. }
  815. bool CardIssuerImpl::ActiveContactlessICCardHttp(char fstType, char scdType, char thdType, char& outType)
  816. {
  817. LOG4VTM(INFO, "ActiveContactlessICCardHttp fstType=" << fstType << ", scdType=" << scdType << ", thdType=" << thdType);
  818. CommonReq cReq;
  819. CommonRet cRet;
  820. IHttpFunc* client;
  821. client = create_http(HttpsLogCallBack);
  822. Json::Value rootReq;
  823. Json::FastWriter writer;
  824. rootReq["ip"] = GetLocalIP();
  825. rootReq["entityName"] = ENTITY_NAME;
  826. rootReq["adapterInterName"] = "ActiveContactlessICCard";//适配器接口名
  827. //rootReq["fstType"] = fstType;
  828. //rootReq["scdType"] = scdType;
  829. //rootReq["thdType"] = thdType;
  830. cReq.m_url = getUrl();
  831. cReq.m_timeOut = 30;
  832. string jsonReq = writer.write(rootReq);
  833. cReq.m_reqStr = jsonReq;//请求参数
  834. bool ret = client->Post(cReq, cRet);
  835. if (ret) {
  836. Json::Reader reader;
  837. Json::Value rootRet;
  838. if (!reader.parse(cRet.m_retStr, rootRet, false))
  839. {
  840. LOG4VTM(INFO, "ActiveContactlessICCardHttp parse resp is fail,url=" << cReq.m_url.c_str());
  841. return false;//失败
  842. }
  843. bool isSucc = rootRet["success"].asBool();
  844. if (isSucc) {
  845. //解析数据
  846. if (rootRet.isMember("data")) {
  847. bool isResult = rootRet["data"]["result"].asBool();
  848. if (isResult) {
  849. string outTypeRet = rootRet["data"]["outType"].asString();
  850. outType = outTypeRet.c_str()[0];
  851. return true;
  852. }
  853. else {
  854. return false;
  855. }
  856. }
  857. else {
  858. LOG4VTM(INFO, "ActiveContactlessICCardHttp return [data] is null");
  859. return false;
  860. }
  861. }
  862. else {
  863. LOG4VTM(INFO, "ActiveContactlessICCardHttp [success] is false,");
  864. return false;
  865. }
  866. }
  867. else {
  868. LOG4VTM(INFO, "ActiveContactlessICCardHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  869. return false;
  870. }
  871. }
  872. bool CardIssuerImpl::DeactivateICCardHttp()
  873. {
  874. LOG4VTM(INFO, "DeactivateICCardHttp");
  875. return commonSimpleHttp("DeactivateICCard");
  876. }
  877. bool CardIssuerImpl::DeactContactlessICCardHttp()
  878. {
  879. LOG4VTM(INFO, "DeactContactlessICCardHttp");
  880. return commonSimpleHttp("DeactContactlessICCard");
  881. }
  882. bool CardIssuerImpl::RFTypeABCommandHttp(CmdInfo sendBuf, CmdInfo& recvBuf)
  883. {
  884. char* show = new char[MAX_SHOW];
  885. ZeroMemory(show, MAX_SHOW);
  886. HexBuf2StrBuf(sendBuf.data, &show, sendBuf.dwSize);
  887. LOG4VTM(INFO, "RFTypeABCommandHttp sendBuf=" << show);
  888. CommonReq cReq;
  889. CommonRet cRet;
  890. IHttpFunc* client;
  891. client = create_http(HttpsLogCallBack);
  892. Json::Value rootReq;
  893. Json::FastWriter writer;
  894. rootReq["ip"] = GetLocalIP();
  895. rootReq["entityName"] = ENTITY_NAME;
  896. rootReq["adapterInterName"] = "RFTypeABCommand";//适配器接口名
  897. //rootReq["CmdInfo"]["dwSize"] = (int)sendBuf.dwSize;
  898. //rootReq["CmdInfo"]["dwData"] = show;
  899. cReq.m_url = getUrl();
  900. cReq.m_timeOut = 30;
  901. string jsonReq = writer.write(rootReq);
  902. cReq.m_reqStr = jsonReq;//请求参数
  903. bool ret = client->Post(cReq, cRet);
  904. delete[] show;
  905. if (ret) {
  906. Json::Reader reader;
  907. Json::Value rootRet;
  908. if (!reader.parse(cRet.m_retStr, rootRet, false))
  909. {
  910. LOG4VTM(INFO, "RFTypeABCommandHttp parse resp is fail,url=" << cReq.m_url.c_str());
  911. return false;//失败
  912. }
  913. bool isSucc = rootRet["success"].asBool();
  914. if (isSucc) {
  915. //解析数据
  916. if (rootRet.isMember("data")) {
  917. bool isResult = rootRet["data"]["result"].asBool();
  918. if (isResult) {
  919. int dwSizeRet = rootRet["data"]["dwSize"].asInt();
  920. string dataRet = rootRet["data"]["data"].asString();
  921. LOG4VTM(INFO, "RFTypeABCommandHttp recvBuf.dwSize=" << dwSizeRet << ", recvBuf.dwData=" << dataRet);
  922. //反解析
  923. PBYTE pData = new BYTE[MAX_SHOW];
  924. ZeroMemory(pData, MAX_SHOW);
  925. int dataLen = StrBuf2HexBuf(dataRet.c_str(), &pData);
  926. ZeroMemory(recvBuf.data, MAX_SHOW);
  927. memcpy(recvBuf.data, pData, dataLen);//赋值
  928. recvBuf.dwSize = dataLen;//赋值
  929. LOG4VTM(INFO, "RFTypeABCommandHttp recvBuf.dwSize=" << recvBuf.dwSize << ", recvBuf.dwData=" << dataRet);
  930. delete[] pData;
  931. return true;
  932. }
  933. else {
  934. return false;
  935. }
  936. }
  937. else {
  938. LOG4VTM(INFO, "RFTypeABCommandHttp return [data] is null");
  939. return false;
  940. }
  941. }
  942. else {
  943. LOG4VTM(INFO, "RFTypeABCommandHttp [success] is false,");
  944. return false;
  945. }
  946. }
  947. else {
  948. LOG4VTM(INFO, "RFTypeABCommandHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  949. return false;
  950. }
  951. }
  952. bool CardIssuerImpl::DevOpenExHttp(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType)
  953. {
  954. LOG4VTM(INFO, "DevOpenExHttp dwPort=" << dwPort << " dwBaudRate=" << dwBaudRate << " btOpenType=" << btOpenType << " pDevSN=" << pDevSN);
  955. CommonReq cReq;
  956. CommonRet cRet;
  957. IHttpFunc* client;
  958. client = create_http(HttpsLogCallBack);
  959. Json::Value rootReq;
  960. Json::FastWriter writer;
  961. rootReq["ip"] = GetLocalIP();
  962. rootReq["entityName"] = ENTITY_NAME;
  963. rootReq["adapterInterName"] = "DevOpenEx";//适配器接口名
  964. cReq.m_url = getUrl();
  965. cReq.m_timeOut = 30;
  966. string jsonReq = writer.write(rootReq);
  967. cReq.m_reqStr = jsonReq;//请求参数
  968. bool ret = client->Post(cReq, cRet);
  969. if (ret) {
  970. Json::Reader reader;
  971. Json::Value rootRet;
  972. if (!reader.parse(cRet.m_retStr, rootRet, false))
  973. {
  974. LOG4VTM(INFO, "DevOpenExHttp parse resp is fail,url=" << cReq.m_url.c_str());
  975. return false;//失败
  976. }
  977. bool isSucc = rootRet["success"].asBool();
  978. if (isSucc) {
  979. //解析数据
  980. if (rootRet.isMember("data")) {
  981. bool isResult = rootRet["data"]["result"].asBool();
  982. if (isResult) {
  983. int btTypeRet = rootRet["data"]["btType"].asInt();
  984. btType = btTypeRet;
  985. return true;
  986. }
  987. else {
  988. return false;
  989. }
  990. }
  991. else {
  992. LOG4VTM(INFO, "DevOpenExHttp return [data] is null");
  993. return false;
  994. }
  995. }
  996. else {
  997. LOG4VTM(INFO, "DevOpenExHttp [success] is false,");
  998. return false;
  999. }
  1000. }
  1001. else {
  1002. LOG4VTM(INFO, "DevOpenExHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  1003. return false;
  1004. }
  1005. }
  1006. bool CardIssuerImpl::TransferEnInitHttp(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey)
  1007. {
  1008. LOG4VTM(INFO, "TransferEnInitHttp");
  1009. CommonReq cReq;
  1010. CommonRet cRet;
  1011. IHttpFunc* client;
  1012. client = create_http(HttpsLogCallBack);
  1013. Json::Value rootReq;
  1014. Json::FastWriter writer;
  1015. rootReq["ip"] = GetLocalIP();
  1016. rootReq["entityName"] = ENTITY_NAME;
  1017. rootReq["adapterInterName"] = "TransferEnInit";//适配器接口名
  1018. cReq.m_url = getUrl();
  1019. cReq.m_timeOut = 30;
  1020. string jsonReq = writer.write(rootReq);
  1021. cReq.m_reqStr = jsonReq;//请求参数
  1022. bool ret = client->Post(cReq, cRet);
  1023. if (ret) {
  1024. Json::Reader reader;
  1025. Json::Value rootRet;
  1026. if (!reader.parse(cRet.m_retStr, rootRet, false))
  1027. {
  1028. LOG4VTM(INFO, "TransferEnInitHttp parse resp is fail,url=" << cReq.m_url.c_str());
  1029. return false;//失败
  1030. }
  1031. bool isSucc = rootRet["success"].asBool();
  1032. if (isSucc) {
  1033. //解析数据
  1034. if (rootRet.isMember("data")) {
  1035. bool isResult = rootRet["data"]["result"].asBool();
  1036. if (isResult) {
  1037. iStatus = rootRet["data"]["iStatus"].asInt();
  1038. if (iStatus == 0) {
  1039. int lenR1Ret = rootRet["data"]["lenR1"].asInt();
  1040. lenR1 = lenR1Ret;
  1041. int lenR3Ret = rootRet["data"]["lenR3"].asInt();
  1042. lenR3 = lenR3Ret;
  1043. int lenKeyRet = rootRet["data"]["lenKey"].asInt();
  1044. lenKey = lenKeyRet;
  1045. string Cr1Ret = rootRet["data"]["Cr1"].asString();
  1046. string Cr3Ret = rootRet["data"]["Cr3"].asString();
  1047. string dKeyRet = rootRet["data"]["dKey"].asString();
  1048. //PBYTE pData = new BYTE[2048];
  1049. //ZeroMemory(pData, 2048);
  1050. //int dataLen = StrBuf2HexBuf(Cr1Ret.c_str(), &pData);
  1051. //memcpy(Cr1, pData, dataLen);//赋值
  1052. //ZeroMemory(pData, MAX_TRACK_SIZE);
  1053. //dataLen = StrBuf2HexBuf(Cr3Ret.c_str(), &pData);
  1054. //memcpy(Cr3, pData, dataLen);//赋值
  1055. //ZeroMemory(pData, MAX_TRACK_SIZE);
  1056. //dataLen = StrBuf2HexBuf(dKeyRet.c_str(), &pData);
  1057. //memcpy(dKey, pData, dataLen);//赋值
  1058. //delete[] pData;
  1059. memcpy(Cr1, Cr1Ret.c_str(), lenR1Ret);//赋值
  1060. memcpy(Cr3, Cr3Ret.c_str(), lenR3Ret);//赋值
  1061. memcpy(dKey, dKeyRet.c_str(), lenKeyRet);//赋值
  1062. LOG4VTM(INFO, "TransferEnInitHttp lenR1" << lenR1);
  1063. LOG4VTM(INFO, "TransferEnInitHttp lenR3" << lenR3);
  1064. LOG4VTM(INFO, "TransferEnInitHttp lenKey" << lenKey);
  1065. LOG4VTM(INFO, "TransferEnInitHttp Cr1=" << sizeof(Cr1));
  1066. LOG4VTM(INFO, "TransferEnInitHttp Cr3=" << sizeof(Cr3));
  1067. LOG4VTM(INFO, "TransferEnInitHttp dKey=" << sizeof(dKey));
  1068. return true;
  1069. }
  1070. else {
  1071. return false;
  1072. }
  1073. }
  1074. else {
  1075. return false;
  1076. }
  1077. }
  1078. else {
  1079. LOG4VTM(INFO, "TransferEnInitHttp return [data] is null");
  1080. return false;
  1081. }
  1082. }
  1083. else {
  1084. LOG4VTM(INFO, "TransferEnInitHttp [success] is false,");
  1085. return false;
  1086. }
  1087. }
  1088. else {
  1089. LOG4VTM(INFO, "TransferEnInitHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  1090. return false;
  1091. }
  1092. }
  1093. bool CardIssuerImpl::SetR2Http(int& iStatus, BYTE* pCr2, int lenR2)
  1094. {
  1095. LOG4VTM(INFO, "SetR2Http pCr2Len=" << sizeof(pCr2) << ", lenR2=" << lenR2);
  1096. if (commonSimpleHttp("SetR2")) {
  1097. iStatus = 0;
  1098. return true;
  1099. }
  1100. else {
  1101. iStatus = 1;
  1102. return false;
  1103. }
  1104. }
  1105. bool CardIssuerImpl::SendWorkingKeyHttp(const char* pWorkingKey)
  1106. {
  1107. LOG4VTM(INFO, "SendWorkingKeyHttp pWorkingKey=" << pWorkingKey);
  1108. return commonSimpleHttp("SendWorkingKey");
  1109. }
  1110. bool CardIssuerImpl::MoveCardToSlotHttp(int slot)
  1111. {
  1112. LOG4VTM(INFO, "MoveCardToSlotHttp slot=" << slot);
  1113. return commonSimpleHttp("MoveCardToSlot");
  1114. }
  1115. bool CardIssuerImpl::MoveCardFromSlotHttp(int slot)
  1116. {
  1117. LOG4VTM(INFO, "MoveCardFromSlotHttp slot=" << slot);
  1118. return commonSimpleHttp("MoveCardFromSlot");
  1119. }
  1120. bool CardIssuerImpl::ReadAccountHttp(CardNo& cardNo)
  1121. {
  1122. LOG4VTM(INFO, "ReadAccountHttp");
  1123. CommonReq cReq;
  1124. CommonRet cRet;
  1125. IHttpFunc* client;
  1126. client = create_http(HttpsLogCallBack);
  1127. Json::Value rootReq;
  1128. Json::FastWriter writer;
  1129. rootReq["ip"] = GetLocalIP();
  1130. rootReq["entityName"] = ENTITY_NAME;
  1131. rootReq["adapterInterName"] = "ReadAccount";//适配器接口名
  1132. cReq.m_url = getUrl();
  1133. cReq.m_timeOut = 30;
  1134. string jsonReq = writer.write(rootReq);
  1135. cReq.m_reqStr = jsonReq;//请求参数
  1136. bool ret = client->Post(cReq, cRet);
  1137. if (ret) {
  1138. Json::Reader reader;
  1139. Json::Value rootRet;
  1140. if (!reader.parse(cRet.m_retStr, rootRet, false))
  1141. {
  1142. LOG4VTM(INFO, "ReadAccountHttp parse resp is fail,url=" << cReq.m_url.c_str());
  1143. return false;//失败
  1144. }
  1145. bool isSucc = rootRet["success"].asBool();
  1146. if (isSucc) {
  1147. //解析数据
  1148. if (rootRet.isMember("data")) {
  1149. bool isResult = rootRet["data"]["result"].asBool();
  1150. if (isResult) {
  1151. int dwSizeRet = rootRet["data"]["dwSize"].asInt();
  1152. cardNo.dwSize = dwSizeRet;
  1153. int dwTrack2SizeRet = rootRet["data"]["dwTrack2Size"].asInt();
  1154. cardNo.dwTrack2Size = dwTrack2SizeRet;
  1155. int dwTrack3SizeRet = rootRet["data"]["dwTrack3Size"].asInt();
  1156. cardNo.dwTrack3Size = dwTrack3SizeRet;
  1157. string accountRet = rootRet["data"]["account"].asString();
  1158. string track2Ret = rootRet["data"]["track2"].asString();
  1159. string track3Ret = rootRet["data"]["track3"].asString();
  1160. //LOG4VTM(INFO, "ReadAccountHttp cardNo.dwSize=" << cardNo.dwSize);
  1161. //LOG4VTM(INFO, "ReadAccountHttp cardNo.dwTrack2Size=" << cardNo.dwTrack2Size);
  1162. //LOG4VTM(INFO, "ReadAccountHttp cardNo.dwTrack3Size=" << cardNo.dwTrack3Size);
  1163. //LOG4VTM(INFO, "ReadAccountHttp cardNo.account=" << accountRet.c_str());
  1164. //LOG4VTM(INFO, "ReadAccountHttp cardNo.track2=" << track2Ret.c_str());
  1165. //LOG4VTM(INFO, "ReadAccountHttp cardNo.track3=" << track3Ret.c_str());
  1166. //PBYTE pData = new BYTE[MAX_MAG_TRACK_SIZE];
  1167. //ZeroMemory(pData, MAX_MAG_TRACK_SIZE);
  1168. //int dataLen = StrBuf2HexBuf(accountRet.c_str(), &pData);
  1169. //LOG4VTM(INFO, "ReadAccountHttp cardNo.account=" << pData);
  1170. //memcpy(cardNo.account, pData, dataLen);//赋值
  1171. //delete[] pData;
  1172. //pData = new BYTE[MAX_MAG_TRACK_SIZE];
  1173. //ZeroMemory(pData, MAX_MAG_TRACK_SIZE);
  1174. //dataLen = StrBuf2HexBuf(track2Ret.c_str(), &pData);
  1175. //LOG4VTM(INFO, "ReadAccountHttp cardNo.track2=" << pData);
  1176. //memcpy(cardNo.track2, pData, dataLen);//赋值
  1177. //delete[] pData;
  1178. //pData = new BYTE[MAX_MAG_TRACK_SIZE];
  1179. //ZeroMemory(pData, MAX_MAG_TRACK_SIZE);
  1180. //dataLen = StrBuf2HexBuf(track3Ret.c_str(), &pData);
  1181. //LOG4VTM(INFO, "ReadAccountHttp cardNo.track3=" << pData);
  1182. //memcpy(cardNo.track3, pData, dataLen);//赋值
  1183. //delete[] pData;
  1184. memcpy(cardNo.account, accountRet.c_str(), cardNo.dwSize);//赋值
  1185. memcpy(cardNo.track2, track2Ret.c_str(), cardNo.dwTrack2Size);//赋值
  1186. memcpy(cardNo.track3, track3Ret.c_str(), cardNo.dwTrack3Size);//赋值
  1187. LOG4VTM(INFO, "ReadAccountHttp cardNo.dwSize=" << cardNo.dwSize);
  1188. LOG4VTM(INFO, "Before dwTrack2Size");
  1189. LOG4VTM(INFO, "ReadAccountHttp cardNo.dwTrack2Size=" << cardNo.dwTrack2Size);
  1190. LOG4VTM(INFO, "After dwTrack2Size");
  1191. LOG4VTM(INFO, "ReadAccountHttp cardNo.dwTrack3Size=" << cardNo.dwTrack3Size);
  1192. LOG4VTM(INFO, "ReadAccountHttp cardNo.account=" << strlen(cardNo.account));
  1193. LOG4VTM(INFO, "ReadAccountHttp cardNo.track2=" << strlen(cardNo.track2));
  1194. LOG4VTM(INFO, "ReadAccountHttp cardNo.track3=" << strlen(cardNo.track3));
  1195. return true;
  1196. }
  1197. else {
  1198. return false;
  1199. }
  1200. }
  1201. else {
  1202. LOG4VTM(INFO, "ReadAccountHttp return [data] is null");
  1203. return false;
  1204. }
  1205. }
  1206. else {
  1207. LOG4VTM(INFO, "ReadAccountHttp [success] is false,");
  1208. return false;
  1209. }
  1210. }
  1211. else {
  1212. LOG4VTM(INFO, "ReadAccountHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  1213. return false;
  1214. }
  1215. }
  1216. bool CardIssuerImpl::GetSlotSumHttp(int& sum)
  1217. {
  1218. LOG4VTM(INFO, "GetSlotSumHttp");
  1219. CommonReq cReq;
  1220. CommonRet cRet;
  1221. IHttpFunc* client;
  1222. client = create_http(HttpsLogCallBack);
  1223. Json::Value rootReq;
  1224. Json::FastWriter writer;
  1225. rootReq["ip"] = GetLocalIP();
  1226. rootReq["entityName"] = ENTITY_NAME;
  1227. rootReq["adapterInterName"] = "GetSlotSum";//适配器接口名
  1228. cReq.m_url = getUrl();
  1229. cReq.m_timeOut = 30;
  1230. string jsonReq = writer.write(rootReq);
  1231. cReq.m_reqStr = jsonReq;//请求参数
  1232. bool ret = client->Post(cReq, cRet);
  1233. if (ret) {
  1234. Json::Reader reader;
  1235. Json::Value rootRet;
  1236. if (!reader.parse(cRet.m_retStr, rootRet, false))
  1237. {
  1238. LOG4VTM(INFO, "GetSlotSumHttp parse resp is fail,url=" << cReq.m_url.c_str());
  1239. return false;//失败
  1240. }
  1241. bool isSucc = rootRet["success"].asBool();
  1242. if (isSucc) {
  1243. //解析数据
  1244. if (rootRet.isMember("data")) {
  1245. bool isResult = rootRet["data"]["result"].asBool();
  1246. if (isResult) {
  1247. int sumRet = rootRet["data"]["sum"].asInt();
  1248. sum = sumRet;
  1249. return true;
  1250. }
  1251. else {
  1252. return false;
  1253. }
  1254. }
  1255. else {
  1256. LOG4VTM(INFO, "GetSlotSumHttp return [data] is null");
  1257. return false;
  1258. }
  1259. }
  1260. else {
  1261. LOG4VTM(INFO, "GetSlotSumHttp [success] is false,");
  1262. return false;
  1263. }
  1264. }
  1265. else {
  1266. LOG4VTM(INFO, "GetSlotSumHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  1267. return false;
  1268. }
  1269. }
  1270. bool CardIssuerImpl::QuerySlotsStatusHttp(SlotStatus& slots, const int slot, bool bFull /*= false*/)
  1271. {
  1272. LOG4VTM(INFO, "QuerySlotsStatusHttp slot=" << slot << " bFull=" << bFull);
  1273. CommonReq cReq;
  1274. CommonRet cRet;
  1275. IHttpFunc* client;
  1276. client = create_http(HttpsLogCallBack);
  1277. Json::Value rootReq;
  1278. Json::FastWriter writer;
  1279. rootReq["ip"] = GetLocalIP();
  1280. rootReq["entityName"] = ENTITY_NAME;
  1281. rootReq["adapterInterName"] = "QuerySlotsStatus";//适配器接口名
  1282. //rootReq["slot"] = slot;
  1283. //rootReq["bFull"] = bFull ? 1 : 0;//转换成0和1表示
  1284. cReq.m_url = getUrl();
  1285. cReq.m_timeOut = 30;
  1286. string jsonReq = writer.write(rootReq);
  1287. cReq.m_reqStr = jsonReq;//请求参数
  1288. bool ret = client->Post(cReq, cRet);
  1289. if (ret) {
  1290. Json::Reader reader;
  1291. Json::Value rootRet;
  1292. if (!reader.parse(cRet.m_retStr, rootRet, false))
  1293. {
  1294. LOG4VTM(INFO, "QuerySlotsStatusHttp parse resp is fail,url=" << cReq.m_url.c_str());
  1295. return false;//失败
  1296. }
  1297. bool isSucc = rootRet["success"].asBool();
  1298. if (isSucc) {
  1299. //解析数据
  1300. if (rootRet.isMember("data")) {
  1301. bool isResult = rootRet["data"]["result"].asBool();
  1302. if (isResult) {
  1303. int sumRet = rootRet["data"]["dwSize"].asInt();
  1304. slots.dwSize = sumRet;
  1305. for (int i = 0; i < sumRet; i++) {
  1306. slots.status[i] = rootRet["data"]["status"][i].asInt();
  1307. }
  1308. return true;
  1309. }
  1310. else {
  1311. return false;
  1312. }
  1313. }
  1314. else {
  1315. LOG4VTM(INFO, "QuerySlotsStatusHttp return [data] is null");
  1316. return false;
  1317. }
  1318. }
  1319. else {
  1320. LOG4VTM(INFO, "QuerySlotsStatusHttp [success] is false,");
  1321. return false;
  1322. }
  1323. }
  1324. else {
  1325. LOG4VTM(INFO, "QuerySlotsStatusHttp req fail,err=%s" << cRet.m_errMsg.c_str());
  1326. return false;
  1327. }
  1328. }
  1329. bool CardIssuerImpl::PrintCardFaceRightNowHttp(const KakuPrintInfo printInfo)
  1330. {
  1331. LOG4VTM(INFO, "PrintCardFaceRightNowHttp printInfo.formPath=" << printInfo.formPath << " printInfo.fields=" << printInfo.fields);
  1332. return commonSimpleHttp("PrintCardFaceRightNow");
  1333. }
  1334. string CardIssuerImpl::getUrl()
  1335. {
  1336. string urlStr = iniRead.ReadString("server", "url", "");
  1337. if (urlStr.empty()) {
  1338. LOG4VTM(INFO, "url is empty, use default url");
  1339. return "http://localhost:8080/avs/imitate/simulateDataN";
  1340. }
  1341. else {
  1342. return urlStr;
  1343. }
  1344. }
  1345. bool CardIssuerImpl::commonSimpleHttp(string adapterInterName)
  1346. {
  1347. CommonReq cReq;
  1348. CommonRet cRet;
  1349. IHttpFunc* client;
  1350. client = create_http(HttpsLogCallBack);
  1351. Json::Value rootReq;
  1352. Json::FastWriter writer;
  1353. rootReq["ip"] = GetLocalIP();
  1354. rootReq["entityName"] = ENTITY_NAME;
  1355. rootReq["adapterInterName"] = adapterInterName;//适配器接口名
  1356. string strErrPrefix = adapterInterName + "http";
  1357. cReq.m_url = getUrl();
  1358. cReq.m_timeOut = 30;
  1359. string jsonReq = writer.write(rootReq);
  1360. cReq.m_reqStr = jsonReq;//请求参数
  1361. bool ret = client->Post(cReq, cRet);
  1362. if (ret) {
  1363. Json::Reader reader;
  1364. Json::Value rootRet;
  1365. if (!reader.parse(cRet.m_retStr, rootRet, false))
  1366. {
  1367. LOG4VTM(INFO, strErrPrefix << " parse resp is fail,url=" << cReq.m_url.c_str());
  1368. return false;//失败
  1369. }
  1370. bool isSucc = rootRet["success"].asBool();
  1371. if (isSucc) {
  1372. //解析数据
  1373. if (rootRet.isMember("data")) {
  1374. bool isResult = rootRet["data"]["result"].asBool();
  1375. if (isResult) {
  1376. return true;
  1377. }
  1378. else {
  1379. return false;
  1380. }
  1381. }
  1382. else {
  1383. LOG4VTM(INFO, strErrPrefix << " return [data] is null");
  1384. return false;
  1385. }
  1386. }
  1387. else {
  1388. LOG4VTM(INFO, strErrPrefix << " [success] is false,");
  1389. return false;
  1390. }
  1391. }
  1392. else {
  1393. LOG4VTM(INFO, strErrPrefix << " req fail,err=%s" << cRet.m_errMsg.c_str());
  1394. return false;
  1395. }
  1396. }