|
@@ -232,6 +232,15 @@ LRESULT CTuikuanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
case WM_MOUSEHOVER:
|
|
case WM_MOUSEHOVER:
|
|
|
lRes = OnMouseMove(uMsg, wParam, lParam, bHandled);
|
|
lRes = OnMouseMove(uMsg, wParam, lParam, bHandled);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case WM_TUIKUAN_STATUS_NEEDPASSWORD:
|
|
|
|
|
+ lRes = OnTuikuanNeedPassword(uMsg, wParam, lParam, bHandled);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case WM_TUIKUAN_STATUS_SUCCESS:
|
|
|
|
|
+ lRes = OnTuikuanSuccess(uMsg, wParam, lParam, bHandled);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case WM_TUIKUAN_STATUS_FAIL:
|
|
|
|
|
+ lRes = OnTuikuanFail(uMsg, wParam, lParam, bHandled);
|
|
|
|
|
+ break;
|
|
|
case WM_TIMER:
|
|
case WM_TIMER:
|
|
|
lRes = OnTimer(uMsg, wParam, lParam, bHandled);
|
|
lRes = OnTimer(uMsg, wParam, lParam, bHandled);
|
|
|
break;
|
|
break;
|
|
@@ -350,9 +359,24 @@ void CTuikuanWnd::UpdateFocus()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+LRESULT CTuikuanWnd::OnTuikuanNeedPassword(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
|
|
+{
|
|
|
|
|
+ wstring path = CSystem::GetProgramDir() + L"\\music\\refund_query.wav";
|
|
|
|
|
+ PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
|
|
|
|
|
+
|
|
|
|
|
+ CLabelUI* pFukuanEdit = static_cast<CLabelUI*>(m_pm.FindControl(_T("tuikuan_paying_status")));
|
|
|
|
|
+ pFukuanEdit->SetText(L"退款结果查询中...");
|
|
|
|
|
+
|
|
|
|
|
+ //需要用户输入密码,开始查询状态
|
|
|
|
|
+ std::thread(&CTuikuanWnd::HandleTuikuanPassword, this).detach();
|
|
|
|
|
+
|
|
|
|
|
+ bHandled = TRUE;
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
LRESULT CTuikuanWnd::OnTuikuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
LRESULT CTuikuanWnd::OnTuikuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
{
|
|
{
|
|
|
- wstring path = CSystem::GetProgramDir() + L"\\music\\pay_success.wav";
|
|
|
|
|
|
|
+ wstring path = CSystem::GetProgramDir() + L"\\music\\refund_success.wav";
|
|
|
PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
|
|
PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
|
|
|
|
|
|
|
|
CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("tuikuan_paying_layout")));
|
|
CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("tuikuan_paying_layout")));
|
|
@@ -386,7 +410,7 @@ LRESULT CTuikuanWnd::OnTuikuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, B
|
|
|
|
|
|
|
|
LRESULT CTuikuanWnd::OnTuikuanFail(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
LRESULT CTuikuanWnd::OnTuikuanFail(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
{
|
|
{
|
|
|
- wstring path = CSystem::GetProgramDir() + L"\\music\\pay_fail.wav";
|
|
|
|
|
|
|
+ wstring path = CSystem::GetProgramDir() + L"\\music\\refund_fail.wav";
|
|
|
PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
|
|
PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
|
|
|
|
|
|
|
|
CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("tuikuan_paying_layout")));
|
|
CVerticalLayoutUI* paying_layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("tuikuan_paying_layout")));
|
|
@@ -482,11 +506,12 @@ void CTuikuanWnd::HandleTuikuan()
|
|
|
//生成随机的order_no
|
|
//生成随机的order_no
|
|
|
|
|
|
|
|
std::map<string, string> params;
|
|
std::map<string, string> params;
|
|
|
- params["out_trade_no"] = CLewaimaiString::UnicodeToUTF8(m_tuikuanma);
|
|
|
|
|
|
|
+ params["third_trade_no"] = CLewaimaiString::UnicodeToUTF8(m_tuikuanma);
|
|
|
|
|
+ params["money"] = CLewaimaiString::UnicodeToUTF8(m_money);
|
|
|
|
|
|
|
|
std::string response;
|
|
std::string response;
|
|
|
|
|
|
|
|
- std::string url = "/shouyin/refund_out_trade_no";
|
|
|
|
|
|
|
+ std::string url = "/saomashoukuan/refundbythirdtradeno";
|
|
|
CZhipuziHttpClient::Request(url.c_str(), params, response);
|
|
CZhipuziHttpClient::Request(url.c_str(), params, response);
|
|
|
|
|
|
|
|
rapidjson::Document document;
|
|
rapidjson::Document document;
|
|
@@ -495,12 +520,26 @@ void CTuikuanWnd::HandleTuikuan()
|
|
|
if (document.HasParseError())
|
|
if (document.HasParseError())
|
|
|
{
|
|
{
|
|
|
LOG_INFO("parse response error!");
|
|
LOG_INFO("parse response error!");
|
|
|
|
|
+
|
|
|
|
|
+ m_tuikuan_status = 4;
|
|
|
|
|
+
|
|
|
|
|
+ m_fail_message = "服务器错误!";
|
|
|
|
|
+
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
|
|
|
+
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
|
|
if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
|
|
|
{
|
|
{
|
|
|
LOG_INFO("json error!");
|
|
LOG_INFO("json error!");
|
|
|
|
|
+
|
|
|
|
|
+ m_tuikuan_status = 4;
|
|
|
|
|
+
|
|
|
|
|
+ m_fail_message = "服务器错误!";
|
|
|
|
|
+
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
|
|
|
+
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -509,6 +548,13 @@ void CTuikuanWnd::HandleTuikuan()
|
|
|
if (errcode != 0)
|
|
if (errcode != 0)
|
|
|
{
|
|
{
|
|
|
LOG_INFO("response failed! message:" << document["errmsg"].GetString());
|
|
LOG_INFO("response failed! message:" << document["errmsg"].GetString());
|
|
|
|
|
+
|
|
|
|
|
+ m_tuikuan_status = 4;
|
|
|
|
|
+
|
|
|
|
|
+ m_fail_message = "服务器错误!";
|
|
|
|
|
+
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
|
|
|
+
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -519,19 +565,94 @@ void CTuikuanWnd::HandleTuikuan()
|
|
|
|
|
|
|
|
if (s_status == "success")
|
|
if (s_status == "success")
|
|
|
{
|
|
{
|
|
|
- //支付成功
|
|
|
|
|
|
|
+ //退款成功
|
|
|
m_tuikuan_status = 3;
|
|
m_tuikuan_status = 3;
|
|
|
|
|
|
|
|
SendMessage(WM_TUIKUAN_STATUS_SUCCESS, 0, 0);
|
|
SendMessage(WM_TUIKUAN_STATUS_SUCCESS, 0, 0);
|
|
|
}
|
|
}
|
|
|
else if (s_status == "fail")
|
|
else if (s_status == "fail")
|
|
|
{
|
|
{
|
|
|
- //支付失败
|
|
|
|
|
|
|
+ //退款失败
|
|
|
m_tuikuan_status = 4;
|
|
m_tuikuan_status = 4;
|
|
|
|
|
|
|
|
- m_fail_message = data["message"].GetString();
|
|
|
|
|
|
|
+ m_fail_message = data["errmsg"].GetString();
|
|
|
|
|
|
|
|
SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
|
}
|
|
}
|
|
|
|
|
+ else if (s_status == "refunding")
|
|
|
|
|
+ {
|
|
|
|
|
+ //退款还在处理中
|
|
|
|
|
+ m_tuikuan_status = 2;
|
|
|
|
|
+
|
|
|
|
|
+ m_out_trade_no = data["out_trade_no"].GetString();
|
|
|
|
|
+
|
|
|
|
|
+ //需要查询支付状态
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_NEEDPASSWORD, 0, 0);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void CTuikuanWnd::HandleTuikuanPassword()
|
|
|
|
|
+{
|
|
|
|
|
+ std::map<string, string> params;
|
|
|
|
|
+
|
|
|
|
|
+ params["out_trade_no"] = m_out_trade_no;
|
|
|
|
|
+
|
|
|
|
|
+ while (m_tuikuan_status == 2)
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string response;
|
|
|
|
|
+
|
|
|
|
|
+ std::string url = "/saomashoukuan/queryorderrefundstatus";
|
|
|
|
|
+ CZhipuziHttpClient::Request(url.c_str(), params, response);
|
|
|
|
|
+
|
|
|
|
|
+ rapidjson::Document document;
|
|
|
|
|
+ document.Parse(response.c_str());
|
|
|
|
|
+
|
|
|
|
|
+ if (document.HasParseError())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOG_INFO("parse response error!");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
|
|
|
|
|
+ {
|
|
|
|
|
+ LOG_INFO("json error!");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ rapidjson::Value& v_errcode = document["errcode"];
|
|
|
|
|
+ int errcode = v_errcode.GetInt();
|
|
|
|
|
+ if (errcode != 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ LOG_INFO("response failed! message:" << document["errmsg"].GetString());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ rapidjson::Value& data = document["data"];
|
|
|
|
|
+ rapidjson::Value& status = data["status"];
|
|
|
|
|
+
|
|
|
|
|
+ std::string s_status = status.GetString();
|
|
|
|
|
+
|
|
|
|
|
+ if (s_status == "success")
|
|
|
|
|
+ {
|
|
|
|
|
+ m_tuikuan_status = 3;
|
|
|
|
|
+
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_SUCCESS, 0, 0);
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (s_status == "fail")
|
|
|
|
|
+ {
|
|
|
|
|
+ //退款失败了
|
|
|
|
|
+ m_tuikuan_status = 4;
|
|
|
|
|
+
|
|
|
|
|
+ m_fail_message = data["errmsg"].GetString();
|
|
|
|
|
+
|
|
|
|
|
+ SendMessage(WM_TUIKUAN_STATUS_FAIL, 0, 0);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (s_status == "refunding")
|
|
|
|
|
+ {
|
|
|
|
|
+ //这个只是表示状态未知
|
|
|
|
|
+ Sleep(1000);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|