Files
wnmj/Classes/Scenes/PayScene.cpp

357 lines
8.7 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "PayScene.h"
#include "PopScene.h"
#include "Utility.h"
#include "Packet.h"
#include "GlobalUserInfo.h"
#include "WebReq.h"
#include "Platform.h"
#include "GlobalJosn.h"
PayScene::PayScene()
{
m_cbCurStep = 0;
m_txtTitle = nullptr;
m_txtNumber = nullptr;
m_txtGameID = nullptr;
m_txtNickName = nullptr;
m_txtCurScore = nullptr;
}
PayScene::~PayScene()
{
}
bool PayScene::init()
{
if (!Node::init())
{
return false;
};
auto rootPanel = CSLoader::createNode("Platform/PayScene.csb");
CC_ASSERT(rootPanel != nullptr);
this->addChild(rootPanel);
m_rootPanel = rootPanel->getChildByName("Image_bg");
CC_ASSERT(m_rootPanel != nullptr);
//<2F><>ȡ<EFBFBD>رհ<D8B1>ť;
auto btnClose = (Button*)m_rootPanel->getChildByName("btnClose");
CC_ASSERT(btnClose != nullptr);
//ע<><D7A2><EFBFBD>رհ<D8B1>ť<EFBFBD>¼<EFBFBD>;
btnClose->addClickEventListener([this](Ref*){
YSAudioEngine::Instance().playBtnClickEffect();
//this->removeFromParent();
this->popScene();
});
//<2F><>һ<EFBFBD><D2BB>;
m_btnPrev = (Button*)m_rootPanel->getChildByName("btn_Prev");
CC_ASSERT(m_btnPrev != nullptr);
//ע<>ᰴť<E1B0B4>¼<EFBFBD>;
m_btnPrev->addClickEventListener(CC_CALLBACK_1(PayScene::onPrevButtonClick, this));
m_btnPrev->setVisible(false);
//<2F><>һ<EFBFBD><D2BB>;
m_btnNext = (Button*)m_rootPanel->getChildByName("btn_Next");
CC_ASSERT(m_btnNext != nullptr);
m_btnNext->setPositionX(m_rootPanel->getContentSize().width/2);
//ע<>ᰴť<E1B0B4>¼<EFBFBD>;
m_btnNext->addClickEventListener(CC_CALLBACK_1(PayScene::onNextButtonClick, this));
//<2F><><EFBFBD><EFBFBD>;
m_txtTitle = (Text*)m_rootPanel->getChildByName("txtTitle");
CC_ASSERT(m_txtTitle != nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_txtNumber = (Text*)m_rootPanel->getChildByName("txtNum");
CC_ASSERT(m_txtNumber != nullptr);
m_txtNumber->setString("");
//<2F><>ϷID;
m_txtGameID = (Text*)m_rootPanel->getChildByName("txtGameID");
CC_ASSERT(m_txtGameID != nullptr);
m_txtGameID->setVisible(false);
//<2F>dz<EFBFBD>;
m_txtNickName = (Text*)m_rootPanel->getChildByName("txtNickName");
CC_ASSERT(m_txtNickName != nullptr);
m_txtNickName->setVisible(false);
//<2F><><EFBFBD><EFBFBD>;
m_txtCurScore = (Text*)m_rootPanel->getChildByName("txtCurScore");
CC_ASSERT(m_txtCurScore != nullptr);
m_txtCurScore->setVisible(false);
for (int j = 0; j < 10; j++)
{
std::string strKey = __String::createWithFormat("btn_num_%d", j)->getCString();
auto btnNum = (Button*)m_rootPanel->getChildByName(strKey);
CC_ASSERT(btnNum != nullptr);
btnNum->addClickEventListener([=](Ref* obj){
YSAudioEngine::Instance().playBtnClickEffect();
std::string strText = m_txtNumber->getString();
strText += StringUtils::format("%d", j);
m_txtNumber->setString(strText);
});
}
// ɾ<><C9BE>
auto btnDel = (Button*)m_rootPanel->getChildByName("btn_del");
CC_ASSERT(btnDel != nullptr);
btnDel->addClickEventListener([this](Ref* obj){
YSAudioEngine::Instance().playBtnClickEffect();
std::string strText = m_txtNumber->getString();
if (strText.length()>0)
{
strText.erase(strText.length() - 1, 1);
m_txtNumber->setString(strText);
}
});
// <20><><EFBFBD><EFBFBD>
auto btnC = (Button*)m_rootPanel->getChildByName("btn_C");
CC_ASSERT(btnC != nullptr);
btnC->addClickEventListener([this](Ref* pSender){
YSAudioEngine::Instance().playBtnClickEffect();
m_txtNumber->setString("");
});
return true;
}
void PayScene::onEnter()
{
Node::onEnter();
}
void PayScene::onEnterTransitionDidFinish()
{
Node::onEnterTransitionDidFinish();
}
void PayScene::onExit()
{
Node::onExit();
}
void PayScene::onPrevButtonClick(Ref*)
{
if (1 == m_cbCurStep)
{
m_cbCurStep--;
// <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>;
m_txtTitle->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID"));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ť;
m_btnPrev->setVisible(false);
m_btnNext->setPositionX(m_rootPanel->getContentSize().width / 2);
m_strScore = m_txtNumber->getString();
m_txtNumber->setString(m_strGameID);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID;
m_txtGameID->setVisible(false);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>;
m_txtNickName->setVisible(false);
// <20><><EFBFBD><EFBFBD>ʣ<EFBFBD>෿<EFBFBD><E0B7BF>;
m_txtCurScore->setVisible(false);
}
}
void PayScene::onNextButtonClick(Ref*)
{
std::string strText = m_txtNumber->getString();
if (0==m_cbCurStep)
{
if (strText.length()<6)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID"));
return ;
}
LoadingScene::Instance().show();
m_strGameID = strText;
std::string strUrl = StringUtils::format("%s?gid=%s", GET_NICKNAME_HTTP_ADDRESS, strText.c_str());
CWebReq::getInstance().sendRequestDocumentUrl(strUrl, CC_CALLBACK_1(PayScene::responsePlayerNickName, this), nullptr);
}
else if (1 == m_cbCurStep)
{
strText = m_txtNumber->getString();
if (strText.length() < 1)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return;
}
if (atoi(strText.c_str())<=0)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"));
return;
}
m_strScore = strText;
LoadingScene::Instance().show();
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
// PAY_TO_PLAYER_HTTP_ADDRESS
std::string strData = StringUtils::format("%d&%s&%d&%d", pGlobalUserData->dwUserID, pGlobalUserData->szAccounts, atoi(m_strGameID.c_str()), atoi(m_strScore.c_str()));
std::string strResult;
encryptData(strData, strResult);
std::string strUrl = StringUtils::format("%s?key=%s", GlobalJosn::getInstance()->m_strPayUrl.c_str(), strResult.c_str());
CWebReq::getInstance().sendRequestDocumentUrl(strUrl, CC_CALLBACK_1(PayScene::responsePayResult, this), nullptr);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>
void PayScene::responsePlayerNickName(rapidjson::Document* pDoc)
{
LoadingScene::Instance().hide();
if (pDoc == nullptr)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return;
}
int bSuccess = CWebReq::getDataValueInt(pDoc, "ret");
if (bSuccess==1)
{
m_cbCurStep++;
// <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>;
m_txtTitle->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
// <20><>ʾ<EFBFBD><CABE>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ť;
m_btnPrev->setVisible(true);
int nStartPosX = m_rootPanel->getContentSize().width / 2;
m_btnPrev->setPositionX(nStartPosX - m_btnPrev->getContentSize().width / 2 - 50);
m_btnNext->setPositionX(nStartPosX + m_btnNext->getContentSize().width / 2 + 50);
m_txtNumber->setString(m_strScore);
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID;
m_txtGameID->setVisible(true);
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>;
m_txtNickName->setVisible(true);
// <20><>ʾʣ<CABE>෿<EFBFBD><E0B7BF>;
m_txtCurScore->setVisible(true);
int nGameID = CWebReq::getDataValueInt(pDoc, "GameID");
std::string strNickName = CWebReq::getDataValueStr(pDoc, "NickName");
int nCurScore = CWebReq::getDataValueInt(pDoc, "CardNum");
m_txtGameID->setString(utility::a_u8("<EFBFBD><EFBFBD>ϷID: ") + StringUtils::format("%d", nGameID));
m_txtNickName->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>: ") + utility::getShortName(strNickName, 16) + StringUtils::format(" %d", nCurScore) + utility::a_u8("<EFBFBD><EFBFBD>"));
//m_txtCurScore->setString(StringUtils::format("%d", nCurScore) + utility::a_u8("<22><>"));
m_txtCurScore->setString("");
}
else
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
void PayScene::responsePayResult(rapidjson::Document* pDoc)
{
LoadingScene::Instance().hide();
if (pDoc == nullptr)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return;
}
int bSuccess = CWebReq::getDataValueInt(pDoc, "ret");
if (bSuccess == 1)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD>ֵ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>"));
m_txtNumber->setString("");
m_strGameID = "";
onPrevButtonClick(nullptr);
int nCurNum = CWebReq::getDataValueInt(pDoc, "CurNum");
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
pGlobalUserData->lUserInsure = nCurNum;
auto dispatcher = Director::getInstance()->getEventDispatcher();
EventCustom event(UPDATE_USER_INSURE);
//<2F>ɷ<EFBFBD><C9B7>¼<EFBFBD><C2BC><EFBFBD>MainScene
dispatcher->dispatchEvent(&event);
}
else
{
std::string strReason = CWebReq::getDataValueStr(pDoc, "Reason");
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD>ֵʧ<EFBFBD><EFBFBD>:") + strReason);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool PayScene::mapEncrypt(const char * pszSourceData, char * pszEncrypData, uint16 wMaxCount)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CC_ASSERT((pszEncrypData != NULL) && (pszSourceData != NULL));
CC_ASSERT(wMaxCount > strlen(pszSourceData));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
size_t nLength = strlen(pszSourceData);
uint8 * pcbEncrypData = (uint8 *)pszEncrypData;
uint8 * pcbSourceData = (uint8 *)pszSourceData;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (uint32 i = 0, n = nLength*sizeof(uint8); i < n; i++)
{
pcbEncrypData[i] = g_SendByteMap[pcbSourceData[i]];
}
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
pszEncrypData[nLength] = 0;
return true;
}
void PayScene::encryptData(std::string stData, std::string& strOut)
{
size_t nLength = stData.size();
char* pBuffer = new char[nLength + 1];
mapEncrypt(stData.c_str(), pBuffer, nLength + 1);
for (int i = 0, n = nLength; i < n; i++)
{
strOut += StringUtils::format("%02X", (uint8)pBuffer[i]);
}
}