194.Vue.js智能扫码点餐系统(二十八)【支付宝支付流程、Nodejs支付源码解析、 实现支付功能(支付宝支付)】2019.04.01

0、知识点

  • 支付宝支付流程

1、支付宝支付流程

2、Nodejs 支付宝支付 sdk alipay-mobile

在这里插入图片描述

在这里插入图片描述

  • 使用浏览器支付页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 支付成功返回到网站的首页
    在这里插入图片描述

  • 使用手机支付页面

在这里插入图片描述
在这里插入图片描述

  • 支付成功返回到网站的首页
    在这里插入图片描述

  • nodejs 后台api接口

/**
 * Created by Administrator on 2019/4/01 0020.
 */

var router=require('koa-router')();
const DB=require('../module/db.js');
const config=require('../module/config.js');
const tools=require('../module/tools.js');
const feiyun=require('../module/feiyun.js');

//支付宝
const Alipay = require('alipay-mobile');

const assert=require('assert');



router.get('/doPay',(ctx)=>{
		
		//appPrivKeyFile 本地生成的
	   // alipayPubKeyFile: 蚂蚁金服公钥   支付宝公钥
     const options = {
        app_id: '2017122101048570',  // app_id 是你申请账号的时候获得的
        appPrivKeyFile: "MIIEowIBAAKCAQEA2YqSo7uX27Fdi32MEx2hAmfZUWl19KNovLLEm3P6mlQYkD7+ThVE8468n8meyTBl2QC8YXQVbGANbFdwdcxldDnOUKv7f9VFiaXn+jT0t9hJ00t5HLJ2yY85hMWFhuO+wxIjZdJ82u4dekY7F2T32wC7qIx4dsncPVfCvW4nB8Co6+eVi+PBEkp92HiBk/b4HbjhZxBCe9urbiN9syO5ZlVzAPUDcDvlRVSICv0S9BzWCQPjzxO8sd6jvJ/EFBmbz9VjvFbOkwSoibElY7kShDtAR2Ae/PTzEF2hvOUKVI/hW7T2p7VewgYF1kcPxlLoZJ8Zljxn7EYhMmsfukbPHQIDAQABAoIBAHPUS9XwWaA5ZTSTiZTYDtXoE5c8jvjOVUM78GFRNJsdseKEGAXdX1RLqPVvdiNrqJ8NvEArfgixcBRCznd6eH6VFNxxZj0fgqIS+1yG+9Iz0MM3iWoVQBh8MUUXosw60WSucLiThbVQWdO0N1xyf2JVlpXdDXs6ahEjfGY+k3uVR0No0qIBgwirM2Ofyk3orgBFxXgEbjpoAindpglrqhw2LlMMNb9wwNkjzB/guiYhRu3xOoodstPqcR/FXy0WLRc6W+pxF83E7lPJ22U3DLM2yIc4NQjGxa8Kfkhm0fQUQz5M1akRfk0nj6w8sIjd5XJKgw+Cjosh4EubHVptpyUCgYEA8DzEleQo01hdZqHLeYBghbuEuoFm+N80Xk/7i4Dxlny2R4ZO/sCH3ZURbwcI4kA2WvdScB2Lir9NI10HJNW3xJRjVpumPzfrNxLoYZb+2h0eSS6peIlMAidZyspwGEwLE+jelnMQu8IVbKQ0aTN8tjpKolbpII95Tlq58Ijf8ksCgYEA59CVDkNU+dCufVnLHkOASrd0AGmXMccKeBZfpNlZIdmH9/KBRbXiUec8TWgDwfZg8e//FMCA7r4Y4pj2XZhb+G0M3FfBf2hjKjkqVDEv9+3zYK4zI07ts2WRvkLgY+SvzFYwSEo/U72zka1ocWdDZtiNdXqqAC5DTTc6zIIsozcCgYBPDdAq+v+sPIHPyiIpA2O/3isZLIf0EY8sEenWyEG3oaZh9wJ7tmN/ORSZkpkLytGYMZbBKhfHOphpsK0vI9zrJWFjGKkmWIJghypNIuEOaVKUBnTiI1wNwWE86Ezm0e87SAAnRgoVnxJpw8czbyv0003ICg2BF3V1oUlaq8/17QKBgAD+cvUpsr6Td3wQG3/YuD8ZxESQL1bGTLQxHF3flLNBdITKpGVBH2RMgoSucn2tacL/zW8wWB0t8XtfPocuNQ6+oPR859Z9AxfWQOk1gMgmXAnJFW0MVJaVU+el78Jd46cTo4db0iOwx4lTXgRGdhKF0S10xi/UAvPczcK8uCZHAoGBAN+74UouDYmZaAfzj5O0857ZVHBiXtJ5AasYqbBALZ17EqTjscYcD3nlvWhoX7JtGAyU09fuH23NK6hpi3yk67KUBuJOab+wjjDUIIAveFqjmiaV+Ra727v39d2ide534ikOfz04RDiAUVA43V+a3kdaAXuvTfhF+mczjN3joFtm",
        alipayPubKeyFile: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhb/KlxYfhRE8KRp92MQM8ZB8NVjoM9LYFOnPIuNtcMZVA8ld7ybDP2FiA+QEE7wLGqMImwl1Y4xzkrTLCjHVC8fdR8ZvzZR2I3ZOrARerI9+RbkCfT+7YLv55+A+WTHEyiB+v7PfXVTT28s0CHNLPXMyQD1u8UVEQEpbMSs8hH3pJF55Li7kc5VvJpV3RVO9TXZTVAA5mSp9FvO3u+47IJDgFVLnqqHh6ETL1nHVpxiAY2LGer+RWpVYD8v+We+VWsrfJP7bO0xr2pwizldepo8YNYPgcIAIwd7KiveypL1pA0xWgSjUHzrkVh1j/nSnvJgKSdydU/VRcaVt/Mt8wwIDAQAB"
    }     
    
    const service = new Alipay(options);
 
    const data = {
        subject: 'aaa',
        out_trade_no:'1234222232532235',
        total_amount: '0.1'
    }
    const basicParams = {
        "return_url": 'http://a.itying.com',  // 支付成功后,跳转到的页面
        //异步通知地址,通知后台更新订单
		"notify_url": "http://a.itying.com/api/alipayNotify",
    }
    return service.createWebOrderURL(data, basicParams)
    .then(result => {
        assert(result.code == 0, result.message)
        assert(result.message == 'success', result.message)
        console.log(result);
        // ctx.body={"title":result};
        ctx.redirect(result.data);
        
    })
   
})



