123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- /*
- 给玩家创建订单, 订单创建消息由客户端发起创建。通过游戏服转发至充值服。
- 游戏服传入的参数:
- userid = character.account, -- 平台或渠道的账号id
- serverid = character.sid, -- 游戏服务器id
- uid = character.uid, -- 游戏内的账号id
- platformid = platformid, -- 平台id(Andorid、iOS)
- channel = character.channel, -- 渠道标识
- product_id = product_id, -- 计费点名称
- remarks = 'remarks', -- ,
- source = source or 0, -- 充值来源(0:非活动 其他值: 活动类型)
- appname = appname or 'appname', -- 玩家使用的包
- source 改参数主要指指定客户端在上面界面请求的订单创建, 目前主要区分 活动充值 和 非活动充值
- appname 针对指定包的玩家充值, 额外处理的需求
- */
- var mysql = require('mysql');
- var mysqlcn = require('../../terry/mysqlcn.js');
- var query = mysqlcn.query;
- var uuid = require('node-uuid');
- var qs = require('querystring');
- var encryption = require('./encryption.js');
- var config = require('../config.js');
- //查询游戏服务器列表
- var sql_select_server = function(id){
- var sql = "SELECT * FROM services WHERE id = ?";
- var inserts = [id];
- sql = mysql.format(sql, inserts);
- return sql;
- }
- var sql_select = function(orderid){
- var sql = "SELECT * FROM payinfo WHERE ?? = ?";
- var inserts = ['orderid',orderid];
- sql = mysql.format(sql, inserts);
- return sql;
- }
- var sql_select_account = function(account){
- var sql = "SELECT * FROM cardNOID WHERE account = ?";
- var inserts = [account];
- sql = mysql.format(sql, inserts);
- return sql;
- }
- //@TODO: 充值服生成订单
- var getorderiduuid = function(args,res){
- console.log("客户端来请求充值服产生订单:%s",args);
- if (args==null){
- console.log("无效的充值请求!");
- try {res.send("2");}
- catch(e){}
- return;
- }
- var receipt = null
- try {
- receipt = qs.parse(args);//JSON.parse(args)
- } catch(e) {
- console.log("解析失败!");
- try {res.send("3");}
- catch(e){}
- return
- }
- var userid = receipt.userid; // 平台或渠道的账号id
- var serverid = parseInt(receipt.serverid); // 游戏服务器id
- var uid = receipt.uid; // 游戏内的账号id
- var platform = receipt.platform; // 平台id(Andorid、iOS)
- var channel = receipt.channel; // 渠道标识
- var product_id = receipt.product_id; // 礼包id
- var cfid = receipt.cfid; // 计费点id
- var remarks = receipt.remarks;
- var appname = receipt.appname; // 玩家充值使用的包
- var act_id = parseInt(receipt.act_id); // 活动唯一id
- console.log(
- "请求:\n\tserverid=%s,uid=%s,userid=%s,platform=%s,channel=%s,remarks=%s,appname=%s,act_id=%s,cfid=%s",
- serverid,
- uid,
- userid,
- platform,
- channel,
- remarks,
- appname,
- act_id,
- cfid);
- var sql = sql_select_server(serverid);
- query(sql,function(qerr,vals,fields_){
- if (qerr==null){
- if (vals.length==0){
- console.log("客户端获取订单号,该服务器id:%s不存在",serverid);
- try{
- res.send(JSON.stringify( {'erron':4,'desc':"该服务器id不存在"}));
- }
- catch(e){}
- return
- }
- var orderid = uuid.v1();
- if (orderid == null || orderid == undefined || orderid == "") {
- try {
- // res.send("4");
- res.send(JSON.stringify( {'erron':4,'desc':'订单号创建失败'}));
- }
- catch(e){}
- console.log("无效订单号!")
- return
- }
- var returnorderID = 1
- query(sql_select(orderid),function(qerr,vals,fields){
- if (qerr==null){
- if (vals[0]){
- console.log("生成订单重复");
- try{res.send( JSON.stringify( {'erron':4,'desc':'生成订单重复'}));}
- catch(e){}
- returnorderID = 2;
- return
- } else{
- var pushmysql = function(query,orderid,serverid,uid,platform,channel,userid,product_id,cfid,remarks,appname,callback){
- var submittime = Date.parse(new Date()) / 1000;
- var sql = "INSERT INTO payinfo SET orderid=?,serverid=?,uid=?,platform=?,channel=?,submittime=?,flag=?,user_id=?,product_id=?,cfid=?,remarks=?,appname=?";
- var values = [orderid, serverid,uid,platform,channel,submittime,2,userid,product_id,cfid,remarks,appname];
- sql = mysql.format(sql, values);
- console.log(sql)
- query(sql, function(err,vals){
- if (err == null) {
- callback(0)
- } else {
- callback(err.errno);
- }
- })
- }
- //将客户端生成的订单号记录在数据库中
- pushmysql(query,orderid,serverid,uid,platform,channel,userid,product_id,cfid,remarks,appname,function(errno){
- if (errno == 0) {
- try{
- // res.send("0,"+orderid);
- res.send(JSON.stringify( {'erron':0,'desc': orderid}));
- }
- catch(e){}
- console.log("开始订单 %s 的支付流程!", orderid);
- } else {
- try{
- // res.send("5");
- res.send(JSON.stringify( {'erron':5,'desc': "数据库存储失败"}));
- }
- catch(e){}
- console.log("创建订单 %s 时出现 %s 错误!", orderid, errno);
- }
- });
- }
- } else {
- console.log("查找mysql库中订单列表失败");
- try{
- // res.send( "6,系统错误,请重新获取");
- res.send(JSON.stringify( {'erron':6,'desc': "系统错误,请重新获取"}));
- }
- catch(e){}
- }
- });
- }else{
- console.log("查找mysql库中服务器列表失败");
- try{
- // res.send( "6,系统错误,请重新获取");
- res.send(JSON.stringify( {'erron':6,'desc': "系统错误,请重新获取"}));
- }
- catch(e){}
- }
- })
- }
- var get_server_ip = function(args,res){
- console.log("GM请求服务器ip数据:%s", JSON.stringify(args));
- var key = "2D7F44957C2749D9B650B43CF6AB0320";
- var receipt = args;
- var serverid = receipt.serverid;
- var user = receipt.user;
- var sign = receipt.sign;
- var str_sign = "serverid="+serverid+"&user="+user+"&key="+key;
- var mysign = encryption.md5(str_sign);
- if (mysign != sign){
- console.log("查找mysql库中服务器失败,签名错误mysign:%s,sign:%s",mysign,sign);
- try{res.send( JSON.stringify({ 'state':'2'}));}
- catch(e){}
- return;
- }
- var sql = mysql.format("SELECT * FROM services where id=?" ,[serverid]);
- query(sql,function(qerr,vals,fields_){
- if (qerr==null){
- if (vals.length==0){
- console.log("查找mysql库中服务器失败");
- try{res.send( JSON.stringify({ 'state':'3'}));}
- catch(e){}
- return
- }
- var returndata = JSON.stringify({
- 'state':'0',
- 'ip':vals[0].wan,
- 'port':vals[0].port,
- });
- console.log("查找mysql库中服务器列表:%s",returndata);
- res.send(returndata);
- }else{
- console.log("打开mysql库中服务器失败");
- try{res.send( JSON.stringify({ 'state':'4'}));}
- catch(e){}
- }
- });
- }
- var get_all_server_ip = function(args,res){
- console.log("GM请求服务器ip数据:%s", args);
- var key = "2D7F44957C2749D9B650B43CF6AB0320";
- var receipt = JSON.parse(args);
- var channel = receipt.channel;
- var user = receipt.user;
- var sign = receipt.sign;
- var str_sign = "channel="+channel+"&user="+user+"&key="+key;
- var mysign = encryption.md5(str_sign);
- if (mysign != sign){
- console.log("查找mysql库中服务器失败,签名错误mysign:%s,sign:%s",mysign,sign);
- try{
- res.send(JSON.stringify({ 'status':'400','msg':'参数不全'}));
- }
- catch(e){}
- return;
- }
- var sql = "SELECT * FROM services";
- query(sql,function(qerr,vals,fields_){
- if (qerr==null){
- if (vals.length==0){
- console.log("查找mysql库中服务器列表失败");
- try{
- res.send(JSON.stringify({ 'status':'500','msg':'无数据'}));
- }
- catch(e){}
- return
- }
- var data = new Array();
- for (var i = 0;i < vals.length; ++i){
- var aa = {
- "id" : vals[i].id,
- 'ip':vals[i].wan_ip,
- 'port':vals[i].port,
- };
- data[i] = aa;
- }
- var returndata = JSON.stringify({
- 'state':'1',
- 'data':data,
- });
- console.log("查找mysql库中服务器列表:%s",returndata);
- res.send(returndata);
- }else{
- console.log("打开mysql库中服务器列表失败");
- try{
- res.send(JSON.stringify({ 'status':'400','msg':'稍后请求'}));
- }
- catch(e){}
- }
- });
- }
- //@TODO: 服务器列表获取
- var getserver_all = function(args,res){
- console.log("/getserver_all请求区服数据:%s", JSON.stringify(args));
- var key = "2D7F44957C2749D9B650B43CF6AB0320";
- var receipt = JSON.parse(args);
- var channel = receipt.channel;
- var user = receipt.user;
- var sign = receipt.sign;
- var str_sign = "channel="+channel+"&user="+user+"&key="+key;
- var mysign = encryption.md5(str_sign);
- if (mysign != sign){
- console.log("查找mysql库中服务器失败,签名错误mysign:%s,sign:%s",mysign,sign);
- try{
- res.send(JSON.stringify({ 'status':'400','msg':'参数不全'}));
- }
- catch(e){}
- return;
- }
- var sql = "SELECT * FROM services";
- query(sql,function(qerr,vals,fields_){
- if (qerr==null){
- if (vals.length==0){
- console.log("查找mysql库中服务器列表失败");
- try{res.send( JSON.stringify({ 'state':'0'}));}
- catch(e){}
- return
- }
- var data = new Array();
- for (var i = 0;i < vals.length; ++i){
- var aa = {
- "id" : vals[i].id,
- "serverID" : vals[i].id,
- "serverName" : vals[i].name,
- };
- data[i] = aa;
- }
- var returndata = JSON.stringify({
- 'state':'1',
- 'data':data,
- });
- console.log("查找mysql库中服务器列表:%s",returndata);
- res.send(returndata);
- }else{
- console.log("打开mysql库中服务器列表失败");
- try{res.send( JSON.stringify({ 'state':'0'}));}
- catch(e){}
- }
- });
- }
- var express = require('express');
- var router = express.Router();
- //@TODO: 订单生成
- var getorderid = function(req, res) {
- var real_ip = req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip;
- console.log("post getorderid,host:%s, ip:%s,path:%s,time:%s",req.hostname,real_ip,req.path,new Date());
- var data = "";
- req.on("data",function(chunk){
- data += chunk;
- });
- req.on("end",function(){
- try{
- getorderiduuid(data,res);
- } catch(e) {
- console.log(e)
- // res.send("fail");
- res.send(JSON.stringify( {'erron':1,'desc': "fail"}));
- }
- });
- req.on("error",function(err){
- console.log("error:%s",err);
- // res.send("fail");
- res.send(JSON.stringify( {'erron':1,'desc': "fail"}));
- });
- }
- router.post('/getorderid', getorderid);
- router.post('/IosOrderid', getorderid);
- router.post('/ios_orderid', getorderid);
- router.post('/orderid_ios', getorderid);
- router.post('/OrderidIos', getorderid);
- router.get("/get_server_ip",function(req,res){
- try{
- var real_ip = req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip;
- console.log("get shoudong_repair_order,host:%s, ip:%s,time:%s",req.hostname,req.ip,new Date());
- get_server_ip(req.query,res);
- }catch(err){
- console.log(err);
- var info = JSON.stringify({ 'state':'0'});
- res.send(info);
- }
- })
- router.get("/get_time",function(req,res){
- try{
- var real_ip = req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip;
- // console.log("get get_time,host:%s, ip:%s,time:%s",req.hostname,req.ip,new Date());
- // var times = Math.floor(Date.now()/1000);
- var date = new Date();//.转换成毫秒
- var time = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':' +
- (date.getMinutes() <10 ? '0' + date.getMinutes() : date.getMinutes()) + ':' +
- (date.getSeconds() <10 ? '0' + date.getSeconds() : date.getSeconds());
- res.send(time)
- }catch(err){
- console.log(err);
- var info = JSON.stringify({ 'state':'0'});
- res.send(info);
- }
- })
- router.post("/get_all_server_ip",function(req,res){
- var real_ip = req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip;
- console.log("post get_all_server_ip,host:%s, ip:%s,path:%s,time:%s",req.hostname,real_ip,req.path,new Date());
- var data = "";
- req.on("data",function(chunk){
- data += chunk;
- });
- req.on("end",function(){
- try{
- get_all_server_ip(data,res);
- } catch(e) {
- console.log(e)
- res.send("fail");
- }
- });
- req.on("error",function(err){
- console.log("error:%s",err);
- res.send("fail");
- });
- })
- router.post("/getserver_all",function(req,res){
- var real_ip = req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip;
- console.log("post getserver_all,host:%s, ip:%s,path:%s,time:%s",req.hostname,real_ip,req.path,new Date());
- var data = "";
- req.on("data",function(chunk){
- data += chunk;
- });
- req.on("end",function(){
- try{
- getserver_all(data,res);
- } catch(e) {
- console.log(e)
- res.send("fail");
- }
- });
- req.on("error",function(err){
- console.log("error:%s",err);
- res.send("fail");
- });
- })
- module.exports = router;
|