Commit b6ed652b414b2c6cc32f1e2bad29ff952dde6f4b

Authored by zhouhaihai
1 parent fcb34e1f

充值

src/ProtocolCode.lua
@@ -174,6 +174,9 @@ actionCodes = { @@ -174,6 +174,9 @@ actionCodes = {
174 Store_rechargeRpc = 550, 174 Store_rechargeRpc = 550,
175 Store_dailyBuyRpc = 551, 175 Store_dailyBuyRpc = 551,
176 Store_dinerBuyRpc = 552, 176 Store_dinerBuyRpc = 552,
  177 + Store_googleRechargeRpc = 553,
  178 + Store_purchaseOrderResult = 554,
  179 +
177 180
178 Email_listRpc = 600, 181 Email_listRpc = 600,
179 Email_drawAllAttachRpc = 601, 182 Email_drawAllAttachRpc = 601,
src/actions/StoreAction.lua
1 local _M = {} 1 local _M = {}
2 2
3 local serverId = tonumber(skynet.getenv("servId")) 3 local serverId = tonumber(skynet.getenv("servId"))
  4 +local md5 = require "md5"
4 5
5 -function _M.rechargeRpc(agent , data) 6 +local function makeOrder(roleId, rechargeId)
  7 + local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
  8 + local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)
  9 + local orderKey = string.format("order:%d:%d", roleId, orderId)
  10 + redisproxy:del(orderKey)
  11 + local order = require("models.Order").new({
  12 + key = orderKey,
  13 + order = partnerOrderId,
  14 + rechargeId = rechargeId,
  15 + })
  16 + order:create()
  17 + redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId)
  18 + return partnerOrderId
  19 +end
6 20
  21 +-- 入口在正式服关闭 -- mock 充值
  22 +function _M.rechargeRpc(agent , data)
7 local role = agent.role 23 local role = agent.role
8 local msg = MsgPack.unpack(data) 24 local msg = MsgPack.unpack(data)
9 local id = msg.id 25 local id = msg.id
10 local dataSet = csvdb["shop_rechargeCsv"][id] 26 local dataSet = csvdb["shop_rechargeCsv"][id]
11 - local roleId = role:getProperty("id")  
12 if not dataSet then return end 27 if not dataSet then return end
13 - 28 + local roleId = role:getProperty("id")
  29 +
14 --创建订单号 30 --创建订单号
15 - local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)  
16 - local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)  
17 - local orderKey = string.format("order:%d:%d", roleId, orderId)  
18 - redisproxy:del(orderKey) 31 + local partnerOrderId = makeOrder(roleId, id)
  32 + SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId }))
19 33
20 - local order = require("models.Order").new({ key = orderKey, order = partnerOrderId, rechargeId = dataSet.id })  
21 - order:create()  
22 - redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId) 34 + -- 测试的 直接发奖励了
  35 + skynet.timeout(10, function ()
  36 + role:handlePurchase({
  37 + order = partnerOrderId,
  38 + amount = dataSet.rmb,
  39 + game_money = dataSet.diamond,
  40 + product_id = dataSet.productId,
  41 + pay_time = skynet.timex(),
  42 + transactionId = "onlyTest",
  43 + })
  44 + end)
  45 +
  46 + return true
  47 +end
  48 +
  49 +local function table_keys( t )
  50 + local keys = {}
  51 + for k, _ in pairs( t ) do
  52 + keys[#keys + 1] = k
  53 + end
  54 + return keys
  55 +end
  56 +
  57 +local function signPms(params, secret_key)
  58 + local keys = table_keys(params)
  59 + table.sort(keys)
  60 + local urlCode = ""
  61 + for index, key in ipairs(keys) do
  62 + urlCode = urlCode .. params[key]
  63 + end
  64 + return md5.sumhexa(urlCode .. secret_key):lower()
  65 +end
  66 +
  67 +
  68 +-- google 充值 入口
  69 +function _M.googleRechargeRpc(agent, data)
  70 + local role = agent.role
  71 + local msg = MsgPack.unpack(data)
  72 + local id = msg.id
  73 + local dataSet = csvdb["shop_rechargeCsv"][id]
  74 + if not dataSet then return end
  75 + local roleId = role:getProperty("id")
23 76
24 - -- 暂时忽略心跳检查  
25 role.ignoreHeartbeat = true 77 role.ignoreHeartbeat = true
26 - SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) 78 + --创建订单号
  79 + local partnerOrderId = makeOrder(roleId, id)
  80 + -- 签名
  81 + local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075"
  82 + local need = {
  83 + out_trade_no = partnerOrderId,
  84 + money = dataSet.rmb,
  85 + game_money = dataSet.diamond,
  86 + product_id = dataSet.productId,
  87 + }
  88 + local sign = signPms(need, secret_key)
  89 +
  90 + SendPacket(actionCodes.Store_googleRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign}))
27 return true 91 return true
28 end 92 end
29 93
  94 +
30 function _M.purchaseOrderResult(agent, data) 95 function _M.purchaseOrderResult(agent, data)
31 local role = agent.role 96 local role = agent.role
32 97
src/models/RolePlugin.lua
@@ -1399,6 +1399,14 @@ function RolePlugin.bind(Role) @@ -1399,6 +1399,14 @@ function RolePlugin.bind(Role)
1399 1399
1400 1400
1401 -- 充值 -- 1401 -- 充值 --
  1402 + --[[
  1403 + request.order = data.out_trade_no
  1404 + request.amount = data.money / 100
  1405 + request.game_money = data.game_money
  1406 + request.product_id = data.product_id
  1407 + request.pay_time = data.pay_time
  1408 + request.transactionId = data.order_no
  1409 + ]]
1402 function Role:handlePurchase(params) 1410 function Role:handlePurchase(params)
1403 local roleId = self:getProperty("id") 1411 local roleId = self:getProperty("id")
1404 local partnerOrderStr = params.order 1412 local partnerOrderStr = params.order
@@ -1417,7 +1425,6 @@ function RolePlugin.bind(Role) @@ -1417,7 +1425,6 @@ function RolePlugin.bind(Role)
1417 return 1425 return
1418 end 1426 end
1419 1427
1420 -  
1421 local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] 1428 local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")]
1422 if rechargeData.rmb ~= tonumber(params.amount) then 1429 if rechargeData.rmb ~= tonumber(params.amount) then
1423 skynet.error(string.format("fake order: %s, roleId: %d, order: %s", 1430 skynet.error(string.format("fake order: %s, roleId: %d, order: %s",