cccc9c70
zhouhaihai
商城
|
1
2
|
local _M = {}
|
192b96d3
zhouhaihai
重置
|
3
|
local serverId = tonumber(skynet.getenv("servId"))
|
b6ed652b
zhouhaihai
充值
|
4
|
local md5 = require "md5"
|
192b96d3
zhouhaihai
重置
|
5
|
|
b6ed652b
zhouhaihai
充值
|
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
|
192b96d3
zhouhaihai
重置
|
20
|
|
b6ed652b
zhouhaihai
充值
|
21
22
|
-- 入口在正式服关闭 -- mock 充值
function _M.rechargeRpc(agent , data)
|
cccc9c70
zhouhaihai
商城
|
23
24
25
26
|
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local dataSet = csvdb["shop_rechargeCsv"][id]
|
cccc9c70
zhouhaihai
商城
|
27
|
if not dataSet then return end
|
b6ed652b
zhouhaihai
充值
|
28
29
|
local roleId = role:getProperty("id")
|
192b96d3
zhouhaihai
重置
|
30
|
--创建订单号
|
b6ed652b
zhouhaihai
充值
|
31
32
|
local partnerOrderId = makeOrder(roleId, id)
SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId }))
|
192b96d3
zhouhaihai
重置
|
33
|
|
b6ed652b
zhouhaihai
充值
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
-- 测试的 直接发奖励了
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")
|
192b96d3
zhouhaihai
重置
|
76
|
|
192b96d3
zhouhaihai
重置
|
77
|
role.ignoreHeartbeat = true
|
b6ed652b
zhouhaihai
充值
|
78
79
80
81
82
83
|
--创建订单号
local partnerOrderId = makeOrder(roleId, id)
-- 签名
local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075"
local need = {
out_trade_no = partnerOrderId,
|
f9f877b1
zhouhaihai
商店
|
84
|
money = dataSet.rmb * 100,
|
b6ed652b
zhouhaihai
充值
|
85
86
|
game_money = dataSet.diamond,
product_id = dataSet.productId,
|
f9f877b1
zhouhaihai
商店
|
87
|
notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/google"
|
b6ed652b
zhouhaihai
充值
|
88
89
90
91
|
}
local sign = signPms(need, secret_key)
SendPacket(actionCodes.Store_googleRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign}))
|
192b96d3
zhouhaihai
重置
|
92
93
94
|
return true
end
|
8ae04b5a
zhouhaihai
mycard
|
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
-- mycard 充值 入口
function _M.myCardRechargeRpc(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
--创建订单号
local partnerOrderId = makeOrder(roleId, id)
-- 签名
local secret_key = "48759e07540f46d9af17ec82669b4272"
local need = {
out_trade_no = partnerOrderId,
|
f9f877b1
zhouhaihai
商店
|
111
|
money = dataSet.rmb * 100,
|
8ae04b5a
zhouhaihai
mycard
|
112
|
game_money = dataSet.diamond,
|
f9f877b1
zhouhaihai
商店
|
113
|
notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/mycard"
|
8ae04b5a
zhouhaihai
mycard
|
114
115
116
|
}
local sign = signPms(need, secret_key)
|
e629295d
zhouhaihai
协议
|
117
|
SendPacket(actionCodes.Store_myCardRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign}))
|
8ae04b5a
zhouhaihai
mycard
|
118
119
|
return true
end
|
b6ed652b
zhouhaihai
充值
|
120
|
|
9e25c63d
zhouhaihai
iospay
|
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
-- mycard 充值 入口
function _M.iosRechargeRpc(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
--创建订单号
local partnerOrderId = makeOrder(roleId, id)
-- 签名
local secret_key = "9647d2efe1074c73b9ac19af4337a70e"
local need = {
out_trade_no = partnerOrderId,
|
f9f877b1
zhouhaihai
商店
|
137
|
money = dataSet.rmb * 100,
|
9e25c63d
zhouhaihai
iospay
|
138
|
game_money = dataSet.diamond,
|
3ab906d5
zhouhaihai
重置项目
|
139
|
product_id = dataSet.iap_product_id,
|
f9f877b1
zhouhaihai
商店
|
140
|
notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/ios"
|
9e25c63d
zhouhaihai
iospay
|
141
142
143
144
145
146
147
|
}
local sign = signPms(need, secret_key)
SendPacket(actionCodes.Store_iosRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign}))
return true
end
|
192b96d3
zhouhaihai
重置
|
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
function _M.purchaseOrderResult(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
role.ignoreHeartbeat = false
local partnerOrderStr = msg.order
local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })
if not orderObject:load() then
-- 订单不存在
skynet.error("cancelPurchaseRpc", string.format("order %s not exist", partnerOrderStr))
return true
end
if msg.status == "success" then
orderObject:setProperty("transactionId", msg.platformOrder or "")
return true
end
if orderObject:getProperty("finishTime") > 0 then
return true
|
cccc9c70
zhouhaihai
商城
|
172
173
|
end
|
192b96d3
zhouhaihai
重置
|
174
|
orderObject:setProperty("status", msg.status)
|
3133cb76
zhouhaihai
日志
|
175
|
|
192b96d3
zhouhaihai
重置
|
176
|
redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)
|
cccc9c70
zhouhaihai
商城
|
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
return true
end
function _M.dailyBuyRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local count = msg.count or 1
local dataSet = csvdb["shop_diamondCsv"][id]
if not dataSet then return 1 end
local dailySDC = role.dailyData:getProperty("dailySDC")
if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (dailySDC[id] or 0))) then return 1 end
local cost = dataSet.cost
|
2ab0d91b
zhouhaihai
每日商店删掉 type [王宇杰]
|
195
196
197
198
|
local dailySDD = role.dailyData:getProperty("dailySDD")
if dailySDD[id] then -- 折扣
cost = math.ceil(cost * (1 - dataSet.disount / 100))
|
cccc9c70
zhouhaihai
商城
|
199
200
|
end
|
b216676d
zhouhaihai
log
|
201
|
if not role:costDiamond({count = cost * count, log = {desc = "dailyShop", int1 = id, int2 = count}}) then
|
cccc9c70
zhouhaihai
商城
|
202
203
204
205
206
207
208
|
return 4
end
if dataSet.limit ~= 0 then
dailySDC[id] = (dailySDC[id] or 0) + count
role.dailyData:updateProperty({field = "dailySDC", value = dailySDC})
end
|
aa5cbb54
zhouhaihai
商店bug
|
209
210
211
212
213
|
local gift = {}
for itemId, count_ in pairs(dataSet.gift:toNumMap()) do
gift[itemId] = count_ * count
end
local reward = role:award(gift, {log = {desc = "dailyShop", int1 = id, int2 = count}})
|
3133cb76
zhouhaihai
日志
|
214
215
|
role:log("role_action", {desc = "dailyShop", int1 = id, int2 = count})
|
cccc9c70
zhouhaihai
商城
|
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
SendPacket(actionCodes.Store_dailyBuyRpc, MsgPack.pack({reward = reward}))
return true
end
function _M.dinerBuyRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local count = msg.count or 1
local dataSet = csvdb["shop_dinerCsv"][id]
if not dataSet then return end
local dinerS = role:getProperty("dinerS")
if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (dinerS[id] or 0))) then return 1 end
|
d284e3ee
zhouhaihai
商店扣除错误
|
234
|
local cost = {[ItemId.DinerCoin] = dataSet.cost * count}
|
cccc9c70
zhouhaihai
商城
|
235
236
237
238
239
240
241
|
if not role:checkItemEnough(cost) then return end
if dataSet.limit ~= 0 then
dinerS[id] = (dinerS[id] or 0) + count
role:updateProperty({field = "dinerS", value = dinerS})
end
|
3133cb76
zhouhaihai
日志
|
242
|
role:costItems(cost, {log = {desc = "dinerShop", int1 = id, int2 = count}})
|
cccc9c70
zhouhaihai
商城
|
243
244
245
246
247
|
local gift = {}
for _id, _count in pairs(dataSet.gift:toNumMap()) do
gift[_id] = _count * count
end
|
3133cb76
zhouhaihai
日志
|
248
249
250
|
local reward = role:award(gift, {log = {desc = "dinerShop", int1 = id, int2 = count}})
role:log("role_action", {desc = "dinerShop", int1 = id, int2 = count})
|
cccc9c70
zhouhaihai
商城
|
251
252
253
254
255
256
|
SendPacket(actionCodes.Store_dinerBuyRpc, MsgPack.pack({reward = reward}))
return true
end
return _M
|