135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Lua
		
	
--[[
 | 
						||
 * @ClassName PayManager
 | 
						||
 * @Description 支付管理系统
 | 
						||
 * @Date 2019/6/25 20:14
 | 
						||
 * @Author MagicianJoker, fengliudianshao@outlook.com
 | 
						||
 * @Copyright  Copyright (c) 2019, MagicianJoker
 | 
						||
--]]
 | 
						||
PayManager = {}
 | 
						||
local this = PayManager
 | 
						||
 | 
						||
--初始化
 | 
						||
function this.Initialize()
 | 
						||
    Game.GlobalEvent:AddEvent(GameEvent.MoneyPay.OnPayResultSuccess, this.onSdkPayResult)
 | 
						||
end
 | 
						||
----- 请求支付
 | 
						||
----- @param context
 | 
						||
---- {
 | 
						||
----   Id,     -- required, 商品ID
 | 
						||
----   BuyNum, -- optional, 购买个数(默认1)
 | 
						||
---- }
 | 
						||
----
 | 
						||
----
 | 
						||
 | 
						||
this.EventTrigger = {}
 | 
						||
function this.onSdkPayResult(id)
 | 
						||
    LogError("收到sdk支付成功回调,商品id = "..id)
 | 
						||
    if this.EventTrigger[id] then
 | 
						||
        this.EventTrigger[id](id)
 | 
						||
        this.EventTrigger[id] = nil
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function this.Pay(id, func)
 | 
						||
    if not func then
 | 
						||
        func = function()end
 | 
						||
    end
 | 
						||
    -- if this.EventTrigger[id] then
 | 
						||
    --     LogError("重复发起购买商品的请求,商品id = "..id..", uid = "..PlayerManager.uid)
 | 
						||
    --     PopupTipPanel.ShowTip("您有一个相同的订单正在处理,请稍后再试")
 | 
						||
    --     return 
 | 
						||
    -- end
 | 
						||
    this.EventTrigger[id] = func
 | 
						||
    LogError("发起购买商品的请求,商品id = "..id)
 | 
						||
    --直购商品
 | 
						||
    local rechargeConfig = ConfigManager.GetConfigData(ConfigName.RechargeCommodityConfig, id)
 | 
						||
    if AppConst.isSDKLogin and rechargeConfig.Price > 0 then
 | 
						||
        PayManager.SdkPay({ Id = id })
 | 
						||
    else
 | 
						||
        NetManager.RequestBuyGiftGoods(id, function(msg)
 | 
						||
            this.onSdkPayResult(id)
 | 
						||
        end)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
 | 
						||
function this.SdkPay(context)
 | 
						||
    local rechargeConfig = ConfigManager.GetConfigData(ConfigName.RechargeCommodityConfig, context.Id)
 | 
						||
    local payData = table.clone(context)
 | 
						||
    payData.Name = GetLanguageStrById(rechargeConfig.Name)
 | 
						||
    payData.Desc = GetLanguageStrById(rechargeConfig.Desc)
 | 
						||
    payData.Price = rechargeConfig.Price
 | 
						||
    payData.Type = rechargeConfig.Type
 | 
						||
 | 
						||
    -- 判断计费点
 | 
						||
    if AppConst.SdkPackageName == "com.tcxazcsb.pass" or AppConst.SdkPackageName == "com.tcxaz.pass" then      -- 海外GP 测试+正式
 | 
						||
        payData.RechargeId = rechargeConfig.RechargeId
 | 
						||
    elseif AppConst.SdkPackageName == "com.jltest.www" then     -- 海外Ios测试
 | 
						||
        payData.RechargeId = rechargeConfig.RechargeId2
 | 
						||
    elseif AppConst.SdkPackageName == "com.tcxhw.project" then  -- 海外Ios正式
 | 
						||
        payData.RechargeId = rechargeConfig.RechargeId3
 | 
						||
    else
 | 
						||
        payData.RechargeId = rechargeConfig.Id
 | 
						||
    end
 | 
						||
    this.RequestPay(payData)
 | 
						||
end
 | 
						||
 | 
						||
function this.RequestPay(context)
 | 
						||
 | 
						||
    local price = MoneyUtil.GetMoney(context.Price)
 | 
						||
 | 
						||
    SDKMgr.onPayCallback = function(payResp)
 | 
						||
        Log("onPayCallback::"..payResp)
 | 
						||
        local str = string.split(payResp, "#")
 | 
						||
        local result = tonumber(str[1])
 | 
						||
        -- local orderId = str[2]
 | 
						||
        if result == SDK_RESULT.SUCCESS then
 | 
						||
 | 
						||
        elseif result == SDK_RESULT.FAILED then
 | 
						||
            
 | 
						||
        else
 | 
						||
            --PopupTipPanel.ShowTip("取消充值" .. result)
 | 
						||
            -- DataCenterManager.CommitPayStatus(
 | 
						||
            --         "IN_GAME_"..context.Type,
 | 
						||
            --         SDKMgr:GetPayOrderID(),
 | 
						||
            --         "INVALID",
 | 
						||
            --         tostring(context.Price)
 | 
						||
            -- )
 | 
						||
        end
 | 
						||
    end
 | 
						||
    local params = SDK.SDKPayArgs.New()
 | 
						||
    params.productId = context.RechargeId
 | 
						||
    params.productName = context.Name or ""
 | 
						||
    params.productDesc = GetLanguageStrById(context.Desc) or ""
 | 
						||
    params.price = price * 100 -- 以分为单位
 | 
						||
    params.ratio = 1
 | 
						||
    params.buyNum = context.BuyNum or 1
 | 
						||
    params.coinNum = BagManager.GetItemCountById(16)
 | 
						||
    -- 服务器相关
 | 
						||
    params.zoneId = PlayerManager.serverInfo.server_id
 | 
						||
    params.serverID = PlayerManager.serverInfo.server_id
 | 
						||
    params.serverName = PlayerManager.serverInfo.name
 | 
						||
    -- 角色相关
 | 
						||
    params.roleID = tostring(PlayerManager.uid).."_"..tostring(context.Id)
 | 
						||
    params.roleName = PlayerManager.nickName
 | 
						||
    params.roleLevel = PlayerManager.level
 | 
						||
    params.vip = tostring(VipManager.GetVipLevel())
 | 
						||
    params.guildID = PlayerManager.familyId
 | 
						||
    -- 其他
 | 
						||
    params.payNotifyUrl = ""
 | 
						||
    params.extension = tostring(context.Id)--string.format("%s_%s_%s", PlayerManager.uid, context.Id, VersionManager:GetVersionInfo("subChannel"))--tostring(context.Id)
 | 
						||
    --string.format("%s_%s_%s_%s_%s_%s",
 | 
						||
            -- AppConst.OpenId,context.Id,context.Price,PlayerManager.uid,
 | 
						||
            -- PlayerManager.serverInfo.server_id,PlayerManager.serverInfo.name)
 | 
						||
    SDKMgr:Pay(params)
 | 
						||
 | 
						||
    -- 
 | 
						||
    ThinkingAnalyticsManager.Track("create_order", {
 | 
						||
        goods_id = context.Id,
 | 
						||
        goods_name = context.Name,
 | 
						||
        order_money_amount = price,
 | 
						||
        Bundle_id = AppConst.SdkPackageName,
 | 
						||
    })
 | 
						||
end
 | 
						||
 | 
						||
return this |