c1_lua/lua/app/common/sdk_pay_ios_manager.lua
2023-06-06 15:50:33 +08:00

395 lines
12 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local SDKPayiOSManager = {}
function SDKPayiOSManager:init()
self.iosPayInfos = LocalData:getIosPayInfo()
self.iosOrders = LocalData:getIosOrders()
end
function SDKPayiOSManager:needInit()
return true
end
function SDKPayiOSManager:initPay(callback)
self.products = {}
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr.initCallback = function (isSuccess, products, errorStr)
if isSuccess then
-- GFunc.showToast("初始化成功")
if callback then
callback()
end
BIReport:postPayInitSuccess()
else
Logger.log(errorStr)
BIReport:postPayInitFailed(errorStr)
end
end
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr.buyCallback = function(isSuccess, result, errorStr)
if isSuccess then
-- if self.handleUncompleteIosOrder then
-- local payParams = self.iosPayInfos[result.transactionID]
-- local needConsumePurchase = true
-- if payParams ~= nil and payParams.order then
-- PayManager:requestRewards(result.receipt, payParams.order)
-- needConsumePurchase = false
-- end
-- if needConsumePurchase then
-- self:delIosPayInfo(result.transactionID)
-- self:delIosOrder(result.definition.id)
-- self:consumePurchase(result.definition.id)
-- BIReport:postPayFailed(result.definition.id, result.transactionID, nil, "error order")
-- end
-- else
-- -- 回调时机太早的话,就先保存起来,等后续补单的时候一起补
-- local order = self.iosOrders[result.definition.id]
-- if order then
-- self:saveIosPayInfo(result.transactionID, result.receipt, order, result.definition.id)
-- self:delIosOrder(result.definition.id)
-- else
-- -- 之前没有记录只能算掉单了
-- self:delIosPayInfo(result.transactionID)
-- self:delIosOrder(result.definition.id)
-- self:consumePurchase(result.definition.id)
-- BIReport:postPayFailed(result.definition.id, result.transactionID, nil, "not have order")
-- end
-- end
else
-- if errorStr and errorStr ~= "" then
-- BIReport:postPayFailed(result.definition.id, result.transactionID, nil, errorStr)
-- else
-- BIReport:postPayFailed(result.definition.id, result.transactionID, nil, "1")
-- end
end
end
local rechargeCfg = ConfigManager:getConfig("recharge")
local products = {}
for i,v in ipairs(rechargeCfg) do
table.insert(products, {productId = v.payId, type = CS.UnityEngine.Purchasing.ProductType.Consumable})
end
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr:Init(products)
end
function SDKPayiOSManager:queryProducePrice()
if self.products and #self.products > 0 then
return self.products
end
local rechargeCfg = ConfigManager:getConfig("recharge")
self.products = {}
for _, v in ipairs(rechargeCfg) do
local price = CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr:GetLocalizedPrice(v.payId)
if price and price ~= "" then
Logger.log("product = %s, price = %s", v.payId, price)
table.insert(self.products, {sku = v.payId, price = price})
end
end
return self.products
end
function SDKPayiOSManager:queryProducts()
end
-- 处理未完成的订单
function SDKPayiOSManager:doUncompleteOrder(callback, productId)
self.handleUncompleteIosOrder = true
local orders = self.iosPayInfos
if orders == nil then
return callback and callback()
end
local uncompleteList = {}
for _, v in pairs(orders) do
table.insert(uncompleteList, v)
end
if #uncompleteList <= 0 then
return callback and callback()
end
local index = 1
local function handleOrder(uncompleteOrder)
if uncompleteOrder == nil then
return callback and callback()
end
-- 去服务器验证
if uncompleteOrder.order then
PayManager:requestRewards(uncompleteOrder.receipt, uncompleteOrder.order)
else
SDKManager:delIosPayInfo(uncompleteOrder.transactionID)
SDKManager:delIosOrder(uncompleteOrder.productId)
self:consumePurchase(uncompleteOrder.productId, function()
index = index + 1
handleOrder(uncompleteList[index])
end)
end
end
handleOrder(uncompleteList[index])
end
-- 查询未完成的订单
function SDKPayiOSManager:queryUncompleteOrder(callback)
end
-- 订阅到期查询订阅状态
function SDKPayiOSManager:querySubscribeInfo()
end
function SDKPayiOSManager:gotProduct()
if self.products and #self.products > 0 then
return true
end
return false
end
-- sdk接口 得到商品的price
function SDKPayiOSManager:getProductPrice(skuId)
if self.products and #self.products > 0 then
for _, data in ipairs(self.products) do
if data.sku == skuId then
return data.price
end
end
end
return nil
end
-- sdk接口 得到特定商品的priceAmountMicros
function SDKPayiOSManager:getProductPriceAmountMicros(skuId)
if self.products and #self.products > 0 then
for _, data in ipairs(self.products) do
if data.sku == skuId then
return data.priceAmountMicros
end
end
end
return nil
end
-- sdk接口 得到特定商品的currency_code
function SDKPayiOSManager:getPriceCurrencyCode(skuId)
if self.products and #self.products > 0 then
for _, data in ipairs(self.products) do
if data.sku == skuId then
return data.priceCurrencyCode
end
end
end
return nil
end
function SDKPayiOSManager:getSDKPayType()
if Platform:getIsPublishChannel() then
return SDKManager.PAY_TYPE.IOS
else
return SDKManager.PAY_TYPE.NONE
end
end
-- 获取支付方式,目前只有google支付
function SDKPayiOSManager:getIsSupportSDKPay()
return true
end
function SDKPayiOSManager:getIsGoogleStoreConnected()
return CS.BF.BFMain.Instance.SDKMgr.BFPaySDKMgr.ConnectStoreSucc
end
function SDKPayiOSManager:_getIsIosInitialized()
return CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr:IsInitialized()
end
-- 检查是否可以支付
function SDKPayiOSManager:checkPay(productId, callback)
if self:_getIsIosInitialized() then
SDKManager:doUncompleteOrder(function(code)
-- 先处理未完成的订单
if code == 0 then
callback(0)
elseif code == 1 then
-- 指定的productId存在支付状态中的订单
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.SETTING_DESC_23),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
elseif code == 2 then
-- 指定的productId存在未完成的订单消耗失败的情况
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.SETTING_DESC_23),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
else
-- 存在未完成的订单消耗失败的情况但是因为不是当前productId所以允许继续支付
callback(0)
end
end)
end
end
-- 支付
function SDKPayiOSManager:pay(productId, orderId, rechargeId, giftType, giftId, callback)
self:doIosPay(productId, orderId, rechargeId, giftType, giftId, callback)
end
-- sdk将已完成的订单消耗掉
function SDKPayiOSManager:consumePurchase(token, callback)
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr:ConsumePurchase(token)
if callback then
callback(0)
end
end
function SDKPayiOSManager:doIosPay(productId, orderId, rechargeId, giftType, giftId, callback)
self.blockTouch = true
UIManager:showWaitNet()
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr.buyCallback = function(isSuccess, result, errorStr)
if self.blockTouch then
self.blockTouch = false
UIManager:hideWaitNet()
end
if isSuccess then
Logger.log("ios pay availableToPurchase = %s", result.availableToPurchase)
Logger.log("ios pay transactionID = %s", result.transactionID)
Logger.log("ios pay hasReceipt = %s", result.hasReceipt)
Logger.log("ios pay receipt = %s", result.receipt)
self:saveIosPayInfo(result.transactionID, result.receipt, orderId, productId)
if callback then
callback(result.receipt, orderId, result.transactionID)
end
else
if errorStr and errorStr ~= "" then
BIReport:postPayFailed(productId, orderId, rechargeId, errorStr, giftType, giftId)
else
BIReport:postPayFailed(productId, orderId, rechargeId, "1", giftType, giftId)
end
end
self:delIosOrder(productId)
end
self:saveIosOrder(productId, orderId)
CS.BF.BFMain.Instance.SDKMgr.IosPaySDKMgr:Buy(productId, orderId)
end
function SDKPayiOSManager:doUncompletePay(callback)
-- 每次游戏的过程中只处理一次
if self.alreadyFinishUncompletePay then
return
end
if not DataManager:getLoginSuccess() then
return
end
-- if NetManager:getIsBusy() then
-- return
-- end
if self:_getIsIosInitialized() then
self.alreadyFinishUncompletePay = true
SDKManager:doUncompleteOrder()
end
end
function SDKPayiOSManager:checkPurchaseOrder(result, productId, callback)
end
function SDKPayiOSManager:saveIosPayInfo(transactionID, receipt, order, productId)
self.iosPayInfos[transactionID] = {
order = order,
receipt = receipt,
transactionID = transactionID,
productId = productId
}
LocalData:setIosPayInfo(self.iosPayInfos)
LocalData:save()
end
function SDKPayiOSManager:saveIosOrder(productId, order)
self.iosOrders[productId] = order
LocalData:setIosOrders(self.iosOrders)
LocalData:save()
end
function SDKPayiOSManager:delIosOrder(productId)
self.iosOrders[productId] = nil
LocalData:setIosOrders(self.iosOrders)
LocalData:save()
end
-- 第一步向服务器验证订单号
-- function SDKPayiOSManager:checkPurchaseIOSOrder(result, productId, callback)
-- Logger.printTable(result)
-- Logger.log(productId)
-- local orderId = DataManager.PlayerData:getIosOrderId(result.transactionID)
-- if not orderId then
-- return
-- end
-- if DataManager.PlayerData:isInPermanentOrders(result.transactionID) then
-- return
-- end
-- local params = {}
-- -- params.receipt.packageName = Platform:getIdentifier()
-- -- params.receipt.productId = productId
-- params.receipt = result.receipt
-- params.transaction_id = result.transactionID
-- CS.BF.BFMain.Instance.ParseClientMgr:SetLuaCheckPurchaseIOSOrderCallback(function (msg)
-- local serverResult = json.decode(msg)
-- local _result = serverResult.result
-- Logger.printTable(serverResult)
-- -- 后端返回latest_receipt_info
-- if _result and _result.data then
-- if _result.code == 0 then
-- SDKPayiOSManager:saveOrderId(result.transactionID, params)
-- -- 第二次验证
-- SDKPayiOSManager:checkPurchaseConsume(result, params, callback)
-- elseif _result.code == 137 then
-- -- SDKPayiOSManager:delOrderId(_result.data.orderId)
-- -- 消耗订单
-- -- SDKPayiOSManager:consumePurchase(_result.data.purchaseToken)
-- else
-- -- @TODO 重试
-- end
-- end
-- end)
-- CS.BF.BFMain.Instance.ParseClientMgr:CheckPurchaseIOSOrder(json.encode(params))
-- end
-- 第二步向服务器申请消耗订单
-- function SDKPayiOSManager:checkPurchaseConsume(result, params, callback, callback1)
-- if not result or not params then
-- return
-- end
-- local orderId = DataManager.PlayerData:getIosOrderId(result.transactionID)
-- if not orderId then
-- return
-- end
-- CS.BF.BFMain.Instance.ParseClientMgr:SetLuaCheckPurchaseIOSConsumeCallback(function (msg)
-- local serverResult = json.decode(msg)
-- local _result = serverResult.result
-- Logger.printTable(serverResult)
-- if _result and _result.data then
-- if _result.code == 0 then
-- -- 处理本地存储订单
-- SDKPayiOSManager:delIosOrderId(result.transactionID)
-- SDKPayiOSManager:delOrderId(result.transactionID)
-- SDKPayiOSManager:savePermanentOrderId(result.transactionID)
-- if callback then
-- callback(result.receipt, orderId, result.transactionID)
-- else
-- -- SDKPayiOSManager:consumePurchase(_result.data.purchaseToken)
-- PayManager:requestRewards(_result.data.purchaseToken, orderId)
-- if callback1 then
-- callback1()
-- end
-- end
-- elseif _result.code == 137 then
-- else
-- -- @TODO 重试
-- end
-- end
-- end)
-- CS.BF.BFMain.Instance.ParseClientMgr:CheckPurchaseIOSConsume(json.encode(params))
-- end
-- 支付相关接口 ********************************************************************** 结束
return SDKPayiOSManager