|
-
- #pragma once
- ////////////////////////////////// HttpClient.cpp
- #include "StdAfx.h"
- #include "Shop.h"
- #include "AttemperEngineSink.h"
- #include "ShowTime.h"
- #include "GameServer.h"
- #include "GameServerDlg.h"
- #include "curl/curl.h"
- #include <string>
- #include <atlconv.h>
- #include "ServiceUnits.h"
- #include "ChineseCode.h"
- #include "../Json/json.h"
- #include "JsonBusiness.h"
- #include "../../MessageDef/Pb_UserInfo.pb.h"
- #include "../../../../消息定义/CMD_Sparrow.h"
- #define BUFFER_SIZE 1024
-
- #define NORMAL_CONNECT INTERNET_FLAG_KEEP_CONNECTION
- #define SECURE_CONNECT NORMAL_CONNECT | INTERNET_FLAG_SECURE
- #define NORMAL_REQUEST INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE
- #define SECURE_REQUEST NORMAL_REQUEST | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID
-
- HANDLE CHttpClient::m_hThread = NULL;
- unsigned CHttpClient::m_uiThreadID = 0;
- HANDLE CHttpClient::g_Event; // 触发事件句柄
-
- CAttemperEngineSink* CHttpClient::pCAttemperEngineSink = NULL; //调度钩子
- bool CHttpClient::m_bRun = true;// 关闭
- std::unordered_map<DWORD, GETDUILIELIST> CHttpClient::GetData;
- CCriticalSection CHttpClient::m_CriticalSection;
- extern CGameServerApp theApp;
-
- void* CHttpClient::curl = NULL;
-
-
- CHttpClient::CHttpClient(LPCTSTR strAgent) :
- m_bDebug(false)
- {
- m_pSession = new CInternetSession(strAgent);
-
- INTERNET_PROXY_INFO ipi;
-
- ZeroMemory(&ipi, sizeof(ipi));
- ipi.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
- ipi.lpszProxyBypass = NULL;
- m_pSession->SetOption(INTERNET_OPEN_TYPE_DIRECT, &ipi, sizeof(ipi), 0);
- m_pConnection = NULL;
- m_pFile = NULL;
- }
-
- CHttpClient::~CHttpClient(void)
- {
- Clear();
- if (NULL != m_pSession)
- {
- m_pSession->Close();
- delete m_pSession;
- m_pSession = NULL;
- }
- }
-
- void CHttpClient::Clear()
- {
- if (NULL != m_pFile)
- {
- m_pFile->Close();
- delete m_pFile;
- m_pFile = NULL;
- }
-
- if (NULL != m_pConnection)
- {
- m_pConnection->Close();
- delete m_pConnection;
- m_pConnection = NULL;
- }
- }
-
- int CHttpClient::ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
- {
- CString strServer;
- CString strObject;
- DWORD dwServiceType;
- INTERNET_PORT nPort;
- strResponse = "";
- Err = "";
- AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);
-
- if (AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
- {
- return FAILURE;
- }
-
- try
- {
- m_pConnection = m_pSession->GetHttpConnection(strServer,
- dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT,
- nPort);
- m_pFile = m_pConnection->OpenRequest(strMethod, strObject,
- NULL, 1, NULL, NULL,
- (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
-
- //DWORD dwFlags;
- //m_pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
- //dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
- ////set web server option
- //m_pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
-
- m_pFile->AddRequestHeaders(_T("Accept: *,*/*"));
- m_pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
- m_pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
- m_pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
-
- m_pFile->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData));
-
- char szChars[BUFFER_SIZE + 1] = { 0 };
- CStringA strRawResponse = "";
- UINT nReaded = 0;
- while ((nReaded = m_pFile->Read((void*)szChars, BUFFER_SIZE)) > 0)
- {
- szChars[nReaded] = '\0';
- strRawResponse += szChars;
- memset(szChars, 0, BUFFER_SIZE + 1);
- }
-
- int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, NULL, 0);
- WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
- memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
-
- MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, pUnicode, unicodeLen);
- CString cs(pUnicode);
- delete[]pUnicode;
- pUnicode = NULL;
-
- strResponse = cs;
-
- Clear();
- }
- catch (CInternetException* e)
- {
- Clear();
- DWORD dwErrorCode = e->m_dwError;
- e->Delete();
-
- DWORD dwError = GetLastError();
-
- //PRINT_LOG("dwError = %d", dwError, 0);
-
- if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
- {
- Err.Format(_T("请求超时, LastError=%d"), dwErrorCode, dwError);
- return OUTTIME;
- }
- else
- {
- Err.Format(_T("请求失败, LastError=%d"), dwErrorCode, dwError);
- return FAILURE;
- }
- }
- return SUCCESS;
- }
-
- int CHttpClient::HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
- {
- return ExecuteRequest(_T("GET"), strUrl, strPostData, strResponse, Err);
- }
-
- int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse, CString &Err)
- {
- return ExecuteRequest(_T("POST"), strUrl, strPostData, strResponse, Err);
- }
-
- //添加
- void CHttpClient::AddLog(DWORD dwSocketID, GETDUILIEBASE LogText)
- {
- CWHDataLocker lock(m_CriticalSection);
-
- if (!m_bRun) return;
-
- if (GetData.find(dwSocketID) == GetData.end())
- {
- GETDUILIELIST mData;
- ZeroMemory(&mData, sizeof(mData));
- mData.dDataList[0] = LogText;
- std::pair<DWORD, GETDUILIELIST> aa(dwSocketID, mData);
- GetData.insert(aa);
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
- {
- if (LogText.CommendID == 1)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("请求订单"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 3)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("绑定代理"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 2)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了一条任务->%s"), LogText.bb.szName, _T("获取订单列表"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 4)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("分享朋友圈"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 8)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("请求发送手机验证码"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 9)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("校验落实验证码"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 10)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("玩家自主解绑代理"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 11)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 12)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库EX"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- }
-
- if (g_Event) SetEvent(g_Event);
- }
- else
- {
- std::unordered_map<DWORD, GETDUILIELIST>::iterator it = GetData.find(dwSocketID);
- GETDUILIELIST gTemp = it->second;
-
- //查询有没有这个命令
- for (int i = 0; i < 10; i++)
- {
- if (gTemp.dDataList[i].CommendID == 0) continue;
-
- //重复命令,只能发送一次
- if (gTemp.dDataList[i].CommendID == LogText.CommendID) return;
- }
-
- for (int i = 0; i < 10; i++)
- {
- if (gTemp.dDataList[i].CommendID == 0)
- {
- gTemp.dDataList[i] = LogText;
- GetData[dwSocketID] = gTemp;
- break;
- }
- }
-
- if (LogText.CommendID == 1)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("请求订单"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 3)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("绑定代理"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 2)
- {
- CString csTest;
- csTest.Format(_T("玩家(%s)添加了大于一条任务->%s"), LogText.bb.szName, _T("获取订单列表"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 4)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了大于一条任务->%s"), LogText.dUserID, _T("分享朋友圈"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
-
- else if (LogText.CommendID == 8)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("获取手机验证码"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 9)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("校验手机验证码"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 10)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("玩家自主解绑代理"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 11)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- else if (LogText.CommendID == 12)
- {
- CString csTest;
- csTest.Format(_T("玩家(%d)添加了一条任务->%s"), LogText.dUserID, _T("抽奖记录入库EX"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- if (g_Event) SetEvent(g_Event);
- }
- }
-
- //获取
- std::unordered_map<DWORD, GETDUILIELIST> CHttpClient::GetLog()
- {
- CWHDataLocker lock(m_CriticalSection);//
- std::unordered_map<DWORD, GETDUILIELIST> Ret = GetData;
- GetData.clear();
- return Ret;
- }
-
- //获取数量
- DWORD CHttpClient::GetCount()
- {
- CWHDataLocker lock(m_CriticalSection);
- return GetData.size();
- }
-
- //启动
- bool CHttpClient::start(CAttemperEngineSink* pSink)
- {
- if (m_hThread != NULL) return false;
-
- CString csEvent;
-
-
- //随机种子
- srand(GetTickCount());
-
- int iRand = rand()%9999;
-
- csEvent.Format(_T("MJ_HTTPGETDATA%d%d"), pSink->m_pGameServiceOption->wServerID, iRand);
- if (!g_Event) g_Event = CreateEvent(NULL, false, false, csEvent); //人工重置,有信号
- m_bRun = true;
-
- pCAttemperEngineSink = pSink;
- m_hThread = (HANDLE)_beginthreadex(NULL, 0, &Runs, NULL, 0, &m_uiThreadID);
-
- return true;
- };
- //结束
- bool CHttpClient::end()
- {
- if (!m_hThread) return false;
-
- pCAttemperEngineSink = NULL;
- m_bRun = false;
- SetEvent(g_Event);
-
- return true;
- }
-
- // 进行Url编码 UTF-8
- CString CHttpClient::UrlEncode(CString strUnicode)
- {
- LPCWSTR unicode = T2CW(strUnicode);
- int len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, 0, 0, 0, 0);
- if (!len)
- return strUnicode;
- char *utf8 = new char[len + 1];
-
- ZeroMemory(utf8, len + 1);
- char *utf8temp = utf8;
- WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len + 1, 0, 0);
- utf8[len] = NULL;
- CString strTemp, strEncodeData;
- while (*utf8 != 0)
- {
- strTemp.Format(_T("%%%2x"), (BYTE)*utf8);
- strEncodeData += strTemp;
- ++utf8;
- }
-
- delete[]utf8temp;
-
- return CString(strEncodeData);
-
- }
-
- //运行
- unsigned __stdcall CHttpClient::Runs(void* pParam)
- {
- if (g_Event == NULL)
- {
- _endthreadex(0);
- m_hThread = NULL;
- m_bRun = false;
- return 0;
- }
-
- CString strResponse; CString Err;
-
- if (curl == NULL)
- {
- curl = curl_easy_init();
- }
-
- // 线程开始
- while (m_bRun && WAIT_OBJECT_0 == WaitForSingleObject(g_Event, INFINITE)) //指定的对象为有信号状态,这里确实为有信号状态,直接往下执行
- {
- std::unordered_map<DWORD, GETDUILIELIST> Ret = GetLog();
-
- std::unordered_map<DWORD, GETDUILIELIST>::iterator it = Ret.begin();
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
- {
- CString csTest;
- csTest.Format(_T("支付线程获得获得信号,信号获得任务数=%d。"), Ret.size());
-
- TCHAR szBuffer[600];
-
- ZeroMemory(szBuffer, sizeof(TCHAR) * 600);
- StringCchCopy(szBuffer, 600, csTest);
-
- CShowTime aa(szBuffer, true, 99999, 99999);
- }
-
- CString csRet = _T("");
- for (; it != Ret.end(); it++)
- {
- DWORD dStart = GetTickCount();
- //构建请求
- CString csGet;
- GETDUILIELIST getData = it->second;
-
- for (int i = 0; i < 10; i++)
- {
- switch (getData.dDataList[i].CommendID)
- {
- case 10000: //
- {
- csRet = OnExeInfo(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].bb.szName, getData.dDataList[i].dwSocketID);
- break;
- }
- case 1: //请求订单编号
- {
- csRet = OnGetDingDan(*((GETDUILIE *)getData.dDataList[i].szBuffer), CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dwSocketID);
- break;
- }
- case 2://获取购买记录
- {
- csRet = OnGetDingDanList(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dwSocketID);
- break;
- }
- case 3://绑定代理
- {
- 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);
- break;
- }
- case 4://分享通知
- {
- csRet = OnGetShare(CString(getData.dDataList[i].szUnionID), 0, 0);
- }
- case 7://获取代理id
- {
- csRet = OnGetDaiLiID(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, getData.dDataList[i].dwSocketID, getData.dDataList[i].bb.szName);
- break;
- }
- case 8://获取手机验证码
- {
- OnGetIphoneNumber(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, getData.dDataList[i].dwSocketID);
- break;
- }
- case 9://校验手机验证码,把dUserID当做了手机的验证码
- {
-
- csRet = OnVerfIphoneNumberCode(CString(getData.dDataList[i].szUnionID), /*getData.dDataList[i].dUserID*/getData.dDataList[i].bb.szName, getData.dDataList[i].dwSocketID);
- break;
- }
- case 10://玩家自主解绑代理
- {
- DWORD dwAccurency, dwDaiLiID;
- dwAccurency = _tstoi(getData.dDataList[i].bb.szImgHead);
- dwDaiLiID = _tstoi(getData.dDataList[i].bb.szName);
- OnUntieAgent(CString(getData.dDataList[i].szUnionID), getData.dDataList[i].dUserID, dwAccurency, dwDaiLiID, getData.dDataList[i].dwSocketID);
- break;
- }
- case 11://抽奖记录入库
- {
- WORD wLotteryID = _tstoi(getData.dDataList[i].bb.szName);
- WORD wLotteryType = _tstoi(getData.dDataList[i].szUnionID);
- DWORD dwRecordID = stoi(getData.dDataList[i].szBuffer);
- OnLotteryResult(getData.dDataList[i].dUserID, wLotteryID, wLotteryType, CString(getData.dDataList[i].bb.szImgHead), dwRecordID, getData.dDataList[i].dwSocketID);
- break;
- }
- case 12://抽奖记录入库EX
- {
- DWORD dwRecordID = stoi(getData.dDataList[i].szBuffer);
- 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);
- break;
- }
- case 13://战绩分享闲聊群
- {
- OnFenXiangXianLiao(getData.dDataList[i].szUnionID, *((DBR_GR_ClubRecordXianLiao *)getData.dDataList[i].szBuffer));
- break;
- }
- default:
- break;
- }
- }
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
- {
- dStart = GetTickCount() - dStart;
- CString csTest;
- getData.dDataList[0].bb.szName[31] = 0x00;
- csTest.Format(_T("处理完成了(%s)的请求,耗时=%d。\r\n处理结果=%s"), getData.dDataList[0].bb.szName, dStart, csRet);
- CShowTime aa(csTest, true, 99999, 99999);
- }
- }
-
- Ret.clear();
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
- {
- CString csTest;
- csTest.Format(_T("处理完成,进入休眠。"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
- }
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(8888))
- {
- CString csTest;
- csTest.Format(_T("支付线程退出。"));
- CShowTime aa(csTest, true, 99999, 99999);
- }
-
- m_bRun = false;
- if (g_Event)
- {
- CloseHandle(g_Event);
- g_Event = NULL;
- }
- GetLog();
-
- if (curl != NULL)
- {
- curl_easy_cleanup(curl);
- curl = NULL;
- }
- //_endthreadex(0);
- m_hThread = NULL;
- return 0;
- }
-
-
- // 获取订单编号
- CString CHttpClient::OnGetDingDan(GETDUILIE Data, CString csUnionID, DWORD dwSocketID)
- {
-
- DWORD dStart = GetTickCount();
- CString csGet;
-
- IServerUserItem * pUser = CHttpClient::pCAttemperEngineSink->GetBindUserItem(LOWORD(dwSocketID));
-
- /*/// by yd 判断pUser是否为空
- WORD deviceType = 0xFFFF;
- if (pUser != NULL)
- {
- deviceType = pUser->GetMobileUserMachineType();
- }*/
-
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
-
- if (HttpPath == _T(""))
- {
- //HttpPath = _T("http://www.jiangn.net/");
- HttpPath = _T("http://cycz.legaogame.com/");
- }
- csGet.Format(_T("%sPay/CreatXMLPay"), HttpPath);
-
- HttpPath = csGet;
- csGet = _T("");
-
- Data.ack.dwGameID = 305;
- CTime t = CTime::GetCurrentTime();
- CString time = t.Format("%Y%m%d%H%M%S");
- CString key = _T("VwZkLv0m0G^5T@2v");
- CString stringSource = _T("");
- CString stringTarget = _T("");
- TCHAR strTemp[LEN_MD5];
- 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);
- CWHEncrypt::MD5Encrypt(stringSource, strTemp);
- stringTarget.Format(_T("%s"), strTemp);
- 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);
- if (pCAttemperEngineSink->IsJC(305)){
- CTraceService::TraceString(HttpPath, TraceLevel_Normal);
- CTraceService::TraceString(csGet, TraceLevel_Normal);
- }
- std::string szUrl;
- std::string szParam;
- szUrl = CW2AEX<1024>(HttpPath).m_psz;
- szParam = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CHttpClient aa;
- //int iRet = aa.Get(szUrl, csRet);
- int iRet = aa.Post(szUrl, szParam, csRet);
- dStart = GetTickCount() - dStart;
-
- //CString bb = (CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
- if (iRet != SUCCESS)
- {
- CString csTest;
- csTest.Format(_T("获取微信订单失败。请求耗时=%d。出错代码=%d。请求【%s】"), dStart, iRet, csGet);
- CShowTime aa(csTest, true, 99999, 99999);
- //失败写日志
- StringCchCopy(Data.ack.szRet, 2048, _T("{\"Code\":\"2\",\"Msg\":\"失败\"}"));
- /* StringCchCopy(Data.ack.szRet, 2048, _T("<NewDataSet><Table1><Return>0</Return><Text>操作失败</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>"));*/
- Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
-
- return bb;
- }
-
- if (Data.ack.dUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(Data.ack.dUserID))
- {
- CString csTest;
-
- if (bb.GetLength() > 512)
- {
- csTest.Format(_T("获取微信订单结果:%s。请求耗时=%d。请求【%s】"), bb.Mid(0, 512), dStart, csGet);
- }
- else
- {
- csTest.Format(_T("获取微信订单结果:%s。请求耗时=%d。请求【%s】"), bb, dStart, csGet);
- }
- TCHAR szBuffer[600];
-
- ZeroMemory(szBuffer, sizeof(TCHAR) * 600);
- StringCchCopy(szBuffer, 600, csTest);
-
- CShowTime aa(szBuffer, true, 99999, 99999);
- }
-
- if (bb.GetLength() < 2048)
- {
- StringCchCopy(Data.ack.szRet, 2048, bb);
- Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
- }
- else
- {
- //超长日志
- /* StringCchCopy(Data.ack.szRet, 2048, _T("<NewDataSet><Table1><Return>0</Return><Text>操作失败</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>"));*/
- StringCchCopy(Data.ack.szRet, 2048, _T("{\"Code\":\"1\",\"Msg\":\"失败\"}"));
- Data.ack.bLen = wcslen(Data.ack.szRet) + 1;
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanCallBack(Data, dwSocketID);
- }
- return bb;
- }
-
- // 获取订单列表
- CString CHttpClient::OnGetDingDanList(CString csUnionID, DWORD dwSocketID)
- {
- CString csGet, Err;
-
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
-
- if (HttpPath == _T(""))
- {
- HttpPath = _T("http://www.jiangn.net/");
- }
-
- csGet.Format(_T("%sGetcyhddata.aspx?GetMyTrade_No=1&iPage=0&unionid=%s&pass=am8du5hua3zi1"), HttpPath,csUnionID);
-
- std::string szUrl;
- szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CHttpClient aa;
- int iRet = aa.Get(szUrl, csRet);
-
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
-
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserGetDingdanListCallBack(bb, dwSocketID);
-
- return bb;
- }
-
- //分享通知
- CString CHttpClient::OnGetShare(CString csUnionID, DWORD UserID, DWORD dwXinYong)
- {
- return L"";
- }
-
- // 绑定代理
- CString CHttpClient::OnGetBangDing(CString csUnionID, DWORD dwSocketID, DWORD dDaiLi, DWORD dUserID, CString Name, CString Head)
- {
- DWORD dStart = GetTickCount();
-
- #ifdef _TEST
- CString abc = L"<NewDataSet><Table1><Return>1</Return><Text>操作成功</Text><HaveSecondRet>0</HaveSecondRet><Value /></Table1></NewDataSet>";
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserBangDingCallBack(abc, dwSocketID, dDaiLi);
- return abc;
- #endif
-
- CString csGet;
-
- IServerUserItem * pUser = CHttpClient::pCAttemperEngineSink->GetBindUserItem(LOWORD(dwSocketID));
-
- /*/// by yd 判断pUser是否为空
- WORD deviceType = 0xFFFF;
- if (pUser != NULL)
- {
- deviceType = pUser->GetMobileUserMachineType();
- }*/
-
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
-
- if (HttpPath == _T(""))
- {
- //HttpPath = _T("http://www.jiangn.net/");
- HttpPath = _T("http://cycz.legaogame.com/");
- }
- csGet.Format(_T("%sUser/UserBindAgentXml"), HttpPath);
- HttpPath = csGet;
- csGet = _T("");
-
- //测试用例
- CTime t = CTime::GetCurrentTime();
- CString time = t.Format("%Y%m%d%H%M%S");
- CString key = _T("VwZkLv0m0G^5T@2v");
- CString stringSource = _T("");
- CString stringTarget = _T("");
- TCHAR strTemp[LEN_MD5];
- stringSource.Format(_T("%d%s%d%d%s%s"), 305, csUnionID, dDaiLi, dUserID, time, key);
- CWHEncrypt::MD5Encrypt(stringSource, strTemp);
- stringTarget.Format(_T("%s"), strTemp);
-
- 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);
-
- if (pCAttemperEngineSink->IsJC(305)){
- CTraceService::TraceString(HttpPath, TraceLevel_Normal);
- //CTraceService::TraceString(stringTarget, TraceLevel_Normal);
- CTraceService::TraceString(csGet, TraceLevel_Normal);
- }
-
-
- std::string szUrl;
- std::string szParam;
- szUrl = CW2AEX<1024>(HttpPath).m_psz;
- szParam = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CHttpClient aa;
- //int iRet = aa.Get(szUrl, csRet);
- int iRet = aa.Post(szUrl, szParam, csRet);
-
- //CString bb = (CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;
- dStart = GetTickCount() - dStart;
- if (iRet != SUCCESS)
- {
- //失败写日志
- CString csTest;
- csTest.Format(_T("绑定代理请求失败。请求耗时=%d。出错代码=%d 请求【%s】,请求数据%s"), dStart, iRet, bb, csGet);
- CShowTime aa1(csTest, true, 99999, 99999);
- return bb;
- }
-
- if (dUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(dUserID))
- {
- CString csTest;
- if (bb.GetLength() > 512)
- {
- csTest.Format(_T("获取绑定代理结果:%s。请求耗时=%d。请求【%s】"), bb.Mid(0, 512), dStart, csGet);
- }
- else
- {
- csTest.Format(_T("获取绑定代理结果:%s。请求耗时=%d。请求【%s】"), bb, dStart, csGet);
- }
- CShowTime aa1(csTest, true, 99999, 99999);
- }
-
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserBangDingCallBack(bb, dwSocketID, dDaiLi);
-
- return bb;
- }
-
- static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
- {
- if (itype == CURLINFO_TEXT)
- {
- //printf("[TEXT]%s\n", pData);
- }
- else if (itype == CURLINFO_HEADER_IN)
- {
- printf("[HEADER_IN]%s\n", pData);
- }
- else if (itype == CURLINFO_HEADER_OUT)
- {
- printf("[HEADER_OUT]%s\n", pData);
- }
- else if (itype == CURLINFO_DATA_IN)
- {
- printf("[DATA_IN]%s\n", pData);
- }
- else if (itype == CURLINFO_DATA_OUT)
- {
- printf("[DATA_OUT]%s\n", pData);
- }
- return 0;
- }
-
- static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
- {
- std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
- if (NULL == str || NULL == buffer)
- {
- return -1;
- }
-
- char* pData = (char*)buffer;
- str->append(pData, size * nmemb);
- return nmemb;
- }
-
- int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
- {
- CURLcode res;
- CURL* curl = curl_easy_init();
- if (NULL == curl)
- {
- return CURLE_FAILED_INIT;
- }
- if (m_bDebug)
- {
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
- curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
- }
- curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- return res;
- }
-
- int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
- {
- CURLcode res;
- if (NULL == curl)
- {
- return CURLE_FAILED_INIT;
- }
- if (m_bDebug)
- {
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
- curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
- }
- struct curl_slist *headers = NULL;
- headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded;charset=UTF-8");
- headers = curl_slist_append(headers, "Accept:*/*");
- headers = curl_slist_append(headers, "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; CIBA)");
- headers = curl_slist_append(headers, "Connection:Keep-Alive");
-
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
- /**
- * 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
- * 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
- */
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
- res = curl_easy_perform(curl);
-
- curl_slist_free_all(headers);//记得要释放
- return res;
- }
-
- int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
- {
- CURLcode res;
- CURL* curl = curl_easy_init();
- if (NULL == curl)
- {
- return CURLE_FAILED_INIT;
- }
- if (m_bDebug)
- {
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
- curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
- }
- curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- if (NULL == pCaPath)
- {
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- else
- {
- //缺省情况就是PEM,所以无需设置,另外支持DER
- //curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
- curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
- }
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- return res;
- }
-
- int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
- {
- CURLcode res;
- CURL* curl = curl_easy_init();
- if (NULL == curl)
- {
- return CURLE_FAILED_INIT;
- }
- if (m_bDebug)
- {
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
- curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
- }
- curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- if (NULL == pCaPath)
- {
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- else
- {
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
- curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
- }
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- return res;
- }
-
- ///////////////////////////////////////////////////////////////////////////////////////////////
-
- void CHttpClient::SetDebug(bool bDebug)
- {
- m_bDebug = bDebug;
- }
- //玩家自主解绑代理
- //玩家自主解绑代理
- CString CHttpClient::OnUntieAgent(CString csUnionID, DWORD dwUserID, DWORD dwAccurency, DWORD dwDaiLiID, DWORD dwSocketID)
- {
- CString csGet, Err;
-
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
-
- if (HttpPath == _T(""))
- {
- HttpPath = _T("http://www.jiangn.net/");
- }
-
- //http://10.25.210.43:50043/Getcyhddata.aspx?ReleaseAgentBanding=1&unionid=owbjBv_wBNd5_or8oD7nqmvmaaLQ&Userid=103951&pass=am8du5hua3zi1
- csGet.Format(_T("%sGetcyhddata.aspx?ReleaseMember=1&Userid=%d&Accurency=%d&unionid=%s&Agent_Id=%d&pass=am8du5hua3zi1"), HttpPath, dwUserID, dwAccurency, csUnionID, dwDaiLiID);
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(404))
- {
- CString strTip;
- strTip.Format(L"**玩家自主解绑代理请求:%s", csGet);
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- std::string szUrl;
- szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CHttpClient aa;
- int iRet = aa.Get(szUrl, csRet);
-
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str()); //(CA2CTEX<2048>(csRet.c_str())).m_szBuffer;;
- if (iRet != SUCCESS)
- {
- //失败写日志
- CString csTest;
- csTest.Format(_T("绑定代理请求失败。出错代码=%d 请求【%s】 ------%s---------"), iRet, bb, csGet);
- CShowTime aa1(csTest, true, 99999, 99999);
- return bb;
- }
- if (dwUserID != 0 && pCAttemperEngineSink && pCAttemperEngineSink->IsJC(dwUserID))
- {
- CString csTest;
- if (bb.GetLength() > 512)
- {
- csTest.Format(_T("绑定代理请求结果:%s。请求【%s】"), bb.Mid(0, 512), csGet);
- }
- else
- {
- csTest.Format(_T("绑定代理请求结果:%s。请求【%s】"), bb, csGet);
- }
- CShowTime aa1(csTest, true, 99999, 99999);
- }
-
-
- //if (iRet != 0)
- //{
- // CMD_GR_RequestFailure RequestFailure;
- // ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- // //设置变量
- // RequestFailure.lErrorCode = iRet;
- // lstrcpyn(RequestFailure.szDescribeString, bb, CountArray(RequestFailure.szDescribeString));
-
- // //发送数据
- // WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
- // WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
- // //获取用户
- // WORD wBindIndex = LOWORD(dwSocketID);
- // IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
- // if (pIServerUserItem == NULL) return false;
- // pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, &RequestFailure, wHeadSize + wDataSize);
- //}
-
- if (pCAttemperEngineSink)pCAttemperEngineSink->OnTCPNetworkSubUserUntieAgentCallBack(bb, dwSocketID);
- return bb;
- }
-
- // 获取扫码绑定代码ID列表
- CString CHttpClient::OnGetDaiLiID(CString csUnionID, DWORD dwUserID, DWORD dwSocketID, CString csUserName)
- {
- DWORD dStart = GetTickCount();
- CString csGet, Err;
-
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
-
-
- if (HttpPath == _T(""))
- {
- //HttpPath = _T("http://www.jiangn.net/");
- HttpPath = _T("http://cycz.legaogame.com/");
- }
- csGet.Format(_T("%sUser/GetUserBindingIdByUnionId"), HttpPath);
- HttpPath = csGet;
- csGet = _T("");
-
- CTime t = CTime::GetCurrentTime();
- CString time = t.Format("%Y%m%d%H%M%S");
- CString key = _T("VwZkLv0m0G^5T@2v");
- CString stringSource = _T("");
- CString stringTarget = _T("");
- TCHAR strTemp[LEN_MD5];
- stringSource.Format(_T("%d%s%d%s%s"), KIND_ID, csUnionID, dwUserID, time, key);
- CWHEncrypt::MD5Encrypt(stringSource, strTemp); //生成加密串
- stringTarget.Format(_T("%s"), strTemp);
- csGet.Format(_T("serviceId=%d&unionId=%s&userId=%d&username=%s&time=%s&sign=%s"), KIND_ID, csUnionID, dwUserID, UrlEncode(csUserName), time, stringTarget);
-
-
- std::string szUrl;
- std::string szParam;
- szUrl = CW2AEX<1024>(HttpPath).m_psz;
- szParam = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CHttpClient aa;
- //int iRet = aa.Get(szUrl, csRet);
- int iRet = aa.Post(szUrl, szParam, csRet);
- dStart = GetTickCount() - dStart;
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
-
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- std::string strbb(CW2A(bb.GetString()));
- if (!m_reader.parse(strbb, m_root))
- return L"";
-
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(KIND_ID))
- {
- CString strTip;
- TCHAR tString[10000] = L"";
- m_root.MByteToWChar(strbb.c_str(), tString, strbb.size() + 1);
- strTip.Format(L"校验请求:%s,Post:%s,返回数据:%s", csGet, HttpPath, tString);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
- int nCode = 0;
- if (m_root["Code"].isString())
- {
- nCode = (INT)atoi(m_root["Code"].asString().c_str());
- }
- else if (m_root["Code"].isInt()){
- nCode = (INT)m_root["Code"].asInt();
- }
- int AgentID = m_root["Body"]["AgentId"].asInt();//代理id
- if (iRet != SUCCESS)
- {
- CString csTest;
- csTest.Format(_T("获取代理绑定信息失败。请求耗时=%d。出错代码=%d。请求【%s】"), dStart, iRet, csGet);
- CShowTime aa(csTest, true, 99999, 99999);
- //失败写日志
- return bb;
- }
- //发送结果
- if (pCAttemperEngineSink && 0 != AgentID){
- CMD_GR_GetDaiLiSaoMaResult saomSul;
- ZeroMemory(&saomSul, sizeof(CMD_GR_GetDaiLiSaoMaResult));
- saomSul.dwBingID = AgentID;
- saomSul.dwUserID = dwUserID;
- pCAttemperEngineSink->OnSetAddBingIDAndCurrency(&saomSul, sizeof(CMD_GR_GetDaiLiSaoMaResult), dwSocketID);
-
- if (bb.Find(_T("\"Code\":\"0\"")) != -1)
- {
- //成功 更新
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = CHttpClient::pCAttemperEngineSink->GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return bb;
-
- if (pIServerUserItem->GetUserInfo())
- {
- pIServerUserItem->GetUserInfo()->dDaiLi = AgentID;
- }
-
- //查询更新数据库
- pCAttemperEngineSink->OnTCPNetworkSubUseGetDaiLiInfo(NULL, 0, dwSocketID);
-
- }
-
- }
-
- return bb;
- }
- //获取验证码
- bool CHttpClient::OnGetIphoneNumber(CString csIphoneNum, DWORD dwUserID, DWORD dwSocketID)
- {
- CString csGet, Err;
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
- csGet.Format(_T("%s/Sms/AliyunSendSms"), HttpPath);
- //csGet.Format(_T("http://192.168.0.223:8088/Sms/AliyunSendSms"));
-
- std::string szUrl;
- szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CString csPost;
- std::string szPost;
-
- char TimeScore[15] = { 0 };
- time_t t;
- tm* local; //本地时间
- t = time(NULL);
- local = localtime(&t); //转为本地时间
- strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
- TimeScore[14] = '\0';
- std::string strTime = TimeScore;
- CString csTime(strTime.c_str());
-
-
- CString Key = _T("");
- CString GameId = _T("305");
- CString csMd5;
- csMd5.Format(_T("305%s%sf*4$oEmmHA@fuHVD"), csIphoneNum, csTime);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5);
-
- csPost.Format(_T("GameId=305&Mobile=%s&Time=%s&Sign=%s"), csIphoneNum, csTime, strMd5);
- szPost = CW2AEX<1024>(csPost).m_psz;
-
- CHttpClient aa;
- int iRet = aa.Post(szUrl, szPost, csRet); //post请求
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
- {
- CString strTip;
- strTip.Format(L"验证码请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- if (!m_reader.parse(csRet, m_root))
- return true;
- int nCode = (INT)m_root["Code"].asInt();
- std:string strMsg = m_root["Msg"].asString();
- CString strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
- if (nCode != 0)
- {
- CMD_GR_RequestFailure RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = nCode;
- lstrcpyn(RequestFailure.szDescribeString, strError, CountArray(RequestFailure.szDescribeString));
-
- //发送数据
- WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
- WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return false;
-
- UserInfo::PB_CS_S_RequestFailure Failure;
- Failure.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- return pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
- }
- return true;
- }
- //校验手机验证码
- CString CHttpClient::OnVerfIphoneNumberCode(CString csIphoneNum, /*DWORD dVerfCode,*/CString csVerfCode, DWORD dwSocketID)
- {
- CString csGet, Err;
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
- csGet.Format(_T("%s/Sms/AliyunValidateCode"), HttpPath);
-
- std::string szUrl;
- szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CString csPost;
- std::string szPost;
-
- char TimeScore[15] = { 0 };
- time_t t;
- tm* local; //本地时间
- t = time(NULL);
- local = localtime(&t); //转为本地时间
- strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
- TimeScore[14] = '\0';
- std::string strTime = TimeScore;//TimeScore;
- CString csTime(strTime.c_str());
-
- //CString CsVerfCode;
- //CsVerfCode.Format(_T("%d"), dVerfCode);
- CString GameId = _T("305");
- CString csMd5;
- csMd5.Format(_T("305%s%s%sf*4$oEmmHA@fuHVD"), csIphoneNum, csVerfCode, csTime);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5); //生成加密串
-
- csPost.Format(_T("GameId=305&Mobile=%s&Code=%s&Time=%s&Sign=%s"), csIphoneNum, csVerfCode, csTime, strMd5); //组装post入参
- szPost = CW2AEX<1024>(csPost).m_psz;
-
- CHttpClient aa;
- int iRet = aa.Post(szUrl, szPost, csRet); //post请求
-
- //CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
- {
- CString strTip;
- strTip.Format(L"校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- if (!m_reader.parse(csRet, m_root))
- return L"";
- int nCode = (INT)m_root["Code"].asInt();
- std:string strMsg = m_root["Msg"].asString();
- CString strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
- if (nCode != 0)
- {
- CMD_GR_RequestFailure RequestFailure;
- ZeroMemory(&RequestFailure, sizeof(RequestFailure));
-
- //设置变量
- RequestFailure.lErrorCode = nCode;
- lstrcpyn(RequestFailure.szDescribeString, strError, CountArray(RequestFailure.szDescribeString));
-
- //发送数据
- WORD wDataSize = CountStringBuffer(RequestFailure.szDescribeString);
- WORD wHeadSize = sizeof(RequestFailure) - sizeof(RequestFailure.szDescribeString);
- //获取用户
- WORD wBindIndex = LOWORD(dwSocketID);
- IServerUserItem * pIServerUserItem = pCAttemperEngineSink->GetBindUserItem(wBindIndex);
- if (pIServerUserItem == NULL) return strError;
-
- UserInfo::PB_CS_S_RequestFailure Failure;
- Failure.set_lerrorcode(RequestFailure.lErrorCode);
- std::string szDescribeString = CW2AEX<1024>(RequestFailure.szDescribeString, CP_UTF8).m_psz;
- Failure.set_szdescribestring(szDescribeString);
- //发送数据
- std::string pbdata = Failure.SerializePartialAsString();
-
- pCAttemperEngineSink->SendData(pIServerUserItem, MDM_GR_USER, SUB_GR_REQUEST_FAILURE, (void*)pbdata.c_str(), pbdata.length());
- return strError;
- }
- //发送结果
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserCheckVerifCodeCallBack(csIphoneNum, csVerfCode, dwSocketID);
- return strError;
- }
-
- //短信通知手机本节点运行详情
- CString CHttpClient::OnExeInfo(CString csIphoneNum,CString csInfo, DWORD dwSocketID)
- {
- CString csGet, Err;
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath2;
- csGet.Format(_T("%s/Sms/SendNoticeSms"), HttpPath);
- if (HttpPath == L"")
- {
- csGet.Format(_T("http://192.168.0.223:8088/Sms//SendNoticeSms"));
- }
- std::string szUrl;
- szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CString csPost;
- std::string szPost;
-
- char TimeScore[15] = { 0 };
- time_t t;
- tm* local; //本地时间
- t = time(NULL);
- local = localtime(&t); //转为本地时间
- strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
- TimeScore[14] = '\0';
- std::string strTime = TimeScore;//TimeScore;
- CString csTime(strTime.c_str());
-
- /*
- *csIphoneNum = L"13246711966";
- csInfo = L"香蕉";
- 测试版 数据
- */
- CString csMd5;
- csMd5.Format(_T("%d%s%sf*4$oEmmHA@fuHVD"), KIND_ID, csIphoneNum, csTime);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5); //生成加密串
-
- csPost.Format(_T("GameId=%d&Mobile=%s&product=%s&Time=%s&Sign=%s"), KIND_ID, csIphoneNum, csInfo, csTime, strMd5); //组装post入参
- szPost = CW2AEX<1024>(csPost).m_psz;
-
- CHttpClient aa;
- aa.Post(szUrl, szPost, csRet); //post请求
-
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(KIND_ID))
- {
- CString strTip;
- strTip.Format(L"【短信通知手机本节点运行详情】校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- return bb;
- }
- //抽奖记录入库
- CString CHttpClient::OnLotteryResult(DWORD dwUserID, WORD wLotteryID, WORD wLotteryType, CString csIphoneNum, DWORD dwRecordID, DWORD dwSocketID)
- {
- CString csGet, Err;
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath3;
- //HttpPath = _T("http://192.168.0.204:8080/");
- if (HttpPath == _T(""))
- {
- HttpPath = _T("http://www.jiangn.net/");
- }
- csGet.Format(_T("%s/api/GameZJ/GetGameZhongJiang"), HttpPath);
- std::string csRet;
-
- CString csPost;
- std::string szPost;
-
- //wLotteryID = 9;
- //csIphoneNum.Format(_T("%s"), _T("17755351974"));
- //////////////////////////
- CString csMd5;
- csMd5.Format(_T("%d|%d|%s|%d|!@12$dai"), dwUserID, wLotteryID, csIphoneNum, pCAttemperEngineSink->m_pGameServiceOption->wGameID);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5); //生成加密串
- ////////////////////////////
-
- 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
- std::string strcsGet(CW2A(csGet.GetString()));
-
- csPost.Format(_T("RlId=%d"), dwRecordID); //组装post入参
- szPost = CW2AEX<1024>(csPost).m_psz;
-
- CHttpClient aa;
- int iRet = aa.Post(strcsGet, szPost, csRet); //post请求
-
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
- {
- CString strTip;
- strTip.Format(L"校验请求:%s,Post:%s", csGet, csPost);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- std::string strbb(CW2A(bb.GetString()));
- if (!m_reader.parse(strbb, m_root))
- return L"";
- int nCode = (INT)m_root["State"].asInt();
- std:string strMsg = m_root["ErrorMsg"].asString();
- CString strError(strMsg.c_str());//CChineseCode::Utf8ToUnicode(strMsg.c_str());
- if (nCode == 0)
- {
- //失败写日志
- CString csTest;
- csTest.Format(_T("抽奖记录入库。出错代码=%d 请求【%s】"), iRet, strError);
- CShowTime aa1(csTest, true, 99999, 99999);
- return L"";
- }
- //成功更新发放标志
- if (pCAttemperEngineSink && nCode == 1 && wLotteryType != 4) pCAttemperEngineSink->OnTCPNetworkSubUserLotteryResultCallBack(dwRecordID, dwSocketID);
- return L"";
-
- }
- CString CHttpClient::OnLotteryResultEx(DWORD dwUserID, CString csAddressee, CString csAddress, CString csIphoneNum, DWORD dwRecordID, DWORD dwSocketID)
- {
- CString csGet, Err;
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath3;
- //HttpPath = _T("http://192.168.0.204:8080/");
- if (HttpPath == _T(""))
- {
- HttpPath = _T("http://www.jiangn.net/");
- }
- csGet.Format(_T("%s/api/GameZJ/UpdateZhongJiangRecord"), HttpPath);
-
- //std::string szUrl;
- //szUrl = CW2AEX<1024>(csGet).m_psz;
- std::string csRet;
-
- CString csPost;
- std::string szPost;
-
- CString csMd5;
- csMd5.Format(_T("%d%d%d%s!@12$dai"), pCAttemperEngineSink->m_pGameServiceOption->wGameID, dwUserID, dwRecordID, csIphoneNum);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5); //生成加密串
- ////////////////////////////
-
-
- 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
-
-
- std::string strcsGet = CW2AEX<1024>(csGet).m_psz;//(CW2A(csGet.GetString()));
-
- szPost = CW2AEX<1024>(csPost).m_psz;
-
- CHttpClient aa;
- int iRet = aa.Post(strcsGet, szPost, csRet); //post请求
-
- CString bb = CChineseCode::Utf8ToUnicode(csRet.c_str());
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
- {
- CString strTip;
- strTip.Format(L"校验请求:%s,Post:%s,iRet=%d,,csReslut=%s", csGet, csPost,iRet,bb);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- std::string strbb(CW2A(bb.GetString()));
- if (!m_reader.parse(strbb, m_root))
- return L"";
- int nCode = (INT)m_root["State"].asInt();
- std:string strMsg = m_root["ErrorMsg"].asString();
- CString strError(strMsg.c_str());
- if (nCode == 0)
- {
- //失败写日志
- CString csTest;
- csTest.Format(_T("抽奖记录入库。出错代码=%d 请求【%s】"), iRet, strError);
- CShowTime aa1(csTest, true, 99999, 99999);
- return L"";
- }
- //成功更新发放标志
- if (pCAttemperEngineSink) pCAttemperEngineSink->OnTCPNetworkSubUserLotteryResultCallBack(dwRecordID, dwSocketID);
- return L"";
-
- }
-
- //分享闲聊,俱乐部,桌子号,玩家信息
- CString CHttpClient::OnFenXiangXianLiao(TCHAR WanFTitle[33], DBR_GR_ClubRecordXianLiao FenXiangRecord)
- {
- CString HttpPath = _T("");
- if (CServiceUnits::g_pServiceUnits) HttpPath = CServiceUnits::g_pServiceUnits->m_InitParameter.m_HttpPath;
- CString csReqPost;
- if (HttpPath == _T(""))
- {
- HttpPath = _T("http://cycz.legaogame.com/");
- }
- csReqPost.Format(_T("%sGroupRobot/ShareCard"), HttpPath);
- std::string szUrl, szAns_Err;
- szUrl = CW2AEX<1024>(csReqPost).m_psz;
-
- char TimeScore[15] = { 0 };
- time_t t;
- tm* local; //本地时间
- t = time(NULL);
- local = localtime(&t); //转为本地时间
- strftime(TimeScore, 64, "%Y%m%d%H%M%S", local);
- TimeScore[14] = '\0';
- std::string strTime = TimeScore;//TimeScore;
- CString csTime(strTime.c_str());
- CString csMd5;
- csMd5.Format(_T("%d%sf*4$oEmmHA@fuHVD"), FenXiangRecord.dwClubID, csTime);
- TCHAR strMd5[LEN_MD5];
- CWHEncrypt md5;
- md5.MD5Encrypt(csMd5, strMd5); //生成加密串
- std::string strMd52 = CW2AEX<1024>(strMd5).m_psz;
-
- CJsonBusiness cjb;
- CString csPost;
- TCHAR TempWanFTitle[68];
- char TimeScore2[17] = { 0 };
- time_t t2;
- tm* local2; //本地时间
- t2 = time(NULL);
- local2 = localtime(&t2); //转为本地时间
- strftime(TimeScore2, 64, "%Y/%m/%d %H\:%M", local2);
- TimeScore2[16] = '\0';
- std::string strTime2 = TimeScore2;//TimeScore;
- CString csTime2(strTime2.c_str());
- _sntprintf(TempWanFTitle, CountArray(TempWanFTitle), TEXT("%s %s"), WanFTitle, csTime2);
- std::string szPost = cjb.GetInfoJson(305, TempWanFTitle, strTime, strMd52, FenXiangRecord);
- CHttpClient aa;
- int iRet = aa.Post(szUrl, szPost, szAns_Err); //post请求
- CString CstrPost = CChineseCode::Utf8ToUnicode(szPost.c_str());
- CString strError = CChineseCode::Utf8ToUnicode(szAns_Err.c_str());
- if (pCAttemperEngineSink && pCAttemperEngineSink->IsJC(305))
- {
- CString strTip;
- strTip.Format(L"校验请求:%s,Post:%s", strError, CstrPost);//新用户ID:%d,dwUserID,
- CTraceService::TraceString(strTip, TraceLevel_Normal);
- }
-
- //解析返回的数据
- Json::Reader m_reader;
- Json::Value m_root;
- std::string strbb(CW2A(strError.GetString()));
- if (!m_reader.parse(strbb, m_root))
- return L"";
- int nCode = (INT)m_root["errorCode"].asInt();
- std:string strMsg = m_root["errorMessage"].asString();
- strError = CChineseCode::Utf8ToUnicode(strMsg.c_str());
- if (nCode != 0)
- {
- CString strTip;
- strTip.Format(L"分享失败%s,%s", strError, CstrPost);
- CTraceService::TraceString(strTip, TraceLevel_Warning);
- }
- //发送结果
- return L"";
- }
|