诸暨麻将添加redis
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

669 Zeilen
18 KiB

  1. #include "stdafx.h"
  2. #pragma once
  3. ////////////////////////////////// HttpClient.cpp
  4. #include "HttpThread.h"
  5. #include "AttemperEngineSink.h"
  6. #include "ShowTime.h"
  7. #include "LogonServer.h"
  8. #include "LogonServerDlg.h"
  9. #include <string>
  10. #include <atlconv.h>
  11. #include "ServiceUnits.h"
  12. #include "ChineseCode.h"
  13. #include "../Json/json.h"
  14. #include "curl/curl.h"
  15. #include "../../../Games/Normal/松滋晃晃血流/消息定义/CMD_Sparrow.h"
  16. #define BUFFER_SIZE 1024
  17. #define NORMAL_CONNECT INTERNET_FLAG_KEEP_CONNECTION
  18. #define SECURE_CONNECT NORMAL_CONNECT | INTERNET_FLAG_SECURE
  19. #define NORMAL_REQUEST INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE
  20. #define SECURE_REQUEST NORMAL_REQUEST | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID
  21. HANDLE CHttpClient::m_hThread = nullptr;
  22. unsigned CHttpClient::m_uiThreadID = 0;
  23. HANDLE CHttpClient::g_Event; // 触发事件句柄
  24. CAttemperEngineSink* CHttpClient::pCAttemperEngineSink = NULL; //调度钩子
  25. bool CHttpClient::m_bRun = true;// 关闭
  26. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST> CHttpClient::GetData;
  27. CCriticalSection CHttpClient::m_CriticalSection;
  28. extern CLogonServerApp theApp;
  29. void* CHttpClient::curl = NULL;
  30. CHttpClient::CHttpClient(LPCTSTR strAgent) :
  31. m_bDebug(false)
  32. {
  33. m_pSession = new CInternetSession(strAgent);
  34. INTERNET_PROXY_INFO ipi;
  35. ZeroMemory(&ipi, sizeof(ipi));
  36. ipi.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
  37. ipi.lpszProxyBypass = NULL;
  38. m_pSession->SetOption(INTERNET_OPEN_TYPE_DIRECT, &ipi, sizeof(ipi), 0);
  39. m_pConnection = NULL;
  40. m_pFile = NULL;
  41. }
  42. CHttpClient::~CHttpClient(void)
  43. {
  44. Clear();
  45. if (NULL != m_pSession)
  46. {
  47. m_pSession->Close();
  48. delete m_pSession;
  49. m_pSession = NULL;
  50. }
  51. }
  52. void CHttpClient::Clear()
  53. {
  54. if (NULL != m_pFile)
  55. {
  56. m_pFile->Close();
  57. delete m_pFile;
  58. m_pFile = NULL;
  59. }
  60. if (NULL != m_pConnection)
  61. {
  62. m_pConnection->Close();
  63. delete m_pConnection;
  64. m_pConnection = NULL;
  65. }
  66. }
  67. int CHttpClient::ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  68. {
  69. CString strServer;
  70. CString strObject;
  71. DWORD dwServiceType;
  72. INTERNET_PORT nPort;
  73. strResponse = "";
  74. Err = "";
  75. AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);
  76. if (AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
  77. {
  78. return FAILURE;
  79. }
  80. try
  81. {
  82. m_pConnection = m_pSession->GetHttpConnection(strServer,
  83. dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT,
  84. nPort);
  85. m_pFile = m_pConnection->OpenRequest(strMethod, strObject,
  86. NULL, 1, NULL, NULL,
  87. (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
  88. //DWORD dwFlags;
  89. //m_pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
  90. //dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
  91. ////set web server option
  92. //m_pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
  93. m_pFile->AddRequestHeaders(_T("Accept: *,*/*"));
  94. m_pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
  95. m_pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
  96. m_pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
  97. m_pFile->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData));
  98. char szChars[BUFFER_SIZE + 1] = { 0 };
  99. CStringA strRawResponse = "";
  100. UINT nReaded = 0;
  101. while ((nReaded = m_pFile->Read((void*)szChars, BUFFER_SIZE)) > 0)
  102. {
  103. szChars[nReaded] = '\0';
  104. strRawResponse += szChars;
  105. memset(szChars, 0, BUFFER_SIZE + 1);
  106. }
  107. int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, NULL, 0);
  108. WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
  109. memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
  110. MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, pUnicode, unicodeLen);
  111. CString cs(pUnicode);
  112. delete[]pUnicode;
  113. pUnicode = NULL;
  114. strResponse = cs;
  115. Clear();
  116. }
  117. catch (CInternetException* e)
  118. {
  119. Clear();
  120. DWORD dwErrorCode = e->m_dwError;
  121. e->Delete();
  122. DWORD dwError = GetLastError();
  123. //PRINT_LOG("dwError = %d", dwError, 0);
  124. if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
  125. {
  126. Err.Format(_T("请求超时, LastError=%d"), dwErrorCode);
  127. return OUTTIME;
  128. }
  129. else
  130. {
  131. Err.Format(_T("请求失败, LastError=%d"), dwErrorCode);
  132. return FAILURE;
  133. }
  134. }
  135. return SUCCESS;
  136. }
  137. int CHttpClient::HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  138. {
  139. return ExecuteRequest(_T("GET"), strUrl, strPostData, strResponse, Err);
  140. }
  141. int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
  142. {
  143. return ExecuteRequest(_T("POST"), strUrl, strPostData, strResponse, Err);
  144. }
  145. //添加
  146. void CHttpClient::AddLog(DWORD dwSocketID, GETDUILIEBASE_EX LogText)
  147. {
  148. CWHDataLocker lock(m_CriticalSection);
  149. if (!m_bRun) return;
  150. if (GetData.find(dwSocketID) == GetData.end())
  151. {
  152. GETDUILIEBASE_EX_LIST mData;
  153. ZeroMemory(&mData, sizeof(mData));
  154. mData.dDataList[0] = LogText;
  155. std::pair<DWORD, GETDUILIEBASE_EX_LIST> aa(dwSocketID, mData);
  156. GetData.insert(aa);
  157. if (pCAttemperEngineSink)
  158. {
  159. if (LogText.CommendID == 1)
  160. {
  161. CString csTest;
  162. csTest.Format(_T("手机号码(%s)添加了一条获取验证码任务"), LogText.szIphoneNum);
  163. CShowTime aa(csTest, true, 99999, 99999);
  164. }
  165. }
  166. if (g_Event) SetEvent(g_Event);
  167. }
  168. else
  169. {
  170. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST>::iterator it = GetData.find(dwSocketID);
  171. GETDUILIEBASE_EX_LIST gTemp = it->second;
  172. //查询有没有这个命令
  173. for (int i = 0; i < 10; i++)
  174. {
  175. if (gTemp.dDataList[i].CommendID == 0) continue;
  176. //重复命令,只能发送一次
  177. if (gTemp.dDataList[i].CommendID == LogText.CommendID) return;
  178. }
  179. for (int i = 0; i < 10; i++)
  180. {
  181. if (gTemp.dDataList[i].CommendID == 0)
  182. {
  183. gTemp.dDataList[i] = LogText;
  184. GetData[dwSocketID] = gTemp;
  185. break;
  186. }
  187. }
  188. if (LogText.CommendID == 1)
  189. {
  190. CString csTest;
  191. csTest.Format(_T("玩家(%d)添加了大于一条任务->%s"), LogText.CommendID, _T("请求订单"));
  192. CShowTime aa(csTest, true, 99999, 99999);
  193. }
  194. if (g_Event) SetEvent(g_Event);
  195. }
  196. }
  197. //获取
  198. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST> CHttpClient::GetLog()
  199. {
  200. CWHDataLocker lock(m_CriticalSection);//
  201. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST> Ret = GetData;
  202. GetData.clear();
  203. return Ret;
  204. }
  205. //获取数量
  206. DWORD CHttpClient::GetCount()
  207. {
  208. CWHDataLocker lock(m_CriticalSection);
  209. return GetData.size();
  210. }
  211. //启动
  212. bool CHttpClient::start(CAttemperEngineSink* pSink)
  213. {
  214. if (m_hThread != NULL) return false;
  215. CString csEvent;
  216. //随机种子
  217. srand(GetTickCount());
  218. int iRand = rand()%9999;
  219. csEvent.Format(_T("MJ_HTTPGETDATA%d%d"), pSink->m_wServerID, iRand);
  220. if (!g_Event) g_Event = CreateEvent(NULL, false, false, csEvent); //人工重置,有信号
  221. m_bRun = true;
  222. pCAttemperEngineSink = pSink;
  223. m_hThread = (HANDLE)_beginthreadex(NULL, 0, &Runs, NULL, 0, &m_uiThreadID);
  224. return true;
  225. };
  226. //结束
  227. bool CHttpClient::end()
  228. {
  229. if (!m_hThread) return false;
  230. pCAttemperEngineSink = NULL;
  231. m_bRun = false;
  232. SetEvent(g_Event);
  233. return true;
  234. }
  235. // 进行Url编码 UTF-8
  236. CString CHttpClient::UrlEncode(CString strUnicode)
  237. {
  238. LPCWSTR unicode = T2CW(strUnicode);
  239. int len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, 0, 0, 0, 0);
  240. if (!len)
  241. return strUnicode;
  242. char *utf8 = new char[len + 1];
  243. ZeroMemory(utf8, len + 1);
  244. char *utf8temp = utf8;
  245. WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len + 1, 0, 0);
  246. utf8[len] = NULL;
  247. CString strTemp, strEncodeData;
  248. while (*utf8 != 0)
  249. {
  250. strTemp.Format(_T("%%%2x"), (BYTE)*utf8);
  251. strEncodeData += strTemp;
  252. ++utf8;
  253. }
  254. delete[]utf8temp;
  255. return CString(strEncodeData);
  256. }
  257. //运行
  258. unsigned __stdcall CHttpClient::Runs(void* pParam)
  259. {
  260. if (g_Event == NULL)
  261. {
  262. _endthreadex(0);
  263. m_hThread = NULL;
  264. m_bRun = false;
  265. return 0;
  266. }
  267. CString strResponse; CString Err;
  268. if (curl == NULL)
  269. {
  270. curl = curl_easy_init();
  271. }
  272. // 线程开始
  273. while (m_bRun && WAIT_OBJECT_0 == WaitForSingleObject(g_Event, INFINITE)) //指定的对象为有信号状态,这里确实为有信号状态,直接往下执行
  274. {
  275. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST> Ret = GetLog();
  276. std::unordered_map<DWORD, GETDUILIEBASE_EX_LIST>::iterator it = Ret.begin();
  277. //if (pCAttemperEngineSink )
  278. //{
  279. // CString csTest;
  280. // csTest.Format(_T("支付线程获得获得信号,信号获得任务数=%d。"), Ret.size());
  281. // TCHAR szBuffer[600];
  282. // ZeroMemory(szBuffer, sizeof(TCHAR) * 600);
  283. // StringCchCopy(szBuffer, 600, csTest);
  284. // CShowTime aa(szBuffer, true, 99999, 99999);
  285. //}
  286. CString csRet = _T("");
  287. for (; it != Ret.end();it++)
  288. {
  289. DWORD dStart = GetTickCount();
  290. //构建请求
  291. CString csGet;
  292. GETDUILIEBASE_EX_LIST getData = it->second;
  293. for (int i = 0; i < 10; i++)
  294. {
  295. switch (getData.dDataList[i].CommendID)
  296. {
  297. case 1://获取手机验证码
  298. {
  299. OnGetIphoneNumber(CString(getData.dDataList[i].szIphoneNum), 0, getData.dDataList[i].dwSocketID);
  300. break;
  301. }
  302. default:
  303. break;
  304. }
  305. }
  306. if (pCAttemperEngineSink)
  307. {
  308. dStart = GetTickCount() - dStart;
  309. CString csTest;
  310. getData.dDataList[0].dwSocketID = 0x00;
  311. csTest.Format(_T("处理完成了(%d)的请求,耗时=%d。\r\n处理结果=%s"), getData.dDataList[0].dwSocketID, dStart, csRet);
  312. CShowTime aa(csTest, true, 99999, 99999);
  313. }
  314. }
  315. Ret.clear();
  316. //if (pCAttemperEngineSink )
  317. //{
  318. // CString csTest;
  319. // csTest.Format(_T("处理完成,进入休眠。"));
  320. // CShowTime aa(csTest, true, 99999, 99999);
  321. //}
  322. }
  323. //if (pCAttemperEngineSink )
  324. //{
  325. // CString csTest;
  326. // csTest.Format(_T("支付线程退出。"));
  327. // CShowTime aa(csTest, true, 99999, 99999);
  328. //}
  329. m_bRun = false;
  330. if (g_Event)
  331. {
  332. CloseHandle(g_Event);
  333. g_Event = NULL;
  334. }
  335. GetLog();
  336. if (curl != NULL)
  337. {
  338. curl_easy_cleanup(curl);
  339. curl = NULL;
  340. }
  341. _endthreadex(0);
  342. m_hThread = NULL;
  343. return 0;
  344. }
  345. static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
  346. {
  347. if (itype == CURLINFO_TEXT)
  348. {
  349. //printf("[TEXT]%s\n", pData);
  350. }
  351. else if (itype == CURLINFO_HEADER_IN)
  352. {
  353. printf("[HEADER_IN]%s\n", pData);
  354. }
  355. else if (itype == CURLINFO_HEADER_OUT)
  356. {
  357. printf("[HEADER_OUT]%s\n", pData);
  358. }
  359. else if (itype == CURLINFO_DATA_IN)
  360. {
  361. printf("[DATA_IN]%s\n", pData);
  362. }
  363. else if (itype == CURLINFO_DATA_OUT)
  364. {
  365. printf("[DATA_OUT]%s\n", pData);
  366. }
  367. return 0;
  368. }
  369. static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
  370. {
  371. std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
  372. if (NULL == str || NULL == buffer)
  373. {
  374. return -1;
  375. }
  376. char* pData = (char*)buffer;
  377. str->append(pData, size * nmemb);
  378. return nmemb;
  379. }
  380. int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
  381. {
  382. CURLcode res;
  383. CURL* curl = curl_easy_init();
  384. if (NULL == curl)
  385. {
  386. return CURLE_FAILED_INIT;
  387. }
  388. if (m_bDebug)
  389. {
  390. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  391. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  392. }
  393. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  394. curl_easy_setopt(curl, CURLOPT_POST, 1);
  395. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
  396. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  397. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  398. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  399. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  400. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  401. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  402. res = curl_easy_perform(curl);
  403. curl_easy_cleanup(curl);
  404. return res;
  405. }
  406. int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
  407. {
  408. CURLcode res;
  409. if (NULL == curl)
  410. {
  411. return CURLE_FAILED_INIT;
  412. }
  413. if (m_bDebug)
  414. {
  415. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  416. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  417. }
  418. struct curl_slist *headers = NULL;
  419. headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded;charset=UTF-8");
  420. headers = curl_slist_append(headers, "Accept:*/*");
  421. headers = curl_slist_append(headers, "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; CIBA)");
  422. headers = curl_slist_append(headers, "Connection:Keep-Alive");
  423. curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  424. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  425. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  426. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  427. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  428. /**
  429. * 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
  430. * 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
  431. */
  432. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  433. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
  434. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
  435. res = curl_easy_perform(curl);
  436. curl_slist_free_all(headers);//记得要释放
  437. return res;
  438. }
  439. int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
  440. {
  441. CURLcode res;
  442. CURL* curl = curl_easy_init();
  443. if (NULL == curl)
  444. {
  445. return CURLE_FAILED_INIT;
  446. }
  447. if (m_bDebug)
  448. {
  449. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  450. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  451. }
  452. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  453. curl_easy_setopt(curl, CURLOPT_POST, 1);
  454. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
  455. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  456. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  457. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  458. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  459. if (NULL == pCaPath)
  460. {
  461. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
  462. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
  463. }
  464. else
  465. {
  466. //缺省情况就是PEM,所以无需设置,另外支持DER
  467. //curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
  468. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
  469. curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
  470. }
  471. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  472. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  473. res = curl_easy_perform(curl);
  474. curl_easy_cleanup(curl);
  475. return res;
  476. }
  477. int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
  478. {
  479. CURLcode res;
  480. CURL* curl = curl_easy_init();
  481. if (NULL == curl)
  482. {
  483. return CURLE_FAILED_INIT;
  484. }
  485. if (m_bDebug)
  486. {
  487. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  488. curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
  489. }
  490. curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
  491. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  492. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
  493. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
  494. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  495. if (NULL == pCaPath)
  496. {
  497. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
  498. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
  499. }
  500. else
  501. {
  502. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
  503. curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
  504. }
  505. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  506. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  507. res = curl_easy_perform(curl);
  508. curl_easy_cleanup(curl);
  509. return res;
  510. }
  511. void CHttpClient::SetDebug(bool bDebug)
  512. {
  513. m_bDebug = bDebug;
  514. }
  515. ///////////////////////////////////////////////////////////////////////////////////////////////
  516. //获取验证码
  517. bool CHttpClient::OnGetIphoneNumber(CString csIphoneNum, DWORD dwUserID, DWORD dwSocketID)
  518. {
  519. CString csGet, Err;
  520. CString HttpPath = _T("");
  521. if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
  522. HttpPath = _T("http://sms.yht521.com/");
  523. csGet.Format(_T("%s/Sms/AliyunSendSms"), HttpPath);
  524. //csGet.Format(_T("http://192.168.0.223:8088/Sms/AliyunSendSms"));
  525. std::string szUrl;
  526. szUrl = CW2AEX<1024>(csGet).m_psz;
  527. std::string csRet;
  528. CString csPost;
  529. std::string szPost;
  530. char TimeScore[15] = { 0 };
  531. time_t t;
  532. tm* local; //本地时间
  533. t = time(NULL);
  534. local = localtime(&t); //转为本地时间
  535. strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
  536. TimeScore[14] = '\0';
  537. std::string strTime = TimeScore;
  538. CString csTime(strTime.c_str());
  539. CString Key = _T("");
  540. CString csMd5;
  541. csMd5.Format(_T("%d%s%sf*4$oEmmHA@fuHVD"), 305, csIphoneNum, csTime);
  542. TCHAR strMd5[LEN_MD5];
  543. CWHEncrypt md5;
  544. md5.MD5Encrypt(csMd5, strMd5);
  545. csPost.Format(_T("GameId=%d&Mobile=%s&Time=%s&Sign=%s"),305, csIphoneNum, csTime, strMd5);
  546. szPost = CW2AEX<1024>(csPost).m_psz;
  547. CHttpClient aa;
  548. int iRet = aa.Post(szUrl, szPost, csRet); //post请求
  549. if (pCAttemperEngineSink)
  550. {
  551. CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
  552. CString strTip;
  553. strTip.Format(L"验证码请求:%s,Post:%s,收到结果:%d,%s", csGet, csPost, iRet, bb);//新用户ID:%d,dwUserID,
  554. CTraceService::TraceString(strTip, TraceLevel_Normal);
  555. }
  556. if (iRet != SUCCESS)
  557. {
  558. //处理已经创建的手机绑定 清除状态
  559. if (pCAttemperEngineSink)pCAttemperEngineSink->OnTCPNetworkMainHandleMBLogon(csIphoneNum, dwSocketID);
  560. }
  561. //解析返回的数据
  562. Json::Reader m_reader;
  563. Json::Value m_root;
  564. if (!m_reader.parse(csRet, m_root))
  565. return true;
  566. int nCode = (INT)m_root["Code"].asInt();
  567. std:string strMsg = m_root["Msg"].asString();
  568. CString strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
  569. CString strTip;
  570. strTip.Format(L"验证码请求1111:%d,Post:%s", nCode, strError);//新用户ID:%d,dwUserID,
  571. CTraceService::TraceString(strTip, TraceLevel_Normal);
  572. if (nCode != 0)
  573. {
  574. CString strTip;
  575. strTip.Format(L"获取验证码失败原因:%s", strError);
  576. CTraceService::TraceString(strTip, TraceLevel_Warning);
  577. //处理已经创建的手机绑定 清除状态
  578. if (pCAttemperEngineSink)pCAttemperEngineSink->OnTCPNetworkMainHandleMBLogon(csIphoneNum, dwSocketID);
  579. return true;
  580. }
  581. CString VerfCode = CChineseCode::Utf8ToUnicode((m_root["Body"].asString()).c_str());
  582. if (pCAttemperEngineSink)pCAttemperEngineSink->OnTCPNetworkMainMBLogonMiMa(csIphoneNum, VerfCode, dwSocketID);
  583. return true;
  584. }