// 异步更新订单
router.post('/alipayNotify',async ctx=>{  

    // var data=ctx.request.body;
    // console.log(ctx.request.body);   
     const options =config.aliPayOptions

     const service = new Alipay(options);

     const params = ctx.request.body;
     
     const result = await service.makeNotifyResponse(params);      

     if(result.code==0){
        
        console.log('success');
        ctx.body='success';

     }
   

})


//商品列表
router.get('/productlist',async ctx=>{
    var pcate=await DB.find('productcate',{},{'_id':1,"title":1,"pid":1});
    var product=await DB.find('product',{},{'_id':1,'cate_id':1,'catename':1,'title':1,'price':1,'img_url':1});
    for(var i=0;i<pcate.length;i++){
        pcate[i].list=[];
        for(var j=0;j<product.length;j++){
            if(pcate[i]._id==product[j].cate_id){
                pcate[i].list.push(product[j]);
            }
        }
    }
    ctx.body={"result":pcate};
})


//商品详情
router.get('/productcontent',async ctx=>{
    try{
        var id=ctx.query.id;
        var product=await DB.find('product',{'_id':DB.getObjectId(id)});
        ctx.body={"result":product};
    }catch(err){
        ctx.body={"result":'',"err":err};
    }

})

//购物车 koa2
router.post('/addcart',async ctx=>{
    
    var data=ctx.request.body;

    //console.log(data);
    try{
        var uid=data.uid;

        var product_id=data.product_id;

        var num=data.num;

        var hasData=await DB.find('cart',{'uid':uid,'product_id':product_id});


        if(hasData.length>0){            
            await DB.update('cart',{'uid':uid,'product_id':product_id},{'num':hasData[0].num+num})
        }else{
            var result=await DB.insert('cart',data);        
        }
        ctx.body={"success":'true',"msg":"增加数据成功"};

    }catch(err){
        ctx.body={"success":'false',"msg":"增加数据失败"};
    }
})


//购物车
router.get('/cartlist',async ctx=>{
    

    var uid=ctx.query.uid;

    var result=await DB.find('cart',{'uid':uid});
    ctx.body={"success":'true',"result":result};

})



//增加购物车数据
router.get('/incCart',async ctx=>{
    var uid=ctx.query.uid;
    var product_id=ctx.query.product_id;
    var num=parseInt(ctx.query.num);
    var result=await DB.update('cart',{'uid':uid,'product_id':product_id},{"num":num+1});
    ctx.body={"success":true};
})


//减少购物车数据
router.get('/decCart',async ctx=>{    
    
    var uid=ctx.query.uid;
    var product_id=ctx.query.product_id;
    var num=parseInt(ctx.query.num);
    if(num<=1){
        var result=await DB.remove('cart',{'uid':uid,'product_id':product_id}); 
    }else{
        var result=await DB.update('cart',{'uid':uid,'product_id':product_id},{"num":num-1}); 
    }
    ctx.body={"success":true};
})

//获取购物车数量
router.get('/cartCount',async ctx=>{ 
    
    var uid=ctx.query.uid; 
    var result=await DB.find('cart',{'uid':uid});


    //console.log(result);
    var sum=0;
    for(var i=0;i<result.length;i++){
        sum+=result[i].num;
    }
    ctx.body={"success":true,"result":sum};
})

router.get('/focus',(ctx)=>{
    ctx.body={"title":"这是一个轮播图的api"};
})

//增加用户餐位信息

