CZhipuziHttpClient.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include "../pch/pch.h"
  2. #include "CZhipuziHttpClient.h"
  3. #include "rapidjson/document.h"
  4. #include "rapidjson/prettywriter.h"
  5. #include "rapidjson/writer.h"
  6. #include "rapidjson/stringbuffer.h"
  7. using namespace rapidjson;
  8. #include "../helper/MD5.h"
  9. CZhipuziHttpClient CZhipuziHttpClient::m_client;
  10. CZhipuziHttpClient::CZhipuziHttpClient()
  11. {
  12. }
  13. CZhipuziHttpClient::~CZhipuziHttpClient()
  14. {
  15. }
  16. void CZhipuziHttpClient::Init(std::string username, std::string password)
  17. {
  18. m_client.m_username = username;
  19. m_client.m_password = password;
  20. }
  21. bool CZhipuziHttpClient::Login(std::string& errmsg)
  22. {
  23. std::map<string, string> params;
  24. std::string response;
  25. bool ret = m_client.RequestNew("/login/login", params, response);
  26. if (!ret)
  27. {
  28. //网络请求出错
  29. LOG_INFO("network failed!");
  30. errmsg = "network failed!";
  31. return false;
  32. }
  33. LOG_INFO("response:" << response.c_str());
  34. rapidjson::Document document;
  35. document.Parse(response.c_str());
  36. if (!document.IsObject())
  37. {
  38. LOG_INFO("message 非法!");
  39. errmsg = "message 非法!";
  40. return false;
  41. }
  42. rapidjson::Value& v_errcode = document["errcode"];
  43. int errcode = v_errcode.GetInt();
  44. if (errcode == -1)
  45. {
  46. LOG_INFO("login failed! message:" << document["errmsg"].GetString());
  47. errmsg = std::string(document["errmsg"].GetString());
  48. return false;
  49. }
  50. LOG_INFO("login success!");
  51. return true;
  52. }
  53. bool CZhipuziHttpClient::RequestOld(std::string url, std::map<string, string> params, std::string& response)
  54. {
  55. std::string timestamp = to_string(time(NULL));
  56. std::string nonce = "123456";
  57. //先添加默认参数,用于计算签名
  58. params["machinecode"] = m_client.m_machinecode;
  59. params["username"] = m_client.m_username;
  60. params["nonce"] = nonce;
  61. params["timestamp"] = timestamp;
  62. params["url"] = m_client.m_old_url + url;
  63. //计算签名
  64. std::string postString;
  65. for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
  66. {
  67. postString += it->first + "=" + it->second;
  68. it++;
  69. if (it != params.end())
  70. {
  71. postString += "&";
  72. }
  73. }
  74. LOG_INFO("postString:" << postString.c_str());
  75. //用于计算签名的临时变量
  76. std::string password = md5(m_client.m_password);
  77. transform(password.begin(), password.end(), password.begin(), ::toupper);
  78. string tmp = postString + password;
  79. std::string sign = md5(tmp);
  80. transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
  81. LOG_INFO("sign:" << sign.c_str());
  82. //加上签名,去掉url,计算post
  83. params["sign"] = sign;
  84. params.erase("url");
  85. postString = "";
  86. for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
  87. {
  88. postString += it->first + "=" + it->second;
  89. it++;
  90. if (it != params.end())
  91. {
  92. postString += "&";
  93. }
  94. }
  95. LOG_INFO("postString:" << postString.c_str());
  96. CHttpClient m_httpClient;
  97. int ret = m_httpClient.Posts(m_client.m_old_url + url, postString, response, NULL);
  98. LOG_INFO("response:" << response.c_str());
  99. if (ret == 0)
  100. {
  101. //ret为0表示没有出错
  102. return true;
  103. }
  104. return false;
  105. }
  106. bool CZhipuziHttpClient::RequestNew(std::string url, std::map<string, string> params, std::string& response)
  107. {
  108. std::string timestamp = to_string(time(NULL));
  109. std::string nonce = "123456";
  110. std::string lwm_appid = "84b19199fd221a78c491cd553cbb4ab7";
  111. std::string open_secret = "#repast!@#AfAS#@!";
  112. //先添加默认参数,用于计算签名
  113. params["machinecode"] = m_client.m_machinecode;
  114. params["username"] = m_client.m_username;
  115. params["password"] = md5(m_client.m_password);
  116. params["lwm_appid"] = "84b19199fd221a78c491cd553cbb4ab7";
  117. params["nonce"] = nonce;
  118. params["timestamp"] = timestamp;
  119. //计算签名
  120. std::string postString;
  121. for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
  122. {
  123. postString += it->first + "=" + it->second;
  124. it++;
  125. if (it != params.end())
  126. {
  127. postString += "&";
  128. }
  129. }
  130. LOG_INFO("postString:" << postString.c_str());
  131. //用于计算签名的临时变量
  132. string tmp = md5(postString);
  133. tmp += open_secret;
  134. std::string sign = md5(tmp);
  135. transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
  136. LOG_INFO("sign:" << sign.c_str());
  137. //加上签名,去掉url,计算post
  138. params["sign"] = sign;
  139. postString = "";
  140. for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
  141. {
  142. postString += it->first + "=" + it->second;
  143. it++;
  144. if (it != params.end())
  145. {
  146. postString += "&";
  147. }
  148. }
  149. LOG_INFO("postString:" << postString.c_str());
  150. CHttpClient m_httpClient;
  151. int ret = m_httpClient.Posts(m_client.m_new_url + url, postString, response, NULL);
  152. LOG_INFO("response:" << response.c_str());
  153. if (ret == 0)
  154. {
  155. //ret为0表示没有出错
  156. return true;
  157. }
  158. return false;
  159. }