| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437 |
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local Define = require("platform.Define")
- local Broadcast = require("broadcast.Broadcast")
- local Lang = require("common.Lang")
- Json = Json or require("common.Json")
- local BuyLogic = require("topup.BuyLogic")
- local ApiLogic = require("platform.ApiLogic")
- local BuyExcel = require("excel.buy").buy
- OP_KT = "kt"
- OP_BUY = "buy"
- local TOKEN_DATA = TOKEN_DATA or {}
- TOKEN_DATA[OP_KT] = TOKEN_DATA[OP_KT] or {}
- TOKEN_DATA[OP_BUY] = TOKEN_DATA[OP_BUY] or {}
- local TIME_OUT = 2 * 60 * 60
- local s2aParam = {}
- local function addToken(op,token,account)
- TOKEN_DATA[op][token] = {account,os.time()+TIME_OUT}
- end
- local function rmToken(op,token)
- TOKEN_DATA[op][token] = nil
- end
- function getKTToken(human,type,actType)
- local pf_info = human.pf_info
- if (pf_info == nil) then
- return
- end
- for k in pairs(s2aParam) do
- s2aParam[k] = nil
- end
- -- 构造参数
- local callback_general_param = {}
- callback_general_param.account = human.db.account
- callback_general_param.name = human.db.name
- callback_general_param.type = type
- s2aParam.callback_general_param = callback_general_param
- local api_param = Define.MakeTencentCommonParam(pf_info)
- api_param.tokentype = 1
- if actType == 1 then
- api_param.discountid = Define.YELLOW_DISCOUNT_ID
- elseif actType == 2 then
- api_param.discountid = Define.BLUE_DISCOUNT_ID
- else
- return
- end
-
- s2aParam.callback_general_param.discountid = api_param.discountid
-
- api_param.ts = os.time()
- api_param.version = "v3"
- api_param.zoneid = pf_info.zoneid
- s2aParam.api_param = api_param
-
- s2aParam.api_url = "/v3/pay/get_token"
- s2aParam.api_cbMethod = "OnTokenReturnForOpenVip"
-
- _G.thread_http.send(Define.ADMIN_QQAPI_URL,Json.Encode(s2aParam))
- end
- --开通黄钻蓝钻的token
- function OnTokenReturnForKT(result_json)
- local respond = {}
- respond.ret = 0
- respond.msg = "fail"
- local tencent_ret = result_json.tencent_ret
- local general_param = result_json.callback_general_param
- local token = tencent_ret.token
- if not token then
- respond.msg = "fail:token should not be null"
- return Json.Encode(respond)
- end
- local account = general_param.account
- if (account == nil) then
- respond.msg = "fail:Callback param's name should not be null"
- return Json.Encode(respond)
- end
- local human = ObjHuman.onlineAccount[account]
- if (human == nil) then
- respond.msg = "fail:Human offlined"
- return Json.Encode(respond)
- end
- if (tencent_ret.ret ~= 0) then
- if tencent_ret.ret == 1002 then
- Broadcast.sendErr(human, Lang.QQAPI_ERR_TIMEOUT)
- end
- respond.msg = "fail:OPENKEY EXPIRE"
- return Json.Encode(respond)
- end
-
- local msgRet = Msg.gc.GC_KT_TOKEN
- msgRet.token = tencent_ret.token
- msgRet.discountid = general_param.discountid
- msgRet.type = general_param.type
- Msg.send(msgRet, human.fd)
-
- addToken(OP_KT,token,account)
- respond.ret = 1
- respond.msg = "success"
- return Json.Encode(respond)
- end
- function onDeliverReturnForKT(result_json)
- local respond = {}
- respond.ret = 0
-
- local token = result_json.token
- if token == nil then
- respond.msg = "token is nil"
- return Json.Encode(respond)
- end
- local account = TOKEN_DATA[OP_KT][token][1]
- if account == nil or account == "" then
- respond.msg = "account is nil"
- return Json.Encode(respond)
- end
-
- local human = ObjHuman.onlineAccount[account]
- if (human == nil) then
- respond.msg = "fail:Human offlined"
- return Json.Encode(respond)
- end
-
- local itemInfo = Split(result_json.payitem, "*")
- local item_id
- local price
- local item_cnt
- local item_name
- if itemInfo then
- item_id = tonumber(itemInfo[1])
- price = tonumber(itemInfo[2])
- item_cnt = tonumber(itemInfo[3])
- end
-
- local discountid = result_json.discountid
- if discountid == Define.BLUE_DISCOUNT_ID then
- local grid = Grid.create(item_id,item_cnt)
- BagLogic.addItemByGrid(human,grid,"kt_blue")
- end
-
- rmToken(OP_KT,token)
- --加道具 todo
- respond.ret = 1
- respond.msg = "OK"
- return Json.Encode(respond)
- end
- function getBuyToken(human, buyID, appmode)
- local buyConfig = BuyExcel[buyID]
- if not buyConfig then
- return
- end
- local name = buyConfig.name
- local desc = buyConfig.desc == "" and name or buyConfig.desc
- local price = buyConfig[human.region]
- local cnt = 1
- local icon = buyConfig.icon
- local pf_info = human.pf_info
- if (pf_info == nil) then
- assert(nil)
- return
- end
- for k in pairs(s2aParam) do
- s2aParam[k] = nil
- end
- -- 构造参数
- local callback_general_param = {}
- callback_general_param.account = human.db.account
- callback_general_param.name = human.db.name
- s2aParam.callback_general_param = callback_general_param
-
- local api_param = Define.MakeTencentCommonParam(pf_info)
- api_param.ts = os.time()
- api_param.payitem = string.format("%s*%d*%d", human.db.account .. "." .. buyID, price * 10, cnt)
- api_param.goodsmeta = string.format("%s*%s", name, desc)
- api_param.goodsurl = Define.QQ_GOOD_URL --.. icon .. ".png"
- api_param.zoneid = pf_info.zoneid
- api_param.appmode = appmode or 2
- s2aParam.api_url = "/v3/pay/buy_goods"
- s2aParam.api_cbMethod = "OnTokenReturnForBuy"
- --end
- s2aParam.api_param = api_param
- _G.thread_http.send(Define.ADMIN_QQAPI_URL,Json.Encode(s2aParam))
- end
- function OnTokenReturnForBuy(result_json)
- local respond = {}
- respond.ret = 0
- local tencent_ret = result_json.tencent_ret
- local general_param = result_json.callback_general_param
- local account = general_param.account
- if (account == nil) then
- respond.msg = "fail:Callback param's account should not be null"
- return Json.Encode(respond)
- end
- local human = ObjHuman.onlineAccount[account]
- if (human == nil) then
- respond.msg = "fail:Human offlined"
- return Json.Encode(respond)
- end
-
- if (tencent_ret.ret ~= 0) then
- if tencent_ret.ret == 1002 then
- Broadcast.sendErr(human, Lang.QQAPI_ERR_TIMEOUT)
- end
- respond.msg = "fail:OPENKEY expire"
- return Json.Encode(respond)
- end
- local token = tencent_ret.token
- local url_params = tencent_ret.url_params
- local msgRet = Msg.gc.GC_BUY_TOKEN
- msgRet.token = token
- msgRet.url = tencent_ret.url_params
- Msg.send(msgRet, human.fd)
-
- addToken(OP_BUY,token,account)
- respond.ret = 1
- respond.msg = "ok"
- return Json.Encode(respond)
- end
- -- 腾讯发货回调返回码
- local kTencentDeliverRetSuccess = 0
- local kTencentDeliverRetTokenNotExists = 3
- local kTencentDeliverRetParamError = 4
- local kTencentDeliverRetUserOffline = 5
- local kTencentDeliverRetHandlerFailed = 6
- BUY_CONFIRM_LIST = BUY_CONFIRM_LIST or {}
- function confirmDeliver(key,human,result_json)
- s2aParam = {}
- local now = os.time()
- local callback_general_param = {}
- s2aParam.callback_general_param = callback_general_param
-
- s2aParam.api_url = "/v3/pay/confirm_delivery"
- s2aParam.api_cbMethod = ""
- local confirm_param = {}
- local pf_info = human.pf_info
- confirm_param["openid"] = pf_info.openid
- confirm_param["openkey"] = pf_info.openkey
- confirm_param["pfkey"] = pf_info.pfkey
- confirm_param["pf"] = pf_info.pf
- confirm_param["billno"] = result_json.billno
- confirm_param["payitem"] = result_json.payitem
- confirm_param["zoneid"] = result_json.zoneid
- confirm_param["amt"] = result_json.amt
- confirm_param["payamt_coins"] = result_json.payamt_coins
- confirm_param["token_id"] = result_json.token
- confirm_param["provide_errno"] = 0
- confirm_param["userip"] = human.db.ip
- confirm_param["worldid"] = pf_info.serverid
- confirm_param["pubacct_payamt_coins"] = result_json.pubacct_payamt_coins
- confirm_param["ts"] = os.time()
- s2aParam.api_param = confirm_param
- s2aParam.userip = confirm_param.userip
- s2aParam.worldid = confirm_param.worldid
- _G.thread_http.send(Define.ADMIN_QQAPI_URL,Json.Encode(s2aParam))
- BUY_CONFIRM_LIST[key] = nil
- end
- function onDeliverReturnForBuy(result_json)
- local respond = {}
- respond.result = 0
- respond.account = ""
- local token = result_json.token
- if token == nil then
- respond.result = kTencentDeliverRetTokenNotExists
- respond.msg = "token is nil"
- return respond
- end
- if not TOKEN_DATA[OP_BUY][token] then
- respond.result = 7
- respond.msg = "token is invaild"
- return respond
- end
- local account = TOKEN_DATA[OP_BUY][token][1]
- if account == nil or account == "" then
- account = result_json.accountName
- if account == nil or account == "" then
- respond.result = kTencentDeliverRetParamError
- respond.msg = "account is nil"
- return respond
- end
- end
- respond.account = account
- local human = ObjHuman.onlineAccount[account]
- if (human == nil) then
- respond.result = kTencentDeliverRetUserOffline
- respond.msg = "fail:Human offlined"
- return respond
- end
-
- local payitem = result_json.items or result_json.payitem
- local itemInfo = Define.Split(payitem, "*")
- local buyID
- local price
- local cnt
- local name
- if itemInfo then
- buyID = tonumber(itemInfo[1])
- price = tonumber(itemInfo[2])/10
- cnt = tonumber(itemInfo[3])
- end
- if not BuyLogic.isArgOK(human,buyID,human.region,price) then
- respond.result = kTencentDeliverRetParamError
- respond.msg = "fail:param err"
- return respond
- end
- local input = {}
- input.account = account
- input.order = "zone_"..token
- input.region = "CN"
- input.gold = 0
- input.money = price
- input.buyID = buyID
- if result_json.amt then
- local amt = tonumber(result_json.amt)
- if amt > 0 then
- input.amt = amt / 100
- end
- end
- local ret = {}
- ApiLogic.charge(input,ret)
- --加道具 end
- if ret.result ~= 1 then
- respond.result = kTencentDeliverRetHandlerFailed
- respond.msg = "ApiLogic.charge err:"..ret.result.."-"..ret.err
- return respond
- end
- rmToken(OP_BUY,token)
- BUY_CONFIRM_LIST[result_json.billno] = {human,result_json}
- respond.result = kTencentDeliverRetSuccess
- respond.msg = "OK"
- return respond
- end
- --[[
- --实名注册
- function realNameRegister(human, idnumber, name)
- local pf_info = human.pf_info
- if (pf_info == nil) then
- assert(nil)
- return
- end
- for k in pairs(s2aParam) do
- s2aParam[k] = nil
- end
- -- 构造参数
- local callback_general_param = {}
- callback_general_param.account = human.db.account
- s2aParam.callback_general_param = callback_general_param
- local api_param = {}
- api_param.openid = pf_info.openid
- api_param.openkey = pf_info.openkey
- api_param.idnumber = idnumber
- api_param.name = name
- s2aParam.api_url = "/v3/user/gameapi_real_name_register"
- s2aParam.api_cbMethod = "OnRealNameRegister"
- s2aParam.api_param = api_param
- _G.thread_http.send(Define.ADMIN_QQAPI_REAL_NAME_REGISTER,Json.Encode(s2aParam))
- end
- function OnRealNameRegister(result_json)
- local respond = {}
- respond.ret = 0
- respond.msg = "fail"
- local general_param = result_json.callback_general_param
- local account = general_param.account
- if (account == nil) then
- respond.msg = "fail:Callback param's name should not be null"
- return Json.Encode(respond)
- end
- local human = ObjHuman.onlineAccount[account]
- if (human == nil) then
- respond.msg = "fail:Human offlined"
- return Json.Encode(respond)
- end
- local msgRet = Msg.gc.GC_REAL_NAME_REGISTER
- msgRet.ret = 0
- msgRet.msg = "success"
- local tencent_ret = result_json.tencent_ret
- if tencent_ret.ret ~= 0 or tencent_ret.reg_result ~= 0 then
- msgRet.ret = tencent_ret.ret
- msgRet.msg = tencent_ret.msg
- end
- Msg.send(msgRet, human.fd)
- respond.ret = 1
- respond.msg = "success"
- return Json.Encode(respond)
- end--]]
- function onTimer()
- for k,v in pairs(BUY_CONFIRM_LIST) do
- confirmDeliver(k,v[1],v[2])
- return
- end
- end
|