Пример #1
0
 /// <summary>SingleRecordPay 实体转换</summary>
 public static SingleRecordPay ToSingleRecordPay(string platform, string server, tgm_record_pay model)
 {
     return(new SingleRecordPay()
     {
         platform = platform,
         server = server,
         playername = model.player_name,
         pay = model.money,
         gold = model.amount,
         paytime = Convert.ToString(DateTime.FromBinary(long.Parse(Convert.ToString(model.createtime)))),
         order = model.order_id,
     });
 }
Пример #2
0
        /// <summary>充值接口</summary>
        /// <param name="param">充值参数字符串
        /// token|sid|user_code|order_id|channel|type|amount
        /// 令牌|游戏服编号|玩家账号|订单号|渠道|充值类型|充值数值
        /// </param>
        /// <param name="checksum">param的MD5校验和
        /// MD5字符串token|sid|user_code|order_id|channel|type|amount|key
        /// 令牌|游戏服编号|玩家账号|订单号|渠道|充值类型|充值数值|平台加密字符串
        /// </param>
        /// <returns>充值后状态结果值</returns>

        public BaseEntity PostPayment(String param, String checksum)
        {
            //key : 解析param用
            //param:充值封装字符串 格式: token|sid|user_code|order_id|channel|type|amount
            //checksum: MD5字符串token|sid|user_code|order_id|channel|type|amount|key

            //var t = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}", "0c372ec3-1b00-4286-84a8-9216e7ab59e3", 1, "", 1, "", 1, 1, 100);
            //var _t0 = string.Format("{0}|{1}", t, "123456");

            //解析
            var s = param.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

            if (s.Length == 7)
            {
                var _token     = s[0];
                var _sid       = Convert.ToInt32(s[1]);
                var _user_code = s[2];
                var _order_id  = s[3];
                var _channel   = s[4];
                var _type      = Convert.ToInt32(s[5]);
                var _amount    = Convert.ToInt32(s[6]);

                if (!IsToken(_token))
                {
                    return new BaseEntity {
                               result = (int)ApiType.FAIL, message = "令牌错误"
                    }
                }
                ;                                                                                               //验证会话
                var ck  = string.Format("{0}|{1}", param, Token.encrypt);
                var md5 = UConvert.MD5(ck);
                if (checksum == md5)//参数校验
                {
                    //获取游戏服信息
                    tgm_server.SetDbConnName(tgm_connection);

                    var server = tgm_server.FindByid(_sid);
                    if (server == null)
                    {
                        return new BaseEntity {
                                   result = (int)ApiType.FAIL, message = "游戏服务器不存在"
                        }
                    }
                    ;
                    SN = server.name;
                    tg_user.SetDbConnName(db_connection);
                    var user = tg_user.GetEntityByCode(_user_code);
                    if (user == null)
                    {
                        return new BaseEntity {
                                   result = (int)ApiType.FAIL, message = "玩家账号不存在"
                        }
                    }
                    ;

                    var ip   = server.ip;
                    var port = server.port_server;
                    //var conn = server.connect_string;
                    //解析后调用游戏接口判断是否成功

                    var gold  = UConvert.ToGold(_amount, _type);
                    var api   = new CommandApi(ip, port, ApiCommand.充值);
                    var state = api.Recharge(user.id, gold);
                    api.Dispose();
                    if (state == (int)ApiType.OK)
                    {
                        tgm_record_pay.SetDbConnName(tgm_connection);

                        var entity = new tgm_record_pay()
                        {
                            sid         = _sid,
                            user_code   = _user_code,
                            player_id   = user.id,
                            player_name = user.player_name,
                            order_id    = _order_id,
                            channel     = _channel,
                            pay_type    = _type,
                            amount      = gold,
                            pay_state   = state,
                            createtime  = DateTime.Now.Ticks,
                            money       = _amount,
                        };
                        //无论成功,存入后台数据库这条数据记录
                        entity.Save();
                        //同步数据
                        tgm_record_pay.Proc_sp_pay_syn(entity.id);
                        return(new BaseEntity {
                            result = (int)ApiType.OK, message = "充值成功"
                        });
                    }
                    return(new BaseEntity {
                        result = state, message = "充值未达到玩家账号"
                    });
                }
                else
                {
                    return(new BaseEntity {
                        result = (int)ApiType.FAIL, message = "参数校验错误,传递参数被修改"
                    });
                }
            }
            return(new BaseEntity {
                result = (int)ApiType.FAIL, message = "传递参数解析错误"
            });
        }