诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1617 regels
50 KiB

  1. #pragma once
  2. ////////////////////////////////// HttpClient.cpp
  3. #include "StdAfx.h"
  4. #include "Shop.h"
  5. #include "AttemperEngineSink.h"
  6. #include "ShowTime.h"
  7. #include "GameServer.h"
  8. #include "GameServerDlg.h"
  9. #include "curl/curl.h"
  10. #include <string>
  11. #include <atlconv.h>
  12. #include "ServiceUnits.h"
  13. #include "ChineseCode.h"
  14. #include "../Json/json.h"
  15. #include "JsonBusiness.h"
  16. #include "../../MessageDef/Pb_UserInfo.pb.h"
  17. #include "../../../../消息定义/CMD_Sparrow.h"
  18. #define BUFFER_SIZE 1024
  19. #define NORMAL_CONNECT INTERNET_FLAG_KEEP_CONNECTION
  20. #define SECURE_CONNECT NORMAL_CONNECT | INTERNET_FLAG_SECURE
  21. #define NORMAL_REQUEST INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE
  22. #define SECURE_REQUEST NORMAL_REQUEST | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID
  23. HANDLE CHttpClient::m_hThread = NULL;
  24. unsigned CHttpClient::m_uiThreadID = 0;
  25. HANDLE CHttpClient::g_Event; // 触发事件句柄
  26. CAttemperEngineSink* CHttpClient::pCAttemperEngineSink = NULL; //调度钩子
  27. bool CHttpClient::m_bRun = true;// 关闭
  28. std::unordered_map<DWORD, GETDUILIELIST> CHttpClient::GetData;
  29. CCriticalSection CHttpClient::m_CriticalSection;
  30. extern CGameServerApp theApp;
  31. void* CHttpClient::curl = NULL;
  32. CHttpClient::CHttpClient(LPCTSTR strAgent) :
  33. m_bDebug(false)
  34. {
  35. m_pSession = new CInternetSession(strAgent);
  36. INTERNET_PROXY_INFO ipi;
  37. ZeroMemory(&ipi, sizeof(ipi));
  38. ipi.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
  39. ipi.lpszProxyBypass = NULL;
  40. m_pSession->SetOption(INTERNET_OPEN_TYPE_DIRECT, &ipi, sizeof(ipi), 0);
  41. m_pConnection = NULL;
  42. m_pFile = NULL;
  43. }
  44. CHttpClient::~CHttpClient(void)
  45. {
  46. Clear();
  47. if (NULL != m_pSession)
  48. {
  49. m_pSession->Close();
  50. delete m_pSession;
  51. m_pSession = NULL;
  52. }
  53. }
  54. void CHttpClient::Clear()
  55. {
  56. if (NULL != m_pFile)
  57. {
  58. m_pFile->Close();
  59. delete m_pFile;
  60. m_pFile = NULL;
  61. }
  62. if (NULL != m_pConnection)
  63. {
  64. m_pConnection->Close();
  65. delete m_pConnection;
  66. m_pConnection = NULL;
  67. }
  68. }
  69. int CHttpClient::ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  70. {
  71. CString strServer;
  72. CString strObject;
  73. DWORD dwServiceType;
  74. INTERNET_PORT nPort;
  75. strResponse = "";
  76. Err = "";
  77. AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);
  78. if (AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
  79. {
  80. return FAILURE;
  81. }
  82. try
  83. {
  84. m_pConnection = m_pSession->GetHttpConnection(strServer,
  85. dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT,
  86. nPort);
  87. m_pFile = m_pConnection->OpenRequest(strMethod, strObject,
  88. NULL, 1, NULL, NULL,
  89. (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
  90. //DWORD dwFlags;
  91. //m_pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
  92. //dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
  93. ////set web server option
  94. //m_pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
  95. m_pFile->AddRequestHeaders(_T("Accept: *,*/*"));
  96. m_pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
  97. m_pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
  98. m_pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
  99. m_pFile->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData));
  100. char szChars[BUFFER_SIZE + 1] = { 0 };
  101. CStringA strRawResponse = "";
  102. UINT nReaded = 0;
  103. while ((nReaded = m_pFile->Read((void*)szChars, BUFFER_SIZE)) > 0)
  104. {
  105. szChars[nReaded] = '\0';
  106. strRawResponse += szChars;
  107. memset(szChars, 0, BUFFER_SIZE + 1);
  108. }
  109. int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, NULL, 0);
  110. WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
  111. memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
  112. MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, pUnicode, unicodeLen);
  113. CString cs(pUnicode);
  114. delete[]pUnicode;
  115. pUnicode = NULL;
  116. strResponse = cs;
  117. Clear();
  118. }
  119. catch (CInternetException* e)
  120. {
  121. Clear();
  122. DWORD dwErrorCode = e->m_dwError;
  123. e->Delete();
  124. DWORD dwError = GetLastError();
  125. //PRINT_LOG("dwError = %d", dwError, 0);
  126. if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
  127. {
  128. Err.Format(_T("请求超时, LastError=%d"), dwErrorCode, dwError);
  129. return OUTTIME;
  130. }
  131. else
  132. {
  133. Err.Format(_T("请求失败, LastError=%d"), dwErrorCode, dwError);
  134. return FAILURE;
  135. }
  136. }
  137. return SUCCESS;
  138. }
  139. int CHttpClient::HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  140. {
  141. return ExecuteRequest(_T("GET"), strUrl, strPostData, strResponse, Err);
  142. }
  143. int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  144. {
  145. return ExecuteRequest(_T("POST"), strUrl, strPostData, strResponse, Err);
  146. }
  147. //添加
  148. void CHttpClient::AddLog(DWORD dwSocketID, GETDUILIEBASE LogText)
  149. {
  150. CWHDataLocker lock(m_CriticalSection);
  151. if (!m_bRun) return;
  152. if (GetData.find(dwSocketID) == GetData.end())
  153. {
  154. GETDUILIELIST mData;
  155. ZeroMemory(&mData, sizeof(mData));
  156. mData.dDataList[0] = LogText;
  157. std::pair<DWORD, GETDUILIELIST> aa(dwSocketID, mData);
  158. GetData.insert(aa);
  159. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
  160. {
  161. if (LogText.CommendID == 1)
  162. {
  163. CString csTest;
  164. csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("请求订单"));
  165. CShowTime aa(csTest, true, 99999, 99999);
  166. }
  167. else if (LogText.CommendID == 3)
  168. {
  169. CString csTest;
  170. csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("绑定代理"));
  171. CShowTime aa(csTest, true, 99999, 99999);
  172. }
  173. else if (LogText.CommendID == 2)
  174. {
  175. CString csTest;
  176. csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("获取订单列表"));
  177. CShowTime aa(csTest, true, 99999, 99999);
  178. }
  179. else if (LogText.CommendID == 4)
  180. {
  181. CString csTest;
  182. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("分享朋友圈"));
  183. CShowTime aa(csTest, true, 99999, 99999);
  184. }
  185. else if (LogText.CommendID == 8)
  186. {
  187. CString csTest;
  188. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("请求发送手机验证码"));
  189. CShowTime aa(csTest, true, 99999, 99999);
  190. }
  191. else if (LogText.CommendID == 9)
  192. {
  193. CString csTest;
  194. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("校验落实验证码"));
  195. CShowTime aa(csTest, true, 99999, 99999);
  196. }
  197. else if (LogText.CommendID == 10)
  198. {
  199. CString csTest;
  200. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("玩家自主解绑代理"));
  201. CShowTime aa(csTest, true, 99999, 99999);
  202. }
  203. else if (LogText.CommendID == 11)
  204. {
  205. CString csTest;
  206. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库"));
  207. CShowTime aa(csTest, true, 99999, 99999);
  208. }
  209. else if (LogText.CommendID == 12)
  210. {
  211. CString csTest;
  212. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库EX"));
  213. CShowTime aa(csTest, true, 99999, 99999);
  214. }
  215. }
  216. if (g_Event) SetEvent(g_Event);
  217. }
  218. else
  219. {
  220. std::unordered_map<DWORD, GETDUILIELIST>::iterator it = GetData.find(dwSocketID);
  221. GETDUILIELIST gTemp = it->second;
  222. //查询有没有这个命令
  223. for (int i = 0; i < 10; i++)
  224. {
  225. if (gTemp.dDataList[i].CommendID == 0) continue;
  226. //重复命令,只能发送一次
  227. if (gTemp.dDataList[i].CommendID == LogText.CommendID) return;
  228. }
  229. for (int i = 0; i < 10; i++)
  230. {
  231. if (gTemp.dDataList[i].CommendID == 0)
  232. {
  233. gTemp.dDataList[i] = LogText;
  234. GetData[dwSocketID] = gTemp;
  235. break;
  236. }
  237. }
  238. if (LogText.CommendID == 1)
  239. {
  240. CString csTest;
  241. csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("请求订单"));
  242. CShowTime aa(csTest, true, 99999, 99999);
  243. }
  244. else if (LogText.CommendID == 3)
  245. {
  246. CString csTest;
  247. csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("绑定代理"));
  248. CShowTime aa(csTest, true, 99999, 99999);
  249. }
  250. else if (LogText.CommendID == 2)
  251. {
  252. CString csTest;
  253. csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("获取订单列表"));
  254. CShowTime aa(csTest, true, 99999, 99999);
  255. }
  256. else if (LogText.CommendID == 4)
  257. {
  258. CString csTest;
  259. csTest.Format(_T("玩家(%d)添加了大于一条任务->%s"), LogText.dUserID, _T("分享朋友圈"));
  260. CShowTime aa(csTest, true, 99999, 99999);
  261. }
  262. else if (LogText.CommendID == 8)
  263. {
  264. CString csTest;
  265. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("获取手机验证码"));
  266. CShowTime aa(csTest, true, 99999, 99999);
  267. }
  268. else if (LogText.CommendID == 9)
  269. {
  270. CString csTest;
  271. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("校验手机验证码"));
  272. CShowTime aa(csTest, true, 99999, 99999);
  273. }
  274. else if (LogText.CommendID == 10)
  275. {
  276. CString csTest;
  277. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("玩家自主解绑代理"));
  278. CShowTime aa(csTest, true, 99999, 99999);
  279. }
  280. else if (LogText.CommendID == 11)
  281. {
  282. CString csTest;
  283. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库"));
  284. CShowTime aa(csTest, true, 99999, 99999);
  285. }
  286. else if (LogText.CommendID == 12)
  287. {
  288. CString csTest;
  289. csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库EX"));
  290. CShowTime aa(csTest, true, 99999, 99999);
  291. }
  292. if (g_Event) SetEvent(g_Event);
  293. }
  294. }
  295. //获取
  296. std::unordered_map<DWORD, GETDUILIELIST> CHttpClient::GetLog()
  297. {
  298. CWHDataLocker lock(m_CriticalSection);//
  299. std::unordered_map<DWORD, GETDUILIELIST> Ret = GetData;
  300. GetData.clear();
  301. return Ret;
  302. }
  303. //获取数量
  304. DWORD CHttpClient::GetCount()
  305. {
  306. CWHDataLocker lock(m_CriticalSection);
  307. return GetData.size();
  308. }
  309. //启动
  310. bool CHttpClient::start(CAttemperEngineSink* pSink)
  311. {
  312. if (m_hThread != NULL) return false;
  313. CString csEvent;
  314. //随机种子
  315. srand(GetTickCount());
  316. int iRand = rand()%9999;
  317. csEvent.Format(_T("MJ_HTTPGETDATA%d%d"), pSink->m_pGameServiceOption->wServerID, iRand);
  318. if (!g_Event) g_Event = CreateEvent(NULL, false, false, csEvent); //人工重置,有信号
  319. m_bRun = true;
  320. pCAttemperEngineSink = pSink;
  321. m_hThread = (HANDLE)_beginthreadex(NULL, 0, &Runs, NULL, 0, &m_uiThreadID);
  322. return true;
  323. };
  324. //结束
  325. bool CHttpClient::end()
  326. {
  327. if (!m_hThread) return false;
  328. pCAttemperEngineSink = NULL;
  329. m_bRun = false;
  330. SetEvent(g_Event);
  331. return true;
  332. }
  333. // 进行Url编码 UTF-8
  334. CString CHttpClient::UrlEncode(CString strUnicode)
  335. {
  336. LPCWSTR unicode = T2CW(strUnicode);
  337. int len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, 0, 0, 0, 0);
  338. if (!len)
  339. return strUnicode;
  340. char *utf8 = new char[len + 1];
  341. ZeroMemory(utf8, len + 1);
  342. char *utf8temp = utf8;
  343. WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len + 1, 0, 0);
  344. utf8[len] = NULL;
  345. CString strTemp, strEncodeData;
  346. while (*utf8 != 0)
  347. {
  348. strTemp.Format(_T("%%%2x"), (BYTE)*utf8);
  349. strEncodeData += strTemp;
  350. ++utf8;
  351. }
  352. delete[]utf8temp;
  353. return CString(strEncodeData);
  354. }
  355. //运行
  356. unsigned __stdcall CHttpClient::Runs(void* pParam)
  357. {
  358. if (g_Event == NULL)
  359. {
  360. _endthreadex(0);
  361. m_hThread = NULL;
  362. m_bRun = false;
  363. return 0;
  364. }
  365. CString strResponse; CString Err;
  366. if (curl == NULL)
  367. {
  368. curl = curl_easy_init();
  369. }
  370. // 线程开始
  371. while (m_bRun && WAIT_OBJECT_0 == WaitForSingleObject(g_Event, INFINITE)) //指定的对象为有信号状态,这里确实为有信号状态,直接往下执行
  372. {
  373. std::unordered_map<DWORD, GETDUILIELIST> Ret = GetLog();
  374. std::unordered_map<DWORD, GETDUILIELIST>::iterator it = Ret.begin();
  375. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
  376. {
  377. CString csTest;
  378. csTest.Format(_T("支付线程获得获得信号,信号获得任务数=%d。"), Ret.size());
  379. TCHAR szBuffer[600];
  380. ZeroMemory(szBuffer, sizeof(TCHAR) * 600);
  381. StringCchCopy(szBuffer, 600, csTest);
  382. CShowTime aa(szBuffer, true, 99999, 99999);
  383. }
  384. CString csRet = _T("");
  385. for (; it != Ret.end(); it++)
  386. {
  387. DWORD dStart = GetTickCount();
  388. //构建请求
  389. CString csGet;
  390. GETDUILIELIST getData = it->second;
  391. for (int i = 0; i < 10; i++)
  392. {
  393. switch (getData.dDataList[i].CommendID)
  394. {
  395. case 10000: //
  396. {
  397. csRet = OnExeInfo(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].bb.szName, getData.dDataList[i].dwSocketID);
  398. break;
  399. }
  400. case 1: //请求订单编号
  401. {
  402. csRet = OnGetDingDan(*((GETDUILIE *)getData.dDataList[i].szBuffer), CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dwSocketID);
  403. break;
  404. }
  405. case 2://获取购买记录
  406. {
  407. csRet = OnGetDingDanList(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dwSocketID);
  408. break;
  409. }
  410. case 3://绑定代理
  411. {
  412. csRet = OnGetBangDing(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dwSocketID, ((CMD_GR_BangDing *)getData.dDataList[i].szBuffer)->dDaiLi, getData.dDataList[i].dUserID, getData.dDataList[i].bb.szName, getData.dDataList[i].bb.szImgHead);
  413. break;
  414. }
  415. case 4://分享通知
  416. {
  417. csRet = OnGetShare(CString(getData.dDataList[i].szUnionID), 0, 0);
  418. }
  419. case 7://获取代理id
  420. {
  421. csRet = OnGetDaiLiID(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, getData.dDataList[i].dwSocketID, getData.dDataList[i].bb.szName);
  422. break;
  423. }
  424. case 8://获取手机验证码
  425. {
  426. OnGetIphoneNumber(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, getData.dDataList[i].dwSocketID);
  427. break;
  428. }
  429. case 9://校验手机验证码,把dUserID当做了手机的验证码
  430. {
  431. csRet = OnVerfIphoneNumberCode(CString(getData.dDataList[i].szUnionID), /*getData.dDataList[i].dUserID*/getData.dDataList[i].bb.szName, getData.dDataList[i].dwSocketID);
  432. break;
  433. }
  434. case 10://玩家自主解绑代理
  435. {
  436. DWORD dwAccurency, dwDaiLiID;
  437. dwAccurency = _tstoi(getData.dDataList[i].bb.szImgHead);
  438. dwDaiLiID = _tstoi(getData.dDataList[i].bb.szName);
  439. OnUntieAgent(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, dwAccurency, dwDaiLiID, getData.dDataList[i].dwSocketID);
  440. break;
  441. }
  442. case 11://抽奖记录入库
  443. {
  444. WORD wLotteryID = _tstoi(getData.dDataList[i].bb.szName);
  445. WORD wLotteryType = _tstoi(getData.dDataList[i].szUnionID);
  446. DWORD dwRecordID = stoi(getData.dDataList[i].szBuffer);
  447. OnLotteryResult(getData.dDataList[i].dUserID, wLotteryID, wLotteryType, CString(getData.dDataList[i].bb.szImgHead), dwRecordID, getData.dDataList[i].dwSocketID);
  448. break;
  449. }
  450. case 12://抽奖记录入库EX
  451. {
  452. DWORD dwRecordID = stoi(getData.dDataList[i].szBuffer);
  453. OnLotteryResultEx(getData.dDataList[i].dUserID, CString(getData.dDataList[i].bb.szName), CString(getData.dDataList[i].bb.szImgHead), CString(getData.dDataList[i].szUnionID), dwRecordID, getData.dDataList[i].dwSocketID);
  454. break;
  455. }
  456. case 13://战绩分享闲聊群
  457. {
  458. OnFenXiangXianLiao(getData.dDataList[i].szUnionID, *((DBR_GR_ClubRecordXianLiao *)getData.dDataList[i].szBuffer));
  459. break;
  460. }
  461. default:
  462. break;
  463. }
  464. }
  465. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
  466. {
  467. dStart = GetTickCount() - dStart;
  468. CString csTest;
  469. getData.dDataList[0].bb.szName[31] = 0x00;
  470. csTest.Format(_T("处理完成了(%s)的请求,耗时=%d。\r\n处理结果=%s"), getData.dDataList[0].bb.szName, dStart, csRet);
  471. CShowTime aa(csTest, true, 99999, 99999);
  472. }
  473. }
  474. Ret.clear();
  475. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
  476. {
  477. CString csTest;
  478. csTest.Format(_T("处理完成,进入休眠。"));
  479. CShowTime aa(csTest, true, 99999, 99999);
  480. }
  481. }
  482. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
  483. {
  484. CString csTest;
  485. csTest.Format(_T("支付线程退出。"));
  486. CShowTime aa(csTest, true, 99999, 99999);
  487. }
  488. m_bRun = false;
  489. if (g_Event)
  490. {
  491. CloseHandle(g_Event);
  492. g_Event = NULL;
  493. }
  494. GetLog();
  495. if (curl != NULL)
  496. {
  497. curl_easy_cleanup(curl);
  498. curl = NULL;
  499. }
  500. //_endthreadex(0);
  501. m_hThread = NULL;
  502. return 0;
  503. }
  504. // 获取订单编号
  505. CString CHttpClient::OnGetDingDan(GETDUILIE Data, CString csUnionID, DWORD dwSocketID)
  506. {
  507. DWORD dStart = GetTickCount();
  508. CString csGet;
  509. IServerUserItem * pUser = CHttpClient::pCAttemperEngineSink->GetBindUserItem(LOWORD(dwSocketID));
  510. /*/// by yd 判断pUser是否为空
  511. WORD deviceType = 0xFFFF;
  512. if (pUser != NULL)
  513. {
  514. deviceType = pUser->GetMobileUserMachineType();
  515. }*/
  516. CString HttpPath = _T("");
  517. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  518. if (HttpPath == _T(""))
  519. {
  520. //HttpPath = _T("http://www.jiangn.net/");
  521. HttpPath = _T("http://cycz.legaogame.com/");
  522. }
  523. csGet.Format(_T("%sPay/CreatXMLPay"), HttpPath);
  524. HttpPath = csGet;
  525. csGet = _T("");
  526. Data.ack.dwGameID = 305;
  527. CTime t = CTime::GetCurrentTime();
  528. CString time = t.Format("%Y%m%d%H%M%S");
  529. CString key = _T("VwZkLv0m0G^5T@2v");
  530. CString stringSource = _T("");
  531. CString stringTarget = _T("");
  532. TCHAR strTemp[LEN_MD5];
  533. stringSource.Format(_T("%d%d%d%d%s%d%d%d%s%s"), Data.ack.dwGameID, Data.dd.dProductId, Data.dd.jiage, 1, csUnionID, Data.ack.dUserID, Data.ack.dDaiLi, Data.dd.payflag, time, key);
  534. CWHEncrypt::MD5Encrypt(stringSource, strTemp);
  535. stringTarget.Format(_T("%s"), strTemp);
  536. csGet.Format(_T("serviceId=%d&productId=%d&productName=%s&unitPrice=%d&amount=%d&unionid=%s&userid=%d&agentid=%d&time=%s&sign=%s&clientIp=%s&payType=%d"), Data.ack.dwGameID, Data.dd.dProductId, UrlEncode(Data.dd.ProductName), Data.dd.jiage, 1, csUnionID, Data.ack.dUserID, Data.ack.dDaiLi, time, stringTarget, Data.ack.szClientAddr, Data.dd.payflag);
  537. if (pCAttemperEngineSink->IsJC(305)){
  538. CTraceService::TraceString(HttpPath, TraceLevel_Normal);
  539. CTraceService::TraceString(csGet, TraceLevel_Normal);
  540. }
  541. std::string szUrl;
  542. std::string szParam;
  543. szUrl = CW2AEX<1024>(HttpPath).m_psz;
  544. szParam = CW2AEX<1024>(csGet).m_psz;
  545. std::string csRet;
  546. CHttpClient aa;
  547. //int iRet = aa.Get(szUrl, csRet);
  548. int iRet = aa.Post(szUrl, szParam, csRet);
  549. dStart = GetTickCount() - dStart;
  550. //CString bb = (CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
  551. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  552. if (iRet != SUCCESS)
  553. {
  554. CString csTest;
  555. csTest.Format(_T("获取微信订单失败。请求耗时=%d。出错代码=%d。请求【%s】"), dStart, iRet, csGet);
  556. CShowTime aa(csTest, true, 99999, 99999);
  557. //失败写日志
  558. StringCchCopy(Data.ack.szRet, 2048, _T("{\"Code\":\"2\",\"Msg\":\"失败\"}"));
  559. /* StringCchCopy(Data.ack.szRet, 2048, _T("<NewDataSet><Table1><Return>0</Return><Text>操作失败</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>"));*/
  560. Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
  561. //发送结果
  562. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
  563. return bb;
  564. }
  565. if (Data.ack.dUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(Data.ack.dUserID))
  566. {
  567. CString csTest;
  568. if (bb.GetLength() > 512)
  569. {
  570. csTest.Format(_T("获取微信订单结果:%s。请求耗时=%d。请求【%s】"), bb.Mid(0, 512), dStart, csGet);
  571. }
  572. else
  573. {
  574. csTest.Format(_T("获取微信订单结果:%s。请求耗时=%d。请求【%s】"), bb, dStart, csGet);
  575. }
  576. TCHAR szBuffer[600];
  577. ZeroMemory(szBuffer, sizeof(TCHAR) * 600);
  578. StringCchCopy(szBuffer, 600, csTest);
  579. CShowTime aa(szBuffer, true, 99999, 99999);
  580. }
  581. if (bb.GetLength() < 2048)
  582. {
  583. StringCchCopy(Data.ack.szRet, 2048, bb);
  584. Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
  585. //发送结果
  586. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
  587. }
  588. else
  589. {
  590. //超长日志
  591. /* StringCchCopy(Data.ack.szRet, 2048, _T("<NewDataSet><Table1><Return>0</Return><Text>操作失败</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>"));*/
  592. StringCchCopy(Data.ack.szRet, 2048, _T("{\"Code\":\"1\",\"Msg\":\"失败\"}"));
  593. Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
  594. //发送结果
  595. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
  596. }
  597. return bb;
  598. }
  599. // 获取订单列表
  600. CString CHttpClient::OnGetDingDanList(CString csUnionID, DWORD dwSocketID)
  601. {
  602. CString csGet, Err;
  603. CString HttpPath = _T("");
  604. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  605. if (HttpPath == _T(""))
  606. {
  607. HttpPath = _T("http://www.jiangn.net/");
  608. }
  609. csGet.Format(_T("%sGetcyhddata.aspx?GetMyTrade_No=1&iPage=0&unionid=%s&pass=am8du5hua3zi1"), HttpPath,csUnionID);
  610. std::string szUrl;
  611. szUrl = CW2AEX<1024>(csGet).m_psz;
  612. std::string csRet;
  613. CHttpClient aa;
  614. int iRet = aa.Get(szUrl, csRet);
  615. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
  616. //发送结果
  617. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanListCallBack(bb, dwSocketID);
  618. return bb;
  619. }
  620. //分享通知
  621. CString CHttpClient::OnGetShare(CString csUnionID, DWORD UserID, DWORD dwXinYong)
  622. {
  623. return L"";
  624. }
  625. // 绑定代理
  626. CString CHttpClient::OnGetBangDing(CString csUnionID, DWORD dwSocketID, DWORD dDaiLi, DWORD dUserID, CString Name, CString Head)
  627. {
  628. DWORD dStart = GetTickCount();
  629. #ifdef _TEST
  630. CString abc = L"<NewDataSet><Table1><Return>1</Return><Text>操作成功</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>";
  631. //发送结果
  632. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserBangDingCallBack(abc, dwSocketID, dDaiLi);
  633. return abc;
  634. #endif
  635. CString csGet;
  636. IServerUserItem * pUser = CHttpClient::pCAttemperEngineSink->GetBindUserItem(LOWORD(dwSocketID));
  637. /*/// by yd 判断pUser是否为空
  638. WORD deviceType = 0xFFFF;
  639. if (pUser != NULL)
  640. {
  641. deviceType = pUser->GetMobileUserMachineType();
  642. }*/
  643. CString HttpPath = _T("");
  644. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  645. if (HttpPath == _T(""))
  646. {
  647. //HttpPath = _T("http://www.jiangn.net/");
  648. HttpPath = _T("http://cycz.legaogame.com/");
  649. }
  650. csGet.Format(_T("%sUser/UserBindAgentXml"), HttpPath);
  651. HttpPath = csGet;
  652. csGet = _T("");
  653. //测试用例
  654. CTime t = CTime::GetCurrentTime();
  655. CString time = t.Format("%Y%m%d%H%M%S");
  656. CString key = _T("VwZkLv0m0G^5T@2v");
  657. CString stringSource = _T("");
  658. CString stringTarget = _T("");
  659. TCHAR strTemp[LEN_MD5];
  660. stringSource.Format(_T("%d%s%d%d%s%s"), 305, csUnionID, dDaiLi, dUserID, time, key);
  661. CWHEncrypt::MD5Encrypt(stringSource, strTemp);
  662. stringTarget.Format(_T("%s"), strTemp);
  663. csGet.Format(_T("serviceId=%d&unionId=%s&agentId=%d&userId=%d&headImg=%s&wxName=%s&time=%s&sign=%s"), 305, csUnionID, dDaiLi, dUserID, UrlEncode(Head), UrlEncode(Name), time, stringTarget);
  664. if (pCAttemperEngineSink->IsJC(305)){
  665. CTraceService::TraceString(HttpPath, TraceLevel_Normal);
  666. //CTraceService::TraceString(stringTarget, TraceLevel_Normal);
  667. CTraceService::TraceString(csGet, TraceLevel_Normal);
  668. }
  669. std::string szUrl;
  670. std::string szParam;
  671. szUrl = CW2AEX<1024>(HttpPath).m_psz;
  672. szParam = CW2AEX<1024>(csGet).m_psz;
  673. std::string csRet;
  674. CHttpClient aa;
  675. //int iRet = aa.Get(szUrl, csRet);
  676. int iRet = aa.Post(szUrl, szParam, csRet);
  677. //CString bb = (CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
  678. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
  679. dStart = GetTickCount() - dStart;
  680. if (iRet != SUCCESS)
  681. {
  682. //失败写日志
  683. CString csTest;
  684. csTest.Format(_T("绑定代理请求失败。请求耗时=%d。出错代码=%d 请求【%s】,请求数据%s"), dStart, iRet, bb, csGet);
  685. CShowTime aa1(csTest, true, 99999, 99999);
  686. return bb;
  687. }
  688. if (dUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(dUserID))
  689. {
  690. CString csTest;
  691. if (bb.GetLength() > 512)
  692. {
  693. csTest.Format(_T("获取绑定代理结果:%s。请求耗时=%d。请求【%s】"), bb.Mid(0, 512), dStart, csGet);
  694. }
  695. else
  696. {
  697. csTest.Format(_T("获取绑定代理结果:%s。请求耗时=%d。请求【%s】"), bb, dStart, csGet);
  698. }
  699. CShowTime aa1(csTest, true, 99999, 99999);
  700. }
  701. //发送结果
  702. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserBangDingCallBack(bb, dwSocketID, dDaiLi);
  703. return bb;
  704. }
  705. static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
  706. {
  707. if (itype == CURLINFO_TEXT)
  708. {
  709. //printf("[TEXT]%s\n", pData);
  710. }
  711. else if (itype == CURLINFO_HEADER_IN)
  712. {
  713. printf("[HEADER_IN]%s\n", pData);
  714. }
  715. else if (itype == CURLINFO_HEADER_OUT)
  716. {
  717. printf("[HEADER_OUT]%s\n", pData);
  718. }
  719. else if (itype == CURLINFO_DATA_IN)
  720. {
  721. printf("[DATA_IN]%s\n", pData);
  722. }
  723. else if (itype == CURLINFO_DATA_OUT)
  724. {
  725. printf("[DATA_OUT]%s\n", pData);
  726. }
  727. return 0;
  728. }
  729. static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
  730. {
  731. std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
  732. if (NULL == str || NULL == buffer)
  733. {
  734. return -1;
  735. }
  736. char* pData = (char*)buffer;
  737. str->append(pData, size * nmemb);
  738. return nmemb;
  739. }
  740. int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
  741. {
  742. CURLcode res;
  743. CURL* curl = curl_easy_init();
  744. if (NULL == curl)
  745. {
  746. return CURLE_FAILED_INIT;
  747. }
  748. if (m_bDebug)
  749. {
  750. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  751. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  752. }
  753. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  754. curl_easy_setopt(curl, CURLOPT_POST, 1);
  755. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
  756. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  757. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  758. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  759. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  760. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  761. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  762. res = curl_easy_perform(curl);
  763. curl_easy_cleanup(curl);
  764. return res;
  765. }
  766. int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
  767. {
  768. CURLcode res;
  769. if (NULL == curl)
  770. {
  771. return CURLE_FAILED_INIT;
  772. }
  773. if (m_bDebug)
  774. {
  775. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  776. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  777. }
  778. struct curl_slist *headers = NULL;
  779. headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded;charset=UTF-8");
  780. headers = curl_slist_append(headers, "Accept:*/*");
  781. headers = curl_slist_append(headers, "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; CIBA)");
  782. headers = curl_slist_append(headers, "Connection:Keep-Alive");
  783. curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  784. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  785. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  786. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  787. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  788. /**
  789. * 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
  790. * 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
  791. */
  792. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  793. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
  794. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
  795. res = curl_easy_perform(curl);
  796. curl_slist_free_all(headers);//记得要释放
  797. return res;
  798. }
  799. int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
  800. {
  801. CURLcode res;
  802. CURL* curl = curl_easy_init();
  803. if (NULL == curl)
  804. {
  805. return CURLE_FAILED_INIT;
  806. }
  807. if (m_bDebug)
  808. {
  809. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  810. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  811. }
  812. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  813. curl_easy_setopt(curl, CURLOPT_POST, 1);
  814. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
  815. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  816. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  817. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  818. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  819. if (NULL == pCaPath)
  820. {
  821. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
  822. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
  823. }
  824. else
  825. {
  826. //缺省情况就是PEM,所以无需设置,另外支持DER
  827. //curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
  828. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
  829. curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
  830. }
  831. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  832. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  833. res = curl_easy_perform(curl);
  834. curl_easy_cleanup(curl);
  835. return res;
  836. }
  837. int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
  838. {
  839. CURLcode res;
  840. CURL* curl = curl_easy_init();
  841. if (NULL == curl)
  842. {
  843. return CURLE_FAILED_INIT;
  844. }
  845. if (m_bDebug)
  846. {
  847. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  848. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  849. }
  850. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  851. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  852. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  853. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  854. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  855. if (NULL == pCaPath)
  856. {
  857. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
  858. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
  859. }
  860. else
  861. {
  862. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
  863. curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
  864. }
  865. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  866. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  867. res = curl_easy_perform(curl);
  868. curl_easy_cleanup(curl);
  869. return res;
  870. }
  871. ///////////////////////////////////////////////////////////////////////////////////////////////
  872. void CHttpClient::SetDebug(bool bDebug)
  873. {
  874. m_bDebug = bDebug;
  875. }
  876. //玩家自主解绑代理
  877. //玩家自主解绑代理
  878. CString CHttpClient::OnUntieAgent(CString csUnionID, DWORD dwUserID, DWORD dwAccurency, DWORD dwDaiLiID, DWORD dwSocketID)
  879. {
  880. CString csGet, Err;
  881. CString HttpPath = _T("");
  882. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  883. if (HttpPath == _T(""))
  884. {
  885. HttpPath = _T("http://www.jiangn.net/");
  886. }
  887. //http://10.25.210.43:50043/Getcyhddata.aspx?ReleaseAgentBanding=1&unionid=owbjBv_wBNd5_or8oD7nqmvmaaLQ&Userid=103951&pass=am8du5hua3zi1
  888. csGet.Format(_T("%sGetcyhddata.aspx?ReleaseMember=1&Userid=%d&Accurency=%d&unionid=%s&Agent_Id=%d&pass=am8du5hua3zi1"), HttpPath, dwUserID, dwAccurency, csUnionID, dwDaiLiID);
  889. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(404))
  890. {
  891. CString strTip;
  892. strTip.Format(L"**玩家自主解绑代理请求:%s", csGet);
  893. CTraceService::TraceString(strTip, TraceLevel_Normal);
  894. }
  895. std::string szUrl;
  896. szUrl = CW2AEX<1024>(csGet).m_psz;
  897. std::string csRet;
  898. CHttpClient aa;
  899. int iRet = aa.Get(szUrl, csRet);
  900. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;;
  901. if (iRet != SUCCESS)
  902. {
  903. //失败写日志
  904. CString csTest;
  905. csTest.Format(_T("绑定代理请求失败。出错代码=%d 请求【%s】 ------%s---------"), iRet, bb, csGet);
  906. CShowTime aa1(csTest, true, 99999, 99999);
  907. return bb;
  908. }
  909. if (dwUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(dwUserID))
  910. {
  911. CString csTest;
  912. if (bb.GetLength() > 512)
  913. {
  914. csTest.Format(_T("绑定代理请求结果:%s。请求【%s】"), bb.Mid(0, 512), csGet);
  915. }
  916. else
  917. {
  918. csTest.Format(_T("绑定代理请求结果:%s。请求【%s】"), bb, csGet);
  919. }
  920. CShowTime aa1(csTest, true, 99999, 99999);
  921. }
  922. //if (iRet != 0)
  923. //{
  924. // CMD_GR_RequestFailure RequestFailure;
  925. // ZeroMemory(&RequestFailure, sizeof(RequestFailure));
  926. // //设置变量
  927. // RequestFailure.lErrorCode = iRet;
  928. // lstrcpyn(RequestFailure.szDescribeString, bb, CountArray(RequestFailure.szDescribeString));
  929. // //发送数据
  930. // WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
  931. // WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
  932. // //获取用户
  933. // WORD wBindIndex = LOWORD(dwSocketID);
  934. // IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
  935. // if (pIServerUserItem == NULL) return false;
  936. // pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, &RequestFailure, wHeadSize + wDataSize);
  937. //}
  938. if (pCAttemperEngineSink)pCAttemperEngineSink->OnTCPNetworkSubUserUntieAgentCallBack(bb, dwSocketID);
  939. return bb;
  940. }
  941. // 获取扫码绑定代码ID列表
  942. CString CHttpClient::OnGetDaiLiID(CString csUnionID, DWORD dwUserID, DWORD dwSocketID, CString csUserName)
  943. {
  944. DWORD dStart = GetTickCount();
  945. CString csGet, Err;
  946. CString HttpPath = _T("");
  947. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  948. if (HttpPath == _T(""))
  949. {
  950. //HttpPath = _T("http://www.jiangn.net/");
  951. HttpPath = _T("http://cycz.legaogame.com/");
  952. }
  953. csGet.Format(_T("%sUser/GetUserBindingIdByUnionId"), HttpPath);
  954. HttpPath = csGet;
  955. csGet = _T("");
  956. CTime t = CTime::GetCurrentTime();
  957. CString time = t.Format("%Y%m%d%H%M%S");
  958. CString key = _T("VwZkLv0m0G^5T@2v");
  959. CString stringSource = _T("");
  960. CString stringTarget = _T("");
  961. TCHAR strTemp[LEN_MD5];
  962. stringSource.Format(_T("%d%s%d%s%s"), KIND_ID, csUnionID, dwUserID, time, key);
  963. CWHEncrypt::MD5Encrypt(stringSource, strTemp); //生成加密串
  964. stringTarget.Format(_T("%s"), strTemp);
  965. csGet.Format(_T("serviceId=%d&unionId=%s&userId=%d&username=%s&time=%s&sign=%s"), KIND_ID, csUnionID, dwUserID, UrlEncode(csUserName), time, stringTarget);
  966. std::string szUrl;
  967. std::string szParam;
  968. szUrl = CW2AEX<1024>(HttpPath).m_psz;
  969. szParam = CW2AEX<1024>(csGet).m_psz;
  970. std::string csRet;
  971. CHttpClient aa;
  972. //int iRet = aa.Get(szUrl, csRet);
  973. int iRet = aa.Post(szUrl, szParam, csRet);
  974. dStart = GetTickCount() - dStart;
  975. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  976. //解析返回的数据
  977. Json::Reader m_reader;
  978. Json::Value m_root;
  979. std::string strbb(CW2A(bb.GetString()));
  980. if (!m_reader.parse(strbb, m_root))
  981. return L"";
  982. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(KIND_ID))
  983. {
  984. CString strTip;
  985. TCHAR tString[10000] = L"";
  986. m_root.MByteToWChar(strbb.c_str(), tString, strbb.size() + 1);
  987. strTip.Format(L"校验请求:%s,Post:%s,返回数据:%s", csGet, HttpPath, tString);//新用户ID:%d,dwUserID,
  988. CTraceService::TraceString(strTip, TraceLevel_Normal);
  989. }
  990. int nCode = 0;
  991. if (m_root["Code"].isString())
  992. {
  993. nCode = (INT)atoi(m_root["Code"].asString().c_str());
  994. }
  995. else if (m_root["Code"].isInt()){
  996. nCode = (INT)m_root["Code"].asInt();
  997. }
  998. int AgentID = m_root["Body"]["AgentId"].asInt();//代理id
  999. if (iRet != SUCCESS)
  1000. {
  1001. CString csTest;
  1002. csTest.Format(_T("获取代理绑定信息失败。请求耗时=%d。出错代码=%d。请求【%s】"), dStart, iRet, csGet);
  1003. CShowTime aa(csTest, true, 99999, 99999);
  1004. //失败写日志
  1005. return bb;
  1006. }
  1007. //发送结果
  1008. if (pCAttemperEngineSink && 0 != AgentID){
  1009. CMD_GR_GetDaiLiSaoMaResult saomSul;
  1010. ZeroMemory(&saomSul, sizeof(CMD_GR_GetDaiLiSaoMaResult));
  1011. saomSul.dwBingID = AgentID;
  1012. saomSul.dwUserID = dwUserID;
  1013. pCAttemperEngineSink->OnSetAddBingIDAndCurrency(&saomSul, sizeof(CMD_GR_GetDaiLiSaoMaResult), dwSocketID);
  1014. if (bb.Find(_T("\"Code\":\"0\"")) != -1)
  1015. {
  1016. //成功 更新
  1017. //获取用户
  1018. WORD wBindIndex = LOWORD(dwSocketID);
  1019. IServerUserItem * pIServerUserItem = CHttpClient::pCAttemperEngineSink->GetBindUserItem(wBindIndex);
  1020. if (pIServerUserItem == NULL) return bb;
  1021. if (pIServerUserItem->GetUserInfo())
  1022. {
  1023. pIServerUserItem->GetUserInfo()->dDaiLi = AgentID;
  1024. }
  1025. //查询更新数据库
  1026. pCAttemperEngineSink->OnTCPNetworkSubUseGetDaiLiInfo(NULL, 0, dwSocketID);
  1027. }
  1028. }
  1029. return bb;
  1030. }
  1031. //获取验证码
  1032. bool CHttpClient::OnGetIphoneNumber(CString csIphoneNum, DWORD dwUserID, DWORD dwSocketID)
  1033. {
  1034. CString csGet, Err;
  1035. CString HttpPath = _T("");
  1036. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
  1037. csGet.Format(_T("%s/Sms/AliyunSendSms"), HttpPath);
  1038. //csGet.Format(_T("http://192.168.0.223:8088/Sms/AliyunSendSms"));
  1039. std::string szUrl;
  1040. szUrl = CW2AEX<1024>(csGet).m_psz;
  1041. std::string csRet;
  1042. CString csPost;
  1043. std::string szPost;
  1044. char TimeScore[15] = { 0 };
  1045. time_t t;
  1046. tm* local; //本地时间
  1047. t = time(NULL);
  1048. local = localtime(&t); //转为本地时间
  1049. strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
  1050. TimeScore[14] = '\0';
  1051. std::string strTime = TimeScore;
  1052. CString csTime(strTime.c_str());
  1053. CString Key = _T("");
  1054. CString GameId = _T("305");
  1055. CString csMd5;
  1056. csMd5.Format(_T("305%s%sf*4$oEmmHA@fuHVD"), csIphoneNum, csTime);
  1057. TCHAR strMd5[LEN_MD5];
  1058. CWHEncrypt md5;
  1059. md5.MD5Encrypt(csMd5, strMd5);
  1060. csPost.Format(_T("GameId=305&Mobile=%s&Time=%s&Sign=%s"), csIphoneNum, csTime, strMd5);
  1061. szPost = CW2AEX<1024>(csPost).m_psz;
  1062. CHttpClient aa;
  1063. int iRet = aa.Post(szUrl, szPost, csRet); //post请求
  1064. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
  1065. {
  1066. CString strTip;
  1067. strTip.Format(L"验证码请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
  1068. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1069. }
  1070. //解析返回的数据
  1071. Json::Reader m_reader;
  1072. Json::Value m_root;
  1073. if (!m_reader.parse(csRet, m_root))
  1074. return true;
  1075. int nCode = (INT)m_root["Code"].asInt();
  1076. std:string strMsg = m_root["Msg"].asString();
  1077. CString strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
  1078. if (nCode != 0)
  1079. {
  1080. CMD_GR_RequestFailure RequestFailure;
  1081. ZeroMemory(&RequestFailure, sizeof(RequestFailure));
  1082. //设置变量
  1083. RequestFailure.lErrorCode = nCode;
  1084. lstrcpyn(RequestFailure.szDescribeString, strError, CountArray(RequestFailure.szDescribeString));
  1085. //发送数据
  1086. WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
  1087. WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
  1088. //获取用户
  1089. WORD wBindIndex = LOWORD(dwSocketID);
  1090. IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
  1091. if (pIServerUserItem == NULL) return false;
  1092. UserInfo::PB_CS_S_RequestFailure Failure;
  1093. Failure.set_lerrorcode(RequestFailure.lErrorCode);
  1094. std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
  1095. Failure.set_szdescribestring(szDescribeString);
  1096. //发送数据
  1097. std::string pbdata = Failure.SerializePartialAsString();
  1098. return pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
  1099. }
  1100. return true;
  1101. }
  1102. //校验手机验证码
  1103. CString CHttpClient::OnVerfIphoneNumberCode(CString csIphoneNum, /*DWORD dVerfCode,*/CString csVerfCode, DWORD dwSocketID)
  1104. {
  1105. CString csGet, Err;
  1106. CString HttpPath = _T("");
  1107. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
  1108. csGet.Format(_T("%s/Sms/AliyunValidateCode"), HttpPath);
  1109. std::string szUrl;
  1110. szUrl = CW2AEX<1024>(csGet).m_psz;
  1111. std::string csRet;
  1112. CString csPost;
  1113. std::string szPost;
  1114. char TimeScore[15] = { 0 };
  1115. time_t t;
  1116. tm* local; //本地时间
  1117. t = time(NULL);
  1118. local = localtime(&t); //转为本地时间
  1119. strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
  1120. TimeScore[14] = '\0';
  1121. std::string strTime = TimeScore;//TimeScore;
  1122. CString csTime(strTime.c_str());
  1123. //CString CsVerfCode;
  1124. //CsVerfCode.Format(_T("%d"), dVerfCode);
  1125. CString GameId = _T("305");
  1126. CString csMd5;
  1127. csMd5.Format(_T("305%s%s%sf*4$oEmmHA@fuHVD"), csIphoneNum, csVerfCode, csTime);
  1128. TCHAR strMd5[LEN_MD5];
  1129. CWHEncrypt md5;
  1130. md5.MD5Encrypt(csMd5, strMd5); //生成加密串
  1131. csPost.Format(_T("GameId=305&Mobile=%s&Code=%s&Time=%s&Sign=%s"), csIphoneNum, csVerfCode, csTime, strMd5); //组装post入参
  1132. szPost = CW2AEX<1024>(csPost).m_psz;
  1133. CHttpClient aa;
  1134. int iRet = aa.Post(szUrl, szPost, csRet); //post请求
  1135. //CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  1136. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
  1137. {
  1138. CString strTip;
  1139. strTip.Format(L"校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
  1140. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1141. }
  1142. //解析返回的数据
  1143. Json::Reader m_reader;
  1144. Json::Value m_root;
  1145. if (!m_reader.parse(csRet, m_root))
  1146. return L"";
  1147. int nCode = (INT)m_root["Code"].asInt();
  1148. std:string strMsg = m_root["Msg"].asString();
  1149. CString strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
  1150. if (nCode != 0)
  1151. {
  1152. CMD_GR_RequestFailure RequestFailure;
  1153. ZeroMemory(&RequestFailure, sizeof(RequestFailure));
  1154. //设置变量
  1155. RequestFailure.lErrorCode = nCode;
  1156. lstrcpyn(RequestFailure.szDescribeString, strError, CountArray(RequestFailure.szDescribeString));
  1157. //发送数据
  1158. WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
  1159. WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
  1160. //获取用户
  1161. WORD wBindIndex = LOWORD(dwSocketID);
  1162. IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
  1163. if (pIServerUserItem == NULL) return strError;
  1164. UserInfo::PB_CS_S_RequestFailure Failure;
  1165. Failure.set_lerrorcode(RequestFailure.lErrorCode);
  1166. std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
  1167. Failure.set_szdescribestring(szDescribeString);
  1168. //发送数据
  1169. std::string pbdata = Failure.SerializePartialAsString();
  1170. pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
  1171. return strError;
  1172. }
  1173. //发送结果
  1174. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserCheckVerifCodeCallBack(csIphoneNum, csVerfCode, dwSocketID);
  1175. return strError;
  1176. }
  1177. //短信通知手机本节点运行详情
  1178. CString CHttpClient::OnExeInfo(CString csIphoneNum,CString csInfo, DWORD dwSocketID)
  1179. {
  1180. CString csGet, Err;
  1181. CString HttpPath = _T("");
  1182. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
  1183. csGet.Format(_T("%s/Sms/SendNoticeSms"), HttpPath);
  1184. if (HttpPath == L"")
  1185. {
  1186. csGet.Format(_T("http://192.168.0.223:8088/Sms//SendNoticeSms"));
  1187. }
  1188. std::string szUrl;
  1189. szUrl = CW2AEX<1024>(csGet).m_psz;
  1190. std::string csRet;
  1191. CString csPost;
  1192. std::string szPost;
  1193. char TimeScore[15] = { 0 };
  1194. time_t t;
  1195. tm* local; //本地时间
  1196. t = time(NULL);
  1197. local = localtime(&t); //转为本地时间
  1198. strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
  1199. TimeScore[14] = '\0';
  1200. std::string strTime = TimeScore;//TimeScore;
  1201. CString csTime(strTime.c_str());
  1202. /*
  1203. *csIphoneNum = L"13246711966";
  1204. csInfo = L"香蕉";
  1205. 测试版 数据
  1206. */
  1207. CString csMd5;
  1208. csMd5.Format(_T("%d%s%sf*4$oEmmHA@fuHVD"), KIND_ID, csIphoneNum, csTime);
  1209. TCHAR strMd5[LEN_MD5];
  1210. CWHEncrypt md5;
  1211. md5.MD5Encrypt(csMd5, strMd5); //生成加密串
  1212. csPost.Format(_T("GameId=%d&Mobile=%s&product=%s&Time=%s&Sign=%s"), KIND_ID, csIphoneNum, csInfo, csTime, strMd5); //组装post入参
  1213. szPost = CW2AEX<1024>(csPost).m_psz;
  1214. CHttpClient aa;
  1215. aa.Post(szUrl, szPost, csRet); //post请求
  1216. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  1217. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(KIND_ID))
  1218. {
  1219. CString strTip;
  1220. strTip.Format(L"【短信通知手机本节点运行详情】校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
  1221. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1222. }
  1223. return bb;
  1224. }
  1225. //抽奖记录入库
  1226. CString CHttpClient::OnLotteryResult(DWORD dwUserID, WORD wLotteryID, WORD wLotteryType, CString csIphoneNum, DWORD dwRecordID, DWORD dwSocketID)
  1227. {
  1228. CString csGet, Err;
  1229. CString HttpPath = _T("");
  1230. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath3;
  1231. //HttpPath = _T("http://192.168.0.204:8080/");
  1232. if (HttpPath == _T(""))
  1233. {
  1234. HttpPath = _T("http://www.jiangn.net/");
  1235. }
  1236. csGet.Format(_T("%s/api/GameZJ/GetGameZhongJiang"), HttpPath);
  1237. std::string csRet;
  1238. CString csPost;
  1239. std::string szPost;
  1240. //wLotteryID = 9;
  1241. //csIphoneNum.Format(_T("%s"), _T("17755351974"));
  1242. //////////////////////////
  1243. CString csMd5;
  1244. csMd5.Format(_T("%d|%d|%s|%d|!@12$dai"), dwUserID, wLotteryID, csIphoneNum, pCAttemperEngineSink->m_pGameServiceOption->wGameID);
  1245. TCHAR strMd5[LEN_MD5];
  1246. CWHEncrypt md5;
  1247. md5.MD5Encrypt(csMd5, strMd5); //生成加密串
  1248. ////////////////////////////
  1249. csGet.Format(_T("%s?UserId=%d&Id=%d&PhoneNumber=%s&SeverId=%d&Sign=%s"), csGet, dwUserID, wLotteryID, csIphoneNum, pCAttemperEngineSink->m_pGameServiceOption->wGameID, strMd5); //组装post入参 300
  1250. std::string strcsGet(CW2A(csGet.GetString()));
  1251. csPost.Format(_T("RlId=%d"), dwRecordID); //组装post入参
  1252. szPost = CW2AEX<1024>(csPost).m_psz;
  1253. CHttpClient aa;
  1254. int iRet = aa.Post(strcsGet, szPost, csRet); //post请求
  1255. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  1256. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
  1257. {
  1258. CString strTip;
  1259. strTip.Format(L"校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
  1260. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1261. }
  1262. //解析返回的数据
  1263. Json::Reader m_reader;
  1264. Json::Value m_root;
  1265. std::string strbb(CW2A(bb.GetString()));
  1266. if (!m_reader.parse(strbb, m_root))
  1267. return L"";
  1268. int nCode = (INT)m_root["State"].asInt();
  1269. std:string strMsg = m_root["ErrorMsg"].asString();
  1270. CString strError(strMsg.c_str());//CChineseCode::Utf8ToUnicode(strMsg.c_str());
  1271. if (nCode == 0)
  1272. {
  1273. //失败写日志
  1274. CString csTest;
  1275. csTest.Format(_T("抽奖记录入库。出错代码=%d 请求【%s】"), iRet, strError);
  1276. CShowTime aa1(csTest, true, 99999, 99999);
  1277. return L"";
  1278. }
  1279. //成功更新发放标志
  1280. if (pCAttemperEngineSink && nCode == 1 && wLotteryType != 4) pCAttemperEngineSink->OnTCPNetworkSubUserLotteryResultCallBack(dwRecordID, dwSocketID);
  1281. return L"";
  1282. }
  1283. CString CHttpClient::OnLotteryResultEx(DWORD dwUserID, CString csAddressee, CString csAddress, CString csIphoneNum, DWORD dwRecordID, DWORD dwSocketID)
  1284. {
  1285. CString csGet, Err;
  1286. CString HttpPath = _T("");
  1287. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath3;
  1288. //HttpPath = _T("http://192.168.0.204:8080/");
  1289. if (HttpPath == _T(""))
  1290. {
  1291. HttpPath = _T("http://www.jiangn.net/");
  1292. }
  1293. csGet.Format(_T("%s/api/GameZJ/UpdateZhongJiangRecord"), HttpPath);
  1294. //std::string szUrl;
  1295. //szUrl = CW2AEX<1024>(csGet).m_psz;
  1296. std::string csRet;
  1297. CString csPost;
  1298. std::string szPost;
  1299. CString csMd5;
  1300. csMd5.Format(_T("%d%d%d%s!@12$dai"), pCAttemperEngineSink->m_pGameServiceOption->wGameID, dwUserID, dwRecordID, csIphoneNum);
  1301. TCHAR strMd5[LEN_MD5];
  1302. CWHEncrypt md5;
  1303. md5.MD5Encrypt(csMd5, strMd5); //生成加密串
  1304. ////////////////////////////
  1305. csGet.Format(_T("%s?SeverId=%d&UserId=%d&RlId=%d&PhoneNumber=%s&Address=%s&Consignee=%s&Sign=%s"), csGet, pCAttemperEngineSink->m_pGameServiceOption->wGameID, dwUserID, dwRecordID, csIphoneNum, UrlEncode(csAddress.TrimRight()), UrlEncode(csAddressee.TrimRight()), strMd5); //组装post入参 300
  1306. std::string strcsGet = CW2AEX<1024>(csGet).m_psz;//(CW2A(csGet.GetString()));
  1307. szPost = CW2AEX<1024>(csPost).m_psz;
  1308. CHttpClient aa;
  1309. int iRet = aa.Post(strcsGet, szPost, csRet); //post请求
  1310. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  1311. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
  1312. {
  1313. CString strTip;
  1314. strTip.Format(L"校验请求:%s,Post:%s,iRet=%d,,csReslut=%s", csGet, csPost,iRet,bb);//新用户ID:%d,dwUserID,
  1315. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1316. }
  1317. //解析返回的数据
  1318. Json::Reader m_reader;
  1319. Json::Value m_root;
  1320. std::string strbb(CW2A(bb.GetString()));
  1321. if (!m_reader.parse(strbb, m_root))
  1322. return L"";
  1323. int nCode = (INT)m_root["State"].asInt();
  1324. std:string strMsg = m_root["ErrorMsg"].asString();
  1325. CString strError(strMsg.c_str());
  1326. if (nCode == 0)
  1327. {
  1328. //失败写日志
  1329. CString csTest;
  1330. csTest.Format(_T("抽奖记录入库。出错代码=%d 请求【%s】"), iRet, strError);
  1331. CShowTime aa1(csTest, true, 99999, 99999);
  1332. return L"";
  1333. }
  1334. //成功更新发放标志
  1335. if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserLotteryResultCallBack(dwRecordID, dwSocketID);
  1336. return L"";
  1337. }
  1338. //分享闲聊,俱乐部,桌子号,玩家信息
  1339. CString CHttpClient::OnFenXiangXianLiao(TCHAR WanFTitle[33], DBR_GR_ClubRecordXianLiao FenXiangRecord)
  1340. {
  1341. CString HttpPath = _T("");
  1342. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  1343. CString csReqPost;
  1344. if (HttpPath == _T(""))
  1345. {
  1346. HttpPath = _T("http://cycz.legaogame.com/");
  1347. }
  1348. csReqPost.Format(_T("%sGroupRobot/ShareCard"), HttpPath);
  1349. std::string szUrl, szAns_Err;
  1350. szUrl = CW2AEX<1024>(csReqPost).m_psz;
  1351. char TimeScore[15] = { 0 };
  1352. time_t t;
  1353. tm* local; //本地时间
  1354. t = time(NULL);
  1355. local = localtime(&t); //转为本地时间
  1356. strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
  1357. TimeScore[14] = '\0';
  1358. std::string strTime = TimeScore;//TimeScore;
  1359. CString csTime(strTime.c_str());
  1360. CString csMd5;
  1361. csMd5.Format(_T("%d%sf*4$oEmmHA@fuHVD"), FenXiangRecord.dwClubID, csTime);
  1362. TCHAR strMd5[LEN_MD5];
  1363. CWHEncrypt md5;
  1364. md5.MD5Encrypt(csMd5, strMd5); //生成加密串
  1365. std::string strMd52 = CW2AEX<1024>(strMd5).m_psz;
  1366. CJsonBusiness cjb;
  1367. CString csPost;
  1368. TCHAR TempWanFTitle[68];
  1369. char TimeScore2[17] = { 0 };
  1370. time_t t2;
  1371. tm* local2; //本地时间
  1372. t2 = time(NULL);
  1373. local2 = localtime(&t2); //转为本地时间
  1374. strftime(TimeScore2, 64, "%Y/%m/%d %H\:%M", local2);
  1375. TimeScore2[16] = '\0';
  1376. std::string strTime2 = TimeScore2;//TimeScore;
  1377. CString csTime2(strTime2.c_str());
  1378. _sntprintf(TempWanFTitle, CountArray(TempWanFTitle), TEXT("%s %s"), WanFTitle, csTime2);
  1379. std::string szPost = cjb.GetInfoJson(305, TempWanFTitle, strTime, strMd52, FenXiangRecord);
  1380. CHttpClient aa;
  1381. int iRet = aa.Post(szUrl, szPost, szAns_Err); //post请求
  1382. CString CstrPost = CChineseCode::Utf8ToUnicode(szPost.c_str());
  1383. CString strError = CChineseCode::Utf8ToUnicode(szAns_Err.c_str());
  1384. if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
  1385. {
  1386. CString strTip;
  1387. strTip.Format(L"校验请求:%s,Post:%s", strError, CstrPost);//新用户ID:%d,dwUserID,
  1388. CTraceService::TraceString(strTip, TraceLevel_Normal);
  1389. }
  1390. //解析返回的数据
  1391. Json::Reader m_reader;
  1392. Json::Value m_root;
  1393. std::string strbb(CW2A(strError.GetString()));
  1394. if (!m_reader.parse(strbb, m_root))
  1395. return L"";
  1396. int nCode = (INT)m_root["errorCode"].asInt();
  1397. std:string strMsg = m_root["errorMessage"].asString();
  1398. strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
  1399. if (nCode != 0)
  1400. {
  1401. CString strTip;
  1402. strTip.Format(L"分享失败%s,%s", strError, CstrPost);
  1403. CTraceService::TraceString(strTip, TraceLevel_Warning);
  1404. }
  1405. //发送结果
  1406. return L"";
  1407. }