DragonNest/Server/DNCashServer/DNBillingConnectionJP.cpp

389 lines
18 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DNBillingConnectionJP.h"
#include "DNConnection.h"
#include "DNUserRepository.h"
#include "DNExtManager.h"
#include "DNSQLMembership.h"
#include "DNSQLWorld.h"
#include "Log.h"
extern TCashConfig g_Config;
#if defined(_JP)
CDNBillingConnectionJP *g_pBillingConnection = NULL;
CDNBillingConnectionJP::CDNBillingConnectionJP(void)
{
int nRet = -1;
std::wstring wStr = g_Config.wszServiceType;
ToLowerW(wStr);
nRet = HanBillingInit("J_DNEST");
if (nRet == HAN_BILLING_OK){
g_Log.Log(LogType::_FILEDBLOG, L"HanBillingInit OK!!\r\n");
}
else{
g_Log.Log(LogType::_FILEDBLOG, L"HanBillingInit Fail (Error:%d, %d)!!\r\n", nRet, ConvertResult(nRet));
}
}
CDNBillingConnectionJP::~CDNBillingConnectionJP(void)
{
}
int CDNBillingConnectionJP::OnBalanceInquiry(CDNUserRepository *pUser)
{
int nCashBalance = 0;
int nRet = SendBillingBalanceInquire(pUser->GetAccountName(), nCashBalance);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[OnBalanceInquiry] Ret:%d\r\n", nRet);
return ERROR_GENERIC_INVALIDREQUEST; // <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü;
}
pUser->SendBalanceInquiry(nRet, nCashBalance);
return ERROR_NONE;
}
int CDNBillingConnectionJP::OnBuy(CDNUserRepository *pUser)
{
CDNSQLMembership *pMembershipDB = pUser->GetMembershipDB();
if (!pMembershipDB) return ERROR_GENERIC_INVALIDREQUEST;
CDNSQLWorld *pWorldDB = pUser->GetWorldDB();
if (!pWorldDB) return ERROR_GENERIC_INVALIDREQUEST;
int nRet = SendBillingBuy(pUser, pMembershipDB, pWorldDB);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[OnBuy] Ret:%d\r\n", nRet);
nRet = ERROR_GENERIC_INVALIDREQUEST; // <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü;
}
pUser->SendBuyGift(nRet);
return ERROR_NONE;
}
int CDNBillingConnectionJP::OnPackageBuy(CDNUserRepository *pUser)
{
CDNSQLMembership *pMembershipDB = pUser->GetMembershipDB();
if (!pMembershipDB) return ERROR_GENERIC_INVALIDREQUEST;
CDNSQLWorld *pWorldDB = pUser->GetWorldDB();
if (!pWorldDB) return ERROR_GENERIC_INVALIDREQUEST;
int nRet = SendBillingPackageBuy(pUser, pMembershipDB, pWorldDB);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[OnPackageBuy] Ret:%d\r\n", nRet);
nRet = ERROR_GENERIC_INVALIDREQUEST; // <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü;
}
pUser->SendBuyGift(nRet);
return ERROR_NONE;
}
int CDNBillingConnectionJP::OnGift(CDNUserRepository *pUser)
{
CDNSQLMembership *pMembershipDB = pUser->GetMembershipDB();
if (!pMembershipDB) return ERROR_GENERIC_INVALIDREQUEST;
CDNSQLWorld *pWorldDB = pUser->GetWorldDB();
if (!pWorldDB) return ERROR_GENERIC_INVALIDREQUEST;
int nRet = SendBillingGift(pUser, pMembershipDB, pWorldDB);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[OnGift] Ret:%d\r\n", nRet);
nRet = ERROR_GENERIC_INVALIDREQUEST; // <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü;
}
pUser->SendBuyGift(nRet);
return ERROR_NONE;
}
int CDNBillingConnectionJP::OnPackageGift(CDNUserRepository *pUser)
{
CDNSQLMembership *pMembershipDB = pUser->GetMembershipDB();
if (!pMembershipDB) return ERROR_GENERIC_INVALIDREQUEST;
CDNSQLWorld *pWorldDB = pUser->GetWorldDB();
if (!pWorldDB) return ERROR_GENERIC_INVALIDREQUEST;
int nRet = SendBillingPackageGift(pUser, pMembershipDB, pWorldDB);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[OnPackageGift] Ret:%d\r\n", nRet);
nRet = ERROR_GENERIC_INVALIDREQUEST; // <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü;
}
pUser->SendBuyGift(nRet);
return ERROR_NONE;
}
int CDNBillingConnectionJP::OnCoupon(CDNUserRepository *pUser)
{
return ERROR_GENERIC_INVALIDREQUEST;
}
int CDNBillingConnectionJP::ConvertResult(int nBillingResult)
{
switch (nBillingResult)
{
case HAN_BILLING_OK: return ERROR_NONE; // return ERROR_HAN_BILLING_OK;
// +) fault from Billing Server
case HAN_BILLING_GAMECODE_NOTEXIST: return ERROR_HAN_BILLING_GAMECODE_NOTEXIST; // GAMEID <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_USERNO_NOTEXIST: return ERROR_HAN_BILLING_USERNO_NOTEXIST; // User Number <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_CMD_NOTEXIST: return ERROR_HAN_BILLING_CMD_NOTEXIST; // <20><><EFBFBD><EFBFBD> Ŀ<>ǵ尡 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_ORDNO_NOTEXIST: return ERROR_HAN_BILLING_ORDNO_NOTEXIST; // <20>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_SCD_NOTEXIST: return ERROR_HAN_BILLING_SCD_NOTEXIST; // <20><>ǰ<EFBFBD>ڵ尡 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_SNAME_NOTEXIST: return ERROR_HAN_BILLING_SNAME_NOTEXIST; // <20><>ǰ <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_QTY_NOTEXIST: return ERROR_HAN_BILLING_QTY_NOTEXIST; // <20><>ǰ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_AMT_NOTEXIST: return ERROR_HAN_BILLING_AMT_NOTEXIST; // <20><><EFBFBD>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_IP_NOTEXIST: return ERROR_HAN_BILLING_IP_NOTEXIST; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ IP <20>ּҰ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_USERNO_INVALID: return ERROR_HAN_BILLING_USERNO_INVALID; // User Number<65><72> <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
case HAN_BILLING_BUY_FAIL: return ERROR_HAN_BILLING_BUY_FAIL; // <20><> <20>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD>δ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.
case HAN_BILLING_GAMECODE_INVALID: return ERROR_HAN_BILLING_GAMECODE_INVALID; // <20><><EFBFBD>Ӿ<EFBFBD><D3BE>̵<EFBFBD><CCB5><EFBFBD> <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
case HAN_BILLING_BALANCE_INSUFFICIENT: return ERROR_HAN_BILLING_BALANCE_INSUFFICIENT; // <20>ܾ<EFBFBD><DCBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
case HAN_BILLING_CMD_UNEXPECTED: return ERROR_HAN_BILLING_CMD_UNEXPECTED; // <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> Ŀ<>ǵ带 <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_DB_CONNECTFAIL: return ERROR_HAN_BILLING_DB_CONNECTFAIL; // <20><><EFBFBD><EFBFBD> DB <20><><EFBFBD>ӿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_SVR_UNEXPECTED: return ERROR_HAN_BILLING_SVR_UNEXPECTED; // <20><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
// -) fault from function / this system
case HAN_BILLING_ARGUMENT_INVALID: return ERROR_HAN_BILLING_ARGUMENT_INVALID; // <20><><EFBFBD>޵<EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_ALREADY: return ERROR_HAN_BILLING_INITED_ALREADY; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_NOT: return ERROR_HAN_BILLING_INITED_NOT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_FAIL: return ERROR_HAN_BILLING_INITED_FAIL; // <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_FAILBALANCE: return ERROR_HAN_BILLING_INITED_FAILBALANCE; // <20>ܾ<EFBFBD><DCBE><EFBFBD>ȸĿ<C8B8>ؼ<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_FAILBUY: return ERROR_HAN_BILLING_INITED_FAILBUY; // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD>ؼ<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_FAILCONFIRM: return ERROR_HAN_BILLING_INITED_FAILCONFIRM; // <20><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE>Ŀ<EFBFBD>ؼ<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETCONN_FAILBALANCE: return ERROR_HAN_BILLING_GETCONN_FAILBALANCE; // <20>ܾ<EFBFBD><DCBE><EFBFBD>ȸ Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETCONN_FAILBUY: return ERROR_HAN_BILLING_GETCONN_FAILBUY; // <20><><EFBFBD><EFBFBD> Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETCONN_FAILCONFIRM: return ERROR_HAN_BILLING_GETCONN_FAILCONFIRM; // <20><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE> Ŀ<>ؼ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_OPENREQ_FAIL: return ERROR_HAN_BILLING_OPENREQ_FAIL; // Request <20><><EFBFBD>¿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_SENDREQ_FAIL: return ERROR_HAN_BILLING_SENDREQ_FAIL; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Send <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_RECVRESULT_FAIL: return ERROR_HAN_BILLING_RECVRESULT_FAIL; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Recv <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_RECVRESULT_INVALID: return ERROR_HAN_BILLING_RECVRESULT_INVALID; // <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>޵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
case HAN_BILLING_INITED_FAILBILLNO: return ERROR_HAN_BILLING_INITED_FAILBILLNO;
case HAN_BILLING_GETCONN_FAILBILLNO: return ERROR_HAN_BILLING_GETCONN_FAILBILLNO;
case HAN_BILLING_INITED_FAILBILLNOACC: return ERROR_HAN_BILLING_INITED_FAILBILLNOACC;
case HAN_BILLING_GETCONN_FAILBILLNOACC: return ERROR_HAN_BILLING_GETCONN_FAILBILLNOACC;
case HAN_BILLING_DLL_UNEXPECTED: return ERROR_HAN_BILLING_DLL_UNEXPECTED; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
}
return ERROR_DB;
}
int CDNBillingConnectionJP::ConvertGetBillNoResult(int nBillingResult)
{
switch (nBillingResult)
{
// 4.2 HanBillingGetBillNoAcc() <20><><EFBFBD><EFBFBD> Return Value
// +) fault from TGS
case HAN_BILLING_GETBILLNO_NEED_PARAM: return ERROR_HAN_BILLING_GETBILLNO_NEED_PARAM; // <20>ʼ<EFBFBD> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETBILLNO_IP_MISMATCH: return ERROR_HAN_BILLING_GETBILLNO_IP_MISMATCH; // IP<49><50> Ʋ<><C6B2><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETBILLNO_USERID_MISMATCH: return ERROR_HAN_BILLING_GETBILLNO_USERID_MISMATCH; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> Ʋ<><C6B2><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETBILLNO_DB_CONN_ERROR: return ERROR_HAN_BILLING_GETBILLNO_DB_CONN_ERROR; // DB <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETBILLNO_USER_NOTEXIST: return ERROR_HAN_BILLING_GETBILLNO_USER_NOTEXIST; // <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
case HAN_BILLING_GETBILLNO_COOKIE_ERROR: return ERROR_HAN_BILLING_GETBILLNO_COOKIE_ERROR; // cookie <20><><EFBFBD><EFBFBD>
case HAN_BILLING_GETBILLNO_COOKIE_IS_EMPTY: return ERROR_HAN_BILLING_GETBILLNO_COOKIE_IS_EMPTY; // cookie<69><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
case HAN_BILLING_GETBILLNO_COOKIE_TIMEOUT: return ERROR_HAN_BILLING_GETBILLNO_COOKIE_TIMEOUT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> cookie<69>Դϴ<D4B4>.
}
return ERROR_DB;
}
int CDNBillingConnectionJP::SendBillingBalanceInquire(char *pAccountName, int &nCashBalance)
{
char szBillingNo[MAX_BILLNO_LEN] = { 0, }, szRetMsg[128] = { 0, };
int nBillingRet = HanBillingGetBillNoAcc(pAccountName, szBillingNo, szRetMsg, 128);
if (nBillingRet != HAN_BILLING_OK)
return ConvertGetBillNoResult(nBillingRet);
HANBILL_BALANCEINFO BalanceInfo = { 0, };
nBillingRet = HanBillingBalanceInquire(pAccountName, szBillingNo, szRetMsg, 128, &BalanceInfo);
if (nBillingRet != HAN_BILLING_OK)
g_Log.Log(LogType::_ERROR, L"[CASH_BALANCEINQUIRY] AccountName:%S Ret:%S nBillingRet:%d\r\n", pAccountName, szRetMsg, nBillingRet);
nCashBalance = BalanceInfo.nTotalBalance;
return ConvertResult(nBillingRet);
}
int CDNBillingConnectionJP::SendBillingBuy(CDNUserRepository *pUser, CDNSQLMembership *pMembershipDB, CDNSQLWorld *pWorldDB)
{
char szBillingNo[MAX_BILLNO_LEN] = { 0, }, szRetMsg[128] = { 0, };
int nBillingRet = HanBillingGetBillNoAcc(pUser->GetAccountName(), szBillingNo, szRetMsg, 128);
if (nBillingRet != HAN_BILLING_OK)
return ConvertGetBillNoResult(nBillingRet);
HANBILL_BUYINFO BuyInfo = {0, };
char szOrderNo[MAX_CODELEN] = {0, };
int nRet = ERROR_DB;
TCashCommodityData CashData;
for (int i = 0; i < pUser->m_cProductCount; i++){ // <20><>ü<EFBFBD><C3BC> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>
CDNUserRepository::TBuyItem *pBuyItem = pUser->GetBuyItem(i);
if (!pBuyItem)
return ERROR_ITEM_NOTFOUND;
memset(&CashData, 0, sizeof(TCashCommodityData));
bool bRet = g_pExtManager->GetCashCommodityData(pBuyItem->BuyItem.nItemSN, CashData);
if (!bRet)
return ERROR_ITEM_NOTFOUND;
nRet = pUser->AddPurchaseOrderByCash(i);
if (nRet != ERROR_NONE)
return nRet;
sprintf_s(szOrderNo, "%020I64d", pUser->GetPurchaseOrderID());
memset(&BuyInfo, 0, sizeof(HANBILL_BUYINFO));
nBillingRet = HanBillingBuy(pUser->GetAccountName(), szBillingNo, szRetMsg, 128, CashData.strJPSN.c_str(), CashData.strName.c_str(), 1, CashData.nPrice, pUser->m_szIp, szOrderNo, &BuyInfo);
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
if (nBillingRet == HAN_BILLING_OK){
cOrderCode = DBDNMembership::OrderStatusCode::Success;
pBuyItem->BuyItem.bFail = false;
}
else{ // <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>fail
pBuyItem->BuyItem.bFail = true;
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_BUY] AccountName:%S Ret:%S\r\n", pUser->GetAccountName(), szRetMsg);
}
nRet = pMembershipDB->QuerySetPurchaseOrderResult(pUser->GetPurchaseOrderID(), cOrderCode, BuyInfo.szPaymentCode, nBillingRet, CashData.nReserve, pUser->m_nUsedPaidCash);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_BUY] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d NHN:%S)\r\n", nBillingRet, pUser->GetPurchaseOrderID(), BuyInfo.szPaymentCode);
return nRet;
}
if (nBillingRet == HAN_BILLING_OK){
nRet = pUser->CashItemDBProcess(pUser->GetWorldID(), pUser->GetAccountDBID(), pUser->GetCharacterDBID(), pUser->GetMapID(), pUser->GetChannelID(), pUser->GetPaymentRules(),
pBuyItem->BuyItem, CashData.nPrice, pUser->GetPurchaseOrderID(), DBDNWorldDef::AddMaterializedItem::CashBuy);
if (nRet != ERROR_NONE){
pMembershipDB->QueryModGiveFailFlag(pUser->GetPurchaseOrderID(), pBuyItem->BuyItem.nItemSN, pBuyItem->BuyItem.CashItem.nItemID, true);
}
}
else
nRet = ConvertResult(nBillingRet);
}
return nRet;
}
int CDNBillingConnectionJP::SendBillingPackageBuy(CDNUserRepository *pUser, CDNSQLMembership *pMembershipDB, CDNSQLWorld *pWorldDB)
{
char szBillingNo[MAX_BILLNO_LEN] = { 0, }, szRetMsg[128] = { 0, };
int nBillingRet = HanBillingGetBillNoAcc(pUser->GetAccountName(), szBillingNo, szRetMsg, 128);
if (nBillingRet != HAN_BILLING_OK)
return ConvertGetBillNoResult(nBillingRet);
HANBILL_BUYINFO BuyInfo = {0, };
char szOrderNo[MAX_CODELEN] = {0, };
sprintf_s(szOrderNo, "%020I64d", pUser->GetPurchaseOrderID());
memset(&BuyInfo, 0, sizeof(HANBILL_BUYINFO));
std::string strJPSN, strJPName;
bool bCashRet = g_pExtManager->GetCashCommodityJPSN(pUser->GetPackageSN(), strJPSN);
bool bNameRet = g_pExtManager->GetCashCommodityName(pUser->GetPackageSN(), strJPName);
nBillingRet = HanBillingBuy(pUser->GetAccountName(), szBillingNo, szRetMsg, 128, (bCashRet) ? strJPSN.c_str() : NULL, (bCashRet) ? strJPName.c_str() : NULL, 1, pUser->m_nTotalPrice, pUser->m_szIp, szOrderNo, &BuyInfo);
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
if (nBillingRet == HAN_BILLING_OK) cOrderCode = DBDNMembership::OrderStatusCode::Success;
else
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_PACKAGEBUY] AccountName:%S Ret:%S\r\n", pUser->GetAccountName(), szRetMsg);
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(pUser->GetPurchaseOrderID(), cOrderCode, BuyInfo.szPaymentCode, nBillingRet, g_pExtManager->GetCashCommodityReserve(pUser->GetPackageSN()), pUser->m_nUsedPaidCash);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_PACKAGEBUY] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d NHN:%S)\r\n", nBillingRet, pUser->GetPurchaseOrderID(), BuyInfo.szPaymentCode);
return nRet;
}
nRet = ConvertResult(nBillingRet);
if (nRet == ERROR_NONE)
pUser->CalcPackageProcess();
return nRet;
}
int CDNBillingConnectionJP::SendBillingGift(CDNUserRepository *pUser, CDNSQLMembership *pMembershipDB, CDNSQLWorld *pWorldDB)
{
char szBillingNo[MAX_BILLNO_LEN] = { 0, }, szRetMsg[128] = { 0, };
int nBillingRet = HanBillingGetBillNoAcc(pUser->GetAccountName(), szBillingNo, szRetMsg, 128);
if (nBillingRet != HAN_BILLING_OK)
return ConvertGetBillNoResult(nBillingRet);
HANBILL_BUYINFO GiftInfo = {0, };
char szOrderNo[MAX_CODELEN] = {0, };
TCashCommodityData CashData;
for (int i = 0; i < pUser->m_cProductCount; i++){ // <20><>ü<EFBFBD><C3BC> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>
CDNUserRepository::TGiftItem *pGiftItem = pUser->GetGiftItem(i);
if (!pGiftItem)
return ERROR_ITEM_NOTFOUND;
memset(&CashData, 0, sizeof(TCashCommodityData));
bool bRet = g_pExtManager->GetCashCommodityData(pGiftItem->GiftItem.nItemSN, CashData);
if (!bRet)
return ERROR_ITEM_NOTFOUND;
int nRet = pUser->AddPurchaseOrderByCash(i);
if (nRet != ERROR_NONE)
return nRet;
sprintf_s(szOrderNo, "%020I64d", pUser->GetPurchaseOrderID());
memset(&GiftInfo, 0, sizeof(HANBILL_BUYINFO));
nBillingRet = HanBillingBuy(pUser->GetAccountName(), szBillingNo, szRetMsg, 128, CashData.strJPSN.c_str(), CashData.strName.c_str(), 1, CashData.nPrice, pUser->m_szIp, szOrderNo, &GiftInfo);
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
if (nBillingRet == HAN_BILLING_OK){
cOrderCode = DBDNMembership::OrderStatusCode::Success;
pGiftItem->GiftItem.bFail = false;
}
else{ // <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>fail
pGiftItem->GiftItem.bFail = true;
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_GIFT] AccountName:%S Ret:%S\r\n", pUser->GetAccountName(), szRetMsg);
}
nRet = pMembershipDB->QuerySetPurchaseOrderResult(pUser->GetPurchaseOrderID(), cOrderCode, GiftInfo.szPaymentCode, nBillingRet, CashData.nReserve, pUser->m_nUsedPaidCash);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_GIFT] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d NHN:%S)\r\n", nBillingRet, pUser->GetPurchaseOrderID(), GiftInfo.szPaymentCode);
return nRet;
}
}
return ConvertResult(nBillingRet);
}
int CDNBillingConnectionJP::SendBillingPackageGift(CDNUserRepository *pUser, CDNSQLMembership *pMembershipDB, CDNSQLWorld *pWorldDB)
{
char szBillingNo[MAX_BILLNO_LEN] = { 0, }, szRetMsg[128] = { 0, };
int nBillingRet = HanBillingGetBillNoAcc(pUser->GetAccountName(), szBillingNo, szRetMsg, 128);
if (nBillingRet != HAN_BILLING_OK)
return ConvertGetBillNoResult(nBillingRet);
HANBILL_BUYINFO GiftInfo = {0, };
char szOrderNo[MAX_CODELEN] = {0, };
sprintf_s(szOrderNo, "%020I64d", pUser->GetPurchaseOrderID());
memset(&GiftInfo, 0, sizeof(HANBILL_BUYINFO));
std::string strJPSN, strJPName;
bool bCashRet = g_pExtManager->GetCashCommodityJPSN(pUser->GetPackageSN(), strJPSN);
bool bNameRet = g_pExtManager->GetCashCommodityName(pUser->GetPackageSN(), strJPName);
nBillingRet = HanBillingBuy(pUser->GetAccountName(), szBillingNo, szRetMsg, 128, (bCashRet) ? strJPSN.c_str() : NULL, (bNameRet) ? strJPName.c_str() : NULL, 1, pUser->m_nTotalPrice, pUser->m_szIp, szOrderNo, &GiftInfo);
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
if (nBillingRet == HAN_BILLING_OK) cOrderCode = DBDNMembership::OrderStatusCode::Success;
else
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_PACKAGEGIFT] AccountName:%S Ret:%S\r\n", pUser->GetAccountName(), szRetMsg);
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(pUser->GetPurchaseOrderID(), cOrderCode, GiftInfo.szPaymentCode, nBillingRet, g_pExtManager->GetCashCommodityReserve(pUser->GetPackageSN()), pUser->m_nUsedPaidCash);
if (nRet != ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUser, L"[CASH_PACKAGEGIFT] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d NHN:%S)\r\n", nBillingRet, pUser->GetPurchaseOrderID(), GiftInfo.szPaymentCode);
return nRet;
}
return ConvertResult(nBillingRet);
}
#endif // #if defined(_JP)