123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*
- 充值测试处理模块
- */
- var mysql = require('mysql');
- var mysqlcn = require('../../terry/mysqlcn.js');
- var query = mysqlcn.query;
- var qs = require('querystring');
- var encryption = require('../ordinary/encryption.js');
- var checkorder = require('../../terry/checkorder.js');
- var config = require('../config.js');
- var pay_success = function(args,res){
- console.log("yuda 回调接收:%s", args);
- var receipt
- try {
- receipt = qs.parse(args)
- console.log("qs解析成功")
- } catch(e) {
- console.log(e)
- res.send("FAILURE");
- return;
- }
- var money = receipt.amount // 玩家付款金额
- //var goods_id = receipt.goods_id // 产品配置表id
- var channel_order_id = receipt.trade_no // SDK生成的订单号
- var payment_type = receipt.payment_type // 支付类型(具体使用的SDK)
- var istest = 1 // 充值模式 istest=1沙盒测试 2:正式
- var cp_order_id = receipt.game_trade_no // CP订单号
- // 玩家的付款金额、充值档位、购买份数 需要进行校验
- console.log("[yuda] 订单号:%s: ", cp_order_id);
- var sql = mysql.format("SELECT * FROM payinfo where orderid=?", [cp_order_id]);//在mysql库中检查订单号
- query(sql,function(qerr,vals,fields){
- if (qerr==null){
- if (vals[0]==null){
- console.log("[yuda] 没有找到该订单");
- try{res.send("FAILURE");}
- catch(e){}
- return;
- }
- if (vals[0].overtime>0){
- console.log("[yuda] 已经处理的订单");
- try{res.send("SUCCESS");}
- catch(e){}
- return;
- }
- var amountnum = money
- var platform = vals[0].platform;
- platform = platform ? platform.toLowerCase() : 'null'
- var str
- if (platform == 'ios') {
- try{res.send("FAILURE");}
- catch(e){}
- return;
- } else if (platform == 'android') {
- str = "com.yoogames.d17"
- }
- else {
- console.log("################## 错误的平台platform: %s", platform)
- try{res.send("FAILURE");}
- catch(e){}
- return
- }
- var pos1 = receipt.goods_id.indexOf(str) + str.length
- var pos2 = receipt.goods_id.length
- var goods_id = receipt.goods_id.substring(pos1,pos2)
- var channel = vals[0].channel
- var timestamp = Date.parse(new Date()) / 1000;
- console.log("################## goods_id %s", goods_id)
- console.log("platform:%s,channel:%s,amountnum:%s",platform,channel,amountnum)
- var option = config.parse(platform,channel,goods_id)
- var cfid = option.cfid;
- var product_id = option.name
- if (cfid == 0){
- console.log("[yuda] 获取cfid失败为cfid:%s,product_id:%s", cfid,product_id);
- try{res.send("FAILURE");}
- catch(e){}
- return
- }
- if (goods_id != cfid){
- console.log("[yuda] 充值计费点不同goods_id:%s,cfid:%s", goods_id,cfid);
- try{res.send("FAILURE");}
- catch(e){}
- return
- }
- if (amountnum != option.price){
- console.log("[yuda] 充值金额不同amountnum:%s,option.price:%s", amountnum, option.price);
- try{res.send("FAILURE");}
- catch(e){}
- return
- }
- //填充充值信息
- var sql_1 = "UPDATE payinfo SET \
- channel_order_id=?,\
- overtime=?,\
- flag=?,\
- money=?,\
- cfid=?,\
- platform=?,\
- channel=?,\
- moneytype=?,\
- product_id=?,\
- talkingdata=?,\
- payment_type=?, \
- istest=?\
- WHERE orderid=? \
- AND flag=2";//增加flag判断防止重复写入
- var values_2 = [channel_order_id,timestamp,1,amountnum,cfid,platform,channel,option.typename,product_id,1,payment_type,istest,cp_order_id];
- var sql_2 = mysql.format(sql_1, values_2);
- query(sql_2,function(qerr,rows,fields_)
- {
- if (qerr){
- console.log("[yuda]逻辑错误,请检查数据表结构和sql语句:\n\t%s", qerr);
- try{res.send("FAILURE");}
- catch(e){}
- return;
- }
- if (rows.affectedRows > 0){//判断修改了多少个记录
- console.log("[yuda]支付成功了,现在通知游戏服务器, orderId:%s, uid:%s, serverid:%s ,cfid:%s",
- cp_order_id,vals[0].uid,vals[0].serverid,cfid);
- checkorder.pushproduct(query,vals[0].serverid, cp_order_id, function(ok){
- if (ok) {
- console.log("[yuda] 订单 %s: 成功发货!", cp_order_id);
- } else{
- console.log("[yuda] 订单 %s: 发货地址无效!", cp_order_id);//在无效时返回成功,我们自己补单中会派发flag为1支付成功但是没成功发货的单
- }
- try{res.send("SUCCESS");}
- catch(e){}
- });
- // 向 TalkingData 报告充值数据
- var appId = config.getAppID(channel);
- if (istest == 2) {
- checkorder.pushtalkingdata(query,appId,platform,vals[0].uid,cp_order_id,option.price,option.typename,option.diamond,timestamp,payment_type,vals[0].serverid);
- }
- res.send("SUCCESS");
- return;
- }else{
- console.log("SQL重复写入[yuda]已经处理的订单");
- try{res.send("SUCCESS");}
- catch(e){}
- return;
- }
- })
- }else{
- console.log("[yuda] 查询订单列表错误,请检查数据表结构和sql语句:\n\t%s", qerr);
- try{res.send("FAILURE");}
- catch(e){}
- return;
- }
- })
- }
- var express = require('express');
- var router = express.Router();
- router.get('/yuda_pay', function(req, res) {
- var pos = req.url.indexOf('?')
- var str = req.url
- if (pos == -1) { //请求的url是否包含?包含返回-1,==-1为不包含
- console.log("yuda 回调接收未找到参数");
- res.send("FAILURE");
- } else {
- var data = str.substring(pos+1,str.length)
- pay_success(data, res)
- };
- req.on("error",function(err){
- console.log("error:%s",err);
- res.send("FAILURE");
- });
- });
- module.exports = router;
|