diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 60db68e..db2d749 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -174,6 +174,9 @@ actionCodes = { Store_rechargeRpc = 550, Store_dailyBuyRpc = 551, Store_dinerBuyRpc = 552, + Store_googleRechargeRpc = 553, + Store_purchaseOrderResult = 554, + Email_listRpc = 600, Email_drawAllAttachRpc = 601, diff --git a/src/actions/StoreAction.lua b/src/actions/StoreAction.lua index 4f0537f..05e8afb 100644 --- a/src/actions/StoreAction.lua +++ b/src/actions/StoreAction.lua @@ -1,32 +1,97 @@ local _M = {} local serverId = tonumber(skynet.getenv("servId")) +local md5 = require "md5" -function _M.rechargeRpc(agent , data) +local function makeOrder(roleId, rechargeId) + local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) + local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId) + local orderKey = string.format("order:%d:%d", roleId, orderId) + redisproxy:del(orderKey) + local order = require("models.Order").new({ + key = orderKey, + order = partnerOrderId, + rechargeId = rechargeId, + }) + order:create() + redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId) + return partnerOrderId +end +-- 入口在正式服关闭 -- mock 充值 +function _M.rechargeRpc(agent , data) local role = agent.role local msg = MsgPack.unpack(data) local id = msg.id local dataSet = csvdb["shop_rechargeCsv"][id] - local roleId = role:getProperty("id") if not dataSet then return end - + local roleId = role:getProperty("id") + --创建订单号 - local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) - local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId) - local orderKey = string.format("order:%d:%d", roleId, orderId) - redisproxy:del(orderKey) + local partnerOrderId = makeOrder(roleId, id) + SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) - local order = require("models.Order").new({ key = orderKey, order = partnerOrderId, rechargeId = dataSet.id }) - order:create() - redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId) + -- 测试的 直接发奖励了 + skynet.timeout(10, function () + role:handlePurchase({ + order = partnerOrderId, + amount = dataSet.rmb, + game_money = dataSet.diamond, + product_id = dataSet.productId, + pay_time = skynet.timex(), + transactionId = "onlyTest", + }) + end) + + return true +end + +local function table_keys( t ) + local keys = {} + for k, _ in pairs( t ) do + keys[#keys + 1] = k + end + return keys +end + +local function signPms(params, secret_key) + local keys = table_keys(params) + table.sort(keys) + local urlCode = "" + for index, key in ipairs(keys) do + urlCode = urlCode .. params[key] + end + return md5.sumhexa(urlCode .. secret_key):lower() +end + + +-- google 充值 入口 +function _M.googleRechargeRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + local id = msg.id + local dataSet = csvdb["shop_rechargeCsv"][id] + if not dataSet then return end + local roleId = role:getProperty("id") - -- 暂时忽略心跳检查 role.ignoreHeartbeat = true - SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) + --创建订单号 + local partnerOrderId = makeOrder(roleId, id) + -- 签名 + local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075" + local need = { + out_trade_no = partnerOrderId, + money = dataSet.rmb, + game_money = dataSet.diamond, + product_id = dataSet.productId, + } + local sign = signPms(need, secret_key) + + SendPacket(actionCodes.Store_googleRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign})) return true end + function _M.purchaseOrderResult(agent, data) local role = agent.role diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 54184ec..454524a 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -1399,6 +1399,14 @@ function RolePlugin.bind(Role) -- 充值 -- + --[[ + request.order = data.out_trade_no + request.amount = data.money / 100 + request.game_money = data.game_money + request.product_id = data.product_id + request.pay_time = data.pay_time + request.transactionId = data.order_no + ]] function Role:handlePurchase(params) local roleId = self:getProperty("id") local partnerOrderStr = params.order @@ -1417,7 +1425,6 @@ function RolePlugin.bind(Role) return end - local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] if rechargeData.rmb ~= tonumber(params.amount) then skynet.error(string.format("fake order: %s, roleId: %d, order: %s", -- libgit2 0.21.2