2025-06-04 05:02:57 +08:00

260 lines
7.8 KiB
Plaintext

FuncPurchase = class('FuncPurchase')
local gReusableTable = {}
function FuncPurchase.Instance()
if FuncPurchase.instance == nil then
FuncPurchase.instance = FuncPurchase.new()
end
return FuncPurchase.instance
end
function FuncPurchase:ctor()
self.callbacks = {}
end
function FuncPurchase:OnPaySuccess(product_conf, str_result)
if not BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V6) then
local runtimePlatform = ApplicationInfo.GetRunPlatform()
if runtimePlatform == RuntimePlatform.IPhonePlayer then
if self.orderIDOfXDSDKPay ~= nil then
FunctionADBuiltInTyrantdb.Instance():ChargeTo3rd(self.orderIDOfXDSDKPay, product_conf.Rmb)
end
elseif runtimePlatform == RuntimePlatform.Android then
if not BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V13) then
-- "" is orderID
FunctionADBuiltInTyrantdb.Instance():ChargeTo3rd("", product_conf.Rmb)
else
local orderID = FunctionSDK.Instance:GetOrderID()
FunctionADBuiltInTyrantdb.Instance():ChargeTo3rd(orderID, product_conf.Rmb)
end
end
end
local callbackSuccess = self.callbacks[product_conf.id][1]
if callbackSuccess ~= nil then
callbackSuccess(str_result)
self.callbacks[product_conf.id] = nil
end
end
function FuncPurchase:OnPayFail(product_conf, str_result)
local callbackFail = self.callbacks[product_conf.id][2]
if callbackFail ~= nil then
callbackFail(str_result)
self.callbacks[product_conf.id] = nil
end
end
function FuncPurchase:OnPayTimeout(product_conf, str_result)
local callbackTimeout = self.callbacks[product_conf.id][3]
if callbackTimeout ~= nil then
callbackTimeout(str_result)
self.callbacks[product_conf.id] = nil
end
end
function FuncPurchase:OnPayCancel(product_conf, str_result)
local callbackCancel = self.callbacks[product_conf.id][4]
if callbackCancel ~= nil then
callbackCancel(str_result)
self.callbacks[product_conf.id] = nil
end
end
function FuncPurchase:OnPayProductIllegal(product_conf, str_result)
local callbackProductIllegal = self.callbacks[product_conf.id][5]
if callbackProductIllegal ~= nil then
callbackProductIllegal(str_result)
self.callbacks[product_conf.id] = nil
end
end
function FuncPurchase:OnPayPaying(product_conf, str_result)
local callbackPaying = self.callbacks[product_conf.id][6]
if callbackPaying ~= nil then
callbackPaying(str_result)
end
end
function FuncPurchase:Purchase(product_conf_id, callbacks)
local productConf = Table_Deposit[product_conf_id]
if productConf then
local productID = productConf.ProductID
if productID then
local productName = productConf.Desc
local productPrice = productConf.Rmb
local productCount = 1
local roleID = Game.Myself and (Game.Myself.data and Game.Myself.data.id or nil) or nil
if roleID then
local roleInfo = ServiceUserProxy.Instance:GetRoleInfoById(roleID)
local roleName = roleInfo and roleInfo.name or ''
local roleGrade = MyselfProxy.Instance:RoleLevel() or 0
local roleBalance = MyselfProxy.Instance:GetROB() or 0
local server = FunctionLogin.Me():getCurServerData()
local serverID = (server ~= nil) and server.serverid or nil
if serverID then
local currentServerTime = ServerTime.CurServerTime() / 1000
local runtimePlatform = ApplicationInfo.GetRunPlatform()
if runtimePlatform == RuntimePlatform.Android and not BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V13) then
self.callbacks[product_conf_id] = callbacks
TableUtility.TableClear(gReusableTable)
gReusableTable['productGameID'] = tostring(productConf.id)
gReusableTable['serverID'] = tostring(serverID)
gReusableTable['payCallbackCode'] = 1
local ext = json.encode(gReusableTable)
FunctionXDSDK.Ins:Pay(
productName,
productID,
productPrice * 100,
serverID,
tostring(roleID),
"", -- order id
ext,
function (x)
self:OnPaySuccess(productConf, x)
end,
function (x)
self:OnPayFail(productConf, x)
end,
function (x)
self:OnPayCancel(productConf, x)
end
)
else
if FunctionSDK.Instance.CurrentType == FunctionSDK.E_SDKType.Any then
self.callbacks[product_conf_id] = callbacks
if not BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V8) then
FunctionSDK.Instance:ResetPayState()
end
TableUtility.TableClear(gReusableTable)
gReusableTable['productGameID'] = productConf.id
local custom = json.encode(gReusableTable)
FunctionSDK.Instance:AnySDKPay(
productID,
productName,
productPrice,
productCount,
tostring(roleID),
roleName,
roleGrade,
roleBalance,
tostring(serverID),
custom,
function (x)
self:OnPaySuccess(productConf, x)
end,
function (x)
self:OnPayFail(productConf, x)
end,
function (x)
self:OnPayTimeout(productConf, x)
end,
function (x)
self:OnPayCancel(productConf, x)
end,
function (x)
self:OnPayProductIllegal(productConf, x)
end,
function (x)
self:OnPayPaying(productConf, x)
end
)
elseif FunctionSDK.Instance.CurrentType == FunctionSDK.E_SDKType.XD then
self.callbacks[product_conf_id] = callbacks
TableUtility.TableClear(gReusableTable)
gReusableTable['productGameID'] = tostring(productConf.id)
gReusableTable['serverID'] = tostring(serverID)
local ext = json.encode(gReusableTable)
if not BackwardCompatibilityUtil.CompatibilityMode_V17 then
local roleAndServerTime = roleID .. '_' .. currentServerTime
self.orderIDOfXDSDKPay = MyMD5.HashString(roleAndServerTime)
FunctionSDK.Instance:XDSDKPay(
productPrice * 100,
tostring(serverID),
productID,
productName,
tostring(roleID),
ext,
productCount,
self.orderIDOfXDSDKPay,
function (x)
self:OnPaySuccess(productConf, x)
end,
function (x)
self:OnPayFail(productConf, x)
end,
function (x)
self:OnPayTimeout(productConf, x)
end,
function (x)
self:OnPayCancel(productConf, x)
end,
function (x)
self:OnPayProductIllegal(productConf, x)
end
)
elseif not BackwardCompatibilityUtil.CompatibilityMode(BackwardCompatibilityUtil.V6) then
self.orderIDOfXDSDKPay = FunctionSDK.Instance:XDSDKPay(
productPrice * 100,
tostring(serverID),
productID,
productName,
tostring(roleID),
ext,
productCount,
function (x)
self:OnPaySuccess(productConf, x)
end,
function (x)
self:OnPayFail(productConf, x)
end,
function (x)
self:OnPayTimeout(productConf, x)
end,
function (x)
self:OnPayCancel(productConf, x)
end,
function (x)
self:OnPayProductIllegal(productConf, x)
end
)
else
FunctionSDK.Instance:XDSDKPay(
productPrice * 100,
tostring(serverID),
productID,
productName,
tostring(roleID),
ext,
productCount,
function (x)
self:OnPaySuccess(productConf, x)
end,
function (x)
self:OnPayFail(productConf, x)
end,
function (x)
self:OnPayTimeout(productConf, x)
end,
function (x)
self:OnPayCancel(productConf, x)
end,
function (x)
self:OnPayProductIllegal(productConf, x)
end
)
end
end
end
end
end
end
end
end