router.post('/addPeopleInfo',async ctx=>{

    var data=ctx.request.body;

    //console.log(data);
    try{
        var uid=data.uid;
        
        var p_num=data.p_num;

		 var p_mark=data.p_mark;

        var hasData=await DB.find('peopleinfo',{'uid':uid});

        if(hasData.length>0){
            await DB.update('peopleinfo',{'uid':uid},{'p_num':p_num,'p_mark':p_mark})
        }else{
            var result=await DB.insert('peopleinfo',data);
        }
        ctx.body={"success":'true',"msg":"增加数据成功"};

    }catch(err){
        ctx.body={"success":'false',"msg":"增加数据失败"};
    }

})


//用餐人数列表
router.get('/peopleInfoList',async ctx=>{
    var uid=ctx.query.uid;
    var result=await DB.find('peopleinfo',{'uid':uid});
    ctx.body={"success":'true',"result":result};
})




//提交订单
router.post('/addOrder',async ctx=>{

    var data=ctx.request.body;

    console.log(data);

    try{

        //获取数据
        var uid=data.uid;

        var p_num=data.p_num;

        var p_mark=data.p_mark;  /*备注口味信息*/

        var order=  ctx.request.body.order?JSON.parse( ctx.request.body.order):'';  /*菜品信息*/

        var order_id=tools.getOrderId();

        var total_price=data.total_price;

        var total_num=data.total_num;

        var order_status=0;   //0表示  未确认    1 表示已经确认      2表示取消

        var pay_status=0;   //0表示未支付  1表示已经支付

        //var pay_type=data.pay_type;     1 微信支付   2支付宝
        var d=new Date();
        //判断当前桌子下面有没有  没有取消并且未支付的订单    如果有的话更新   没有增加
        var shopOrderResult=await DB.find('shop_order',{"uid":uid,"order_status":{ $not:/2/},"pay_status":0});

        if(shopOrderResult.length>0){/*更新订单*/
                //增加订单主表
                var shop_order_result=await DB.update('shop_order',{"uid":uid,"order_status":{ $not:/2/},"pay_status":0},{
                    total_num:total_num+shopOrderResult[0].total_num,
                    total_price:total_price+shopOrderResult[0].total_price
                })
                for(var i=0;i<order.length;i++){
                    await DB.insert('shop_order_item',{
                        order_id:  shopOrderResult[0]._id.toString(),
                        title:order[i].title,
                        price:order[i].price,
                        num:order[i].num,
                        status:1    /*状态是1 表示已经下厨     状态是2表示退菜*/
                    })
                }

        }else{/*增加订单*/
                //增加订单主表
                var shop_order_result=await DB.insert('shop_order',{
                    uid:uid,
                    p_num:p_num,
                    p_mark,
                    order_id,
                    total_num,
                    total_price,
                    pay_status,
                    order_status,
                    add_time:d.getTime()
                })
                //增加订单二级表
                if(shop_order_result.insertedId){

                    //[{"_id":"5ac2e79b127ca21160ffe32a","shop_id":"5ac079f7b3c2d439307e78fa","cate_id":"5ac089e4a880f20358495509","title":"东鹏特饮2018年世界杯传播","price":"2.8","description":"规格:250ml/瓶","num":2},{"_id":"5ac0f69329debd46cc594b42","shop_id":"5ac080399406da3ebc502238","cate_id":"5ac089e4a880f20358495509","title":"农夫山泉东方树叶茉莉花茶500ml","price":"4.5","description":"规格:500ml/瓶","num":11}]
                    for(var i=0;i<order.length;i++){
                        await DB.insert('shop_order_item',{
                            order_id:  shop_order_result.insertedId.toString(),
                            title:order[i].title,
                            price:order[i].price,
                            num:order[i].num,
                            status:1    /*状态是1 表示已经下厨     状态是2表示退菜*/
                        })
                    }
                }
                ctx.body={"success":'true',result:{  /*返回生成的订单号*/
                    order_id:order_id
                }}



        }

        //打印小票

        var orderInfo=tools.getOrderPrintInfo(total_price,p_mark,uid,order);
        feiyun.print('918502453',orderInfo);
        

        //清空购物车数据
         await DB.remove('cart',{"uid":uid});
        ctx.body={"success":'true',"msg":"增加数据成功"};


    }catch(err){
        ctx.body={"success":'false',"msg":"增加数据失败"};
    }

})
//获取用户的订单信息
router.get('/getOrder',async ctx=>{

    var uid=ctx.query.uid;

   try{
        var orderResult=await  DB.find('shop_order',{"uid":uid,"order_status":{ $not:/2/},"pay_status":0});
        var orderItemResult=await  DB.find('shop_order_item',{"order_id":orderResult[0]._id.toString()});
        orderResult[0]['items']=orderItemResult;
        ctx.body={"success":'true','result':orderResult};

    }catch(e){
        ctx.body={"success":'false','message':'非法请求'};
    }

})



module.exports=router.routes();

猜你喜欢

转载自blog.csdn.net/youyouwuxin1234/article/details/88939002
今日推荐