| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446 |
- #include "../pch/pch.h"
- #include "CZhipuziHttpClient.h"
- #include "../helper/MD5.h"
- #include <curl/curl.h>
- CZhipuziHttpClient::CZhipuziHttpClient()
- {
- //初始化curl
- curl_global_init(CURL_GLOBAL_ALL);
- //初始化htttp代理相关参数
- std::string http_is_proxy = CSetting::GetParam("http_is_proxy");
- if (http_is_proxy == "1")
- {
- m_is_http_proxy = true;
- }
- else
- {
- m_is_http_proxy = false;
- }
-
- m_http_proxy_ip = CSetting::GetParam("http_proxy_ip");
- m_http_proxy_port = CSetting::GetParam("http_proxy_port");
- if (m_env == DEV)
- {
- m_pingtai_url = "https://pf-api-dev3.zhipuzi.com/seller";
- }
- else if (m_env == TEST)
- {
- m_pingtai_url = "https://pf-api-test.zhipuzi.com/seller";
- }
- else if (m_env == RELEASE)
- {
- m_pingtai_url = "https://pf-api.zhipuzi.com/seller";
- }
- }
- /*
- *修改了htttp代理设置之后,这里修改状态
- **/
- void CZhipuziHttpClient::UpdateProxy()
- {
- std::string http_is_proxy = CSetting::GetParam("http_is_proxy");
- if (http_is_proxy == "1")
- {
- m_client.m_is_http_proxy = true;
- }
- else
- {
- m_client.m_is_http_proxy = false;
- }
- m_client.m_http_proxy_ip = CSetting::GetParam("http_proxy_ip");
- m_client.m_http_proxy_port = CSetting::GetParam("http_proxy_port");
- }
- CZhipuziHttpClient::~CZhipuziHttpClient()
- {
- }
- void CZhipuziHttpClient::Init(std::string username, std::string password)
- {
- m_client.m_username = username;
- m_client.m_password = password;
- }
- bool CZhipuziHttpClient::Login(std::string& errmsg)
- {
- std::map<string, string> params;
- std::string response;
- bool ret = m_client.RequestPingtaiNew("/login/login", params, response);
- if(!ret)
- {
- //网络请求出错
- LOG_INFO("network failed!");
- errmsg = CLewaimaiString::UnicodeToUTF8(L"请求服务器失败,请检查网络设置!");;
- return false;
- }
- LOG_INFO("response:" << response.c_str());
- rapidjson::Document document;
- document.Parse(response.c_str());
- if(!document.IsObject())
- {
- LOG_INFO("message 非法!");
- errmsg = CLewaimaiString::UnicodeToUTF8(L"服务器错误");
- return false;
- }
- if(document.HasMember("errcode"))
- {
- rapidjson::Value& v_errcode = document["errcode"];
- int errcode = v_errcode.GetInt();
- if(errcode != 0)
- {
- LOG_INFO("login failed! message:" << document["errmsg"].GetString());
- errmsg = std::string(document["errmsg"].GetString());
-
- if (errcode == 10003)
- {
- errmsg = CLewaimaiString::UnicodeToUTF8(L"密码错误");
- }
- return false;
- }
- }
- else if(document.HasMember("error_code"))
- {
- rapidjson::Value& v_errcode = document["error_code"];
- int errcode = v_errcode.GetInt();
- if(errcode != 0)
- {
- LOG_INFO("login failed! message:" << document["error_msg"].GetString());
- errmsg = std::string(document["error_msg"].GetString());
- if (errcode == 10003)
- {
- errmsg = CLewaimaiString::UnicodeToUTF8(L"密码错误");
- }
- return false;
- }
- }
- rapidjson::Value& v_data = document["data"];
- rapidjson::Value& v_version_type = v_data["version_type"];
- m_client.m_version_type = v_version_type.GetString();
- if (m_client.m_version_type == "1")
- {
- if (m_client.m_env == RELEASE)
- {
- m_client.m_yewu_url = "https://cyapi.zhipuzi.com/seller";
- }
- else if (m_client.m_env == TEST)
- {
- m_client.m_yewu_url = "https://cyapi-test.zhipuzi.com/seller";
- }
- else if (m_client.m_env == DEV)
- {
- m_client.m_yewu_url = "https://cyapi-dev3.zhipuzi.com/seller";
- }
- }
- else
- {
- m_client.m_yewu_url = "https://lsapi.zhipuzi.com/seller";
- }
- rapidjson::Value& v_lwm_sess_token = v_data["lwm_sess_token"];
- m_client.lwm_sess_token = v_lwm_sess_token.GetString();
- LOG_INFO("login success!");
- return true;
- }
- bool CZhipuziHttpClient::Request(std::string url, std::map<string, string> params, std::string& response)
- {
- std::string timestamp = to_string(time(NULL));
- std::string nonce = "123456";
- //先添加默认参数,用于计算签名
- params["username"] = m_client.m_username;
- params["nonce"] = nonce;
- params["timestamp"] = timestamp;
- params["url"] = m_client.m_yewu_url + url;
- //计算签名
- std::string postString;
- for(std::map<string, string>::iterator it = params.begin(); it != params.end();)
- {
- postString += it->first + "=" + it->second;
- it++;
- if(it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- //用于计算签名的临时变量
- std::string password = md5(m_client.m_password);
- transform(password.begin(), password.end(), password.begin(), ::toupper);
- string tmp = postString + password;
- std::string sign = md5(tmp);
- transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
- LOG_INFO("sign:" << sign.c_str());
- //加上签名,去掉url,计算post
- params["sign"] = sign;
- params.erase("url");
- //未签名之前,不能进行urlencode,签名完成之后可以(params的value必须为utf8格式)
- postString = "";
- for(std::map<string, string>::iterator it = params.begin(); it != params.end();)
- {
- postString += it->first + "=" + CLewaimaiString::UrlEncode(it->second);
- it++;
- if(it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- CHttpClient m_httpClient;
- int ret = m_httpClient.Posts(m_client.m_yewu_url + url, postString, response, NULL, m_client.m_is_http_proxy, m_client.m_http_proxy_ip, m_client.m_http_proxy_port);
- LOG_INFO("response:" << response.c_str());
- if(ret == 0)
- {
- //ret为0表示没有出错
- return true;
- }
- return false;
- }
- bool CZhipuziHttpClient::RequestNew(std::string url, std::map<string, string> params, std::string& response)
- {
- std::string timestamp = to_string(time(NULL));
- std::string nonce = "123456";
- std::string lwm_appid = "kJnkkHODnoloay197k97G129J";
- std::string open_secret = "kMDNjjid91ydo#!9DH1";
- //先添加默认参数,用于计算签名
- params["username"] = CLewaimaiString::UrlEncode(m_client.m_username);
- params["password"] = md5(m_client.m_password);
- params["lwm_appid"] = lwm_appid;
- params["nonce"] = nonce;
- params["timestamp"] = timestamp;
- //计算签名
- std::string postString;
- for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
- {
- postString += it->first + "=" + it->second;
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- //用于计算签名的临时变量
- string tmp = md5(postString);
- tmp += open_secret;
- std::string sign = md5(tmp);
- transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
- LOG_INFO("sign:" << sign.c_str());
- //加上签名,去掉url,计算post
- params["sign"] = sign;
- postString = "";
- for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
- {
- postString += it->first + "=" + it->second;
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- CHttpClient m_httpClient;
- int ret = m_httpClient.Posts(m_client.m_yewu_url + url, postString, response, NULL, m_client.m_is_http_proxy, m_client.m_http_proxy_ip, m_client.m_http_proxy_port);
- LOG_INFO("response:" << response.c_str());
- if (ret == 0)
- {
- //ret为0表示没有出错
- return true;
- }
- return false;
- }
- bool CZhipuziHttpClient::RequestPingtai(std::string url, std::map<string, string> params, std::string& response)
- {
- std::string timestamp = to_string(time(NULL));
- std::string nonce = "123456";
- //先添加默认参数,用于计算签名
- params["username"] = m_client.m_username;
- params["nonce"] = nonce;
- params["timestamp"] = timestamp;
- params["url"] = m_client.m_pingtai_url + url;
- //计算签名
- std::string postString;
- for (std::map<string, string>::iterator it = params.begin(); it != params.end();)
- {
- postString += it->first + "=" + it->second;
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- //用于计算签名的临时变量
- std::string password = md5(m_client.m_password);
- transform(password.begin(), password.end(), password.begin(), ::toupper);
- string tmp = postString + password;
- std::string sign = md5(tmp);
- transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
- LOG_INFO("sign:" << sign.c_str());
- //加上签名,去掉url,计算post
- params["sign"] = sign;
- params.erase("url");
- //未签名之前,不能进行urlencode,签名完成之后可以(params的value必须为utf8格式)
- postString = "";
- for (std::map<string, string>::iterator it = params.begin(); it != params.end();)
- {
- postString += it->first + "=" + CLewaimaiString::UrlEncode(it->second);
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- CHttpClient m_httpClient;
- int ret = m_httpClient.Posts(m_client.m_pingtai_url + url, postString, response, NULL, m_client.m_is_http_proxy, m_client.m_http_proxy_ip, m_client.m_http_proxy_port);
- LOG_INFO("response:" << response.c_str());
- if (ret == 0)
- {
- //ret为0表示没有出错
- return true;
- }
- return false;
- }
- bool CZhipuziHttpClient::RequestPingtaiNew(std::string url, std::map<string, string> params, std::string& response)
- {
- std::string timestamp = to_string(time(NULL));
- std::string nonce = "123456";
- std::string lwm_appid = "84b19199fd221a78c491cd553cbb4ab7";
- std::string open_secret = "#repast!@#AfAS#@!";
- //先添加默认参数,用于计算签名
- params["username"] = CLewaimaiString::UrlEncode(m_client.m_username);
- params["password"] = md5(m_client.m_password);
- params["lwm_appid"] = lwm_appid;
- params["nonce"] = nonce;
- params["timestamp"] = timestamp;
- //计算签名
- std::string postString;
- for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
- {
- postString += it->first + "=" + it->second;
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- //用于计算签名的临时变量
- string tmp = md5(postString);
- tmp += open_secret;
- std::string sign = md5(tmp);
- transform(sign.begin(), sign.end(), sign.begin(), ::toupper);
- LOG_INFO("sign:" << sign.c_str());
- //加上签名,去掉url,计算post
- params["sign"] = sign;
- postString = "";
- for (std::map<string, string>::iterator it = params.begin(); it != params.end(); )
- {
- postString += it->first + "=" + it->second;
- it++;
- if (it != params.end())
- {
- postString += "&";
- }
- }
- LOG_INFO("postString:" << postString.c_str());
- CHttpClient m_httpClient;
- int ret = m_httpClient.Posts(m_client.m_pingtai_url + url, postString, response, NULL, m_client.m_is_http_proxy, m_client.m_http_proxy_ip, m_client.m_http_proxy_port);
- LOG_INFO("response:" << response.c_str());
- if (ret == 0)
- {
- //ret为0表示没有出错
- return true;
- }
- return false;
- }
|