| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package player
- import (
- actorRemote "f1-game/internal/actor_remote"
- cherryApp "f1-game/internal/cherry_app"
- "f1-game/internal/code"
- "f1-game/internal/component/sdk"
- sdkFacade "f1-game/internal/component/sdk/define/facade"
- sdkKey "f1-game/internal/component/sdk/define/key"
- "f1-game/internal/constant"
- "f1-game/internal/data"
- nameLocal "f1-game/internal/name/local"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- "f1-game/nodes/game/player/charge"
- cstring "github.com/cherry-game/cherry/extend/string"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func (p *actorPlayer) initCharge() {
- p.Local().Register(nameLocal.Player_ChargeCreate, p.chargeCreate)
- p.Remote().Register(nameRemote.Player_ChargeDeliver, p.chargeDeliver)
- }
- // chargeCreate 充值项订单创建
- func (p *actorPlayer) chargeCreate(session *cproto.Session, req *pb.ChargeCreate) {
- chargeRow, found := data.Charge.GetByID(req.ChargeID)
- if !found || chargeRow.Amount < 1 {
- p.ResponseCode(session, code.PayChargeIDError)
- return
- }
- pid := sessions.GetPID(session)
- sdkRow := data.SDK.Get(pid)
- if sdkRow == nil {
- p.ResponseCode(session, code.PIDError)
- return
- }
- sdkInvoke, err := sdk.GetInvoke(sdkRow.SdkID)
- if err != nil {
- p.ResponseCode(session, code.PIDError)
- return
- }
- // 根据chargeID,检查充值项
- errCode := charge.Service().OnCheck(p.playerID, req.ChargeID, req.ChargeType, req.ChargeParams)
- if code.IsFail(errCode) {
- p.ResponseCode(session, errCode)
- return
- }
- // 通过pay节点创建订单,返回订单id
- orderID, errCode := p.createPayOrder(session, req, chargeRow)
- if code.IsFail(errCode) {
- p.ResponseCode(session, errCode)
- return
- }
- // 构建订单签名
- input := sdkFacade.ParamsMap{}
- input.Put(sdkKey.GameNodeID, cherryApp.NodeID())
- input.Put(sdkKey.PID, sessions.GetPID(session))
- input.Put(sdkKey.OpenID, sessions.GetOpenID(session))
- input.Put(sdkKey.UID, session.Uid)
- input.Put(sdkKey.PlayerID, sessions.GetPlayerID(session))
- input.Put(sdkKey.OrderID, orderID)
- params, errCode := sdkInvoke.OrderSign(sdkRow, chargeRow, input)
- if code.IsFail(errCode) {
- p.ResponseCode(session, errCode)
- return
- }
- rsp := &pb.ChargeCreateResponse{
- ChargeID: req.ChargeID,
- OrderID: orderID,
- Params: params,
- }
- p.Response(session, rsp)
- }
- func (p *actorPlayer) createPayOrder(session *cproto.Session, req *pb.ChargeCreate, chargeRow *data.ChargeRow) (int64, int32) {
- playerTable := p.PlayerTable()
- createOrder := &pb.CreateOrder{
- PID: playerTable.PID,
- UID: playerTable.UID,
- GameNodeID: playerTable.NodeID,
- PlayerID: playerTable.PlayerID,
- ChargeID: chargeRow.ID,
- Amount: chargeRow.Amount,
- ClientOS: 0, // 需要在玩家登录的时候带入到session里,然后直接读取
- Ip: session.Ip,
- Extra: map[string]string{
- constant.ChargeKeyType: cstring.ToString(req.ChargeType),
- constant.ChargeKeyParams: cstring.ToString(req.ChargeParams),
- },
- }
- // 调用pay node创建订单ID信息,下发给客户端
- return actorRemote.PayOrder.Create(createOrder)
- }
- // chargeDeliver 充值项订单发货 {server-id}.player.orderDeliver
- func (p *actorPlayer) chargeDeliver(req *pb.OrderDeliver) int32 {
- _, found := data.Charge.GetByID(req.ChargeID)
- if !found {
- return code.PayChargeIDError
- }
- if req.Extra == nil {
- return code.PayChargeParamsError
- }
- chargeType, ok := req.GetExtraI32(constant.ChargeKeyType)
- if !ok {
- return code.PayChargeTypeError
- }
- chargeParams, ok := req.GetExtraI32(constant.ChargeKeyParams)
- if !ok {
- return code.PayChargeParamsError
- }
- errCode := charge.Service().OnDeliver(p.playerID, req.ChargeID, chargeType, chargeParams)
- if code.IsFail(errCode) {
- p.Warn("[chargeDeliver] OnDeliver fail. req = %v, errCode = %d", req, errCode)
- }
- return code.OK
- }
|