首页 > 其他分享 >egg.js 接入支付宝支付

egg.js 接入支付宝支付

时间:2023-01-15 01:00:21浏览次数:63  
标签:alipay 支付宝 service js controller 支付 egg

router

    //支付
    router.get('/alipay/pay', initMiddleware, controller.default.alipay.pay);
    //支付成功回调
    router.get('/alipay/alipayReturn', initMiddleware, controller.default.alipay.alipayReturn);
    //支付成功异步通知   注意关闭csrf验证
    router.post('/alipay/alipayNotify', initMiddleware, xmlparseMiddleware, controller.default.alipay.alipayNotify);

config配置

config/config.default.js
    //支付宝支付的配置
    exports.alipayOptions = {
        app_id: 'xxxx',
        appPrivKeyFile: "",
        alipayPubKeyFile: ""
    }


    exports.alipayBasicParams = {
        return_url: 'http://127.0.0.1:7001/alipay/alipayReturn', //支付成功返回地址
        notify_url: 'http://127.0.0.1:7001/alipay/alipayNotify' //支付成功异步通知地址
    }

支付前

controller

app/controller/default/alipay.js
    async pay() {

        // this.ctx.body='支付宝支付';


        var d = new Date();
        const data = {
            subject: '辣条111',
            out_trade_no: d.getTime().toString(),
            total_amount: '0.1'
        }

        var url = await this.service.alipay.doPay(data);

        this.ctx.redirect(url);

    }

service

app/service/alipay.js
    async doPay(orderData, ) {


        return new Promise((resolve, reject) => {

            //实例化 alipay
            const service = new Alipay(this.config.alipayOptions);

            //获取返回的参数
            // this.config.alipayBasicParams

            service.createPageOrderURL(orderData, this.config.alipayBasicParams)
                .then(result => {
                    console.log(result);
                    resolve(result.data);

                })
        })


    }

支付后

支付后跳转的地址

controller

app/controller/default/alipay.js
    async alipayReturn() {


        this.ctx.body = '支付成功';

        //接收异步通知        
    }

支付宝支付成功异步通知

引入koa-xml-body解析支付成功后的回调xml格式数据

app/middleware/xmlparse.js
module.exports = require('koa-xml-body');

controller

支付成功以后更新订单 必须正式上线

app/controller/default/alipay.js
    async alipayNotify() {

        const params = this.ctx.request.body; //接收 post 提交的 XML 

        console.log(params);

        var result = await this.service.alipay.alipayNotify(params);

        console.log('-------------');

        console.log(result);


        if (result.code == 0) {
            if (params.trade_status == 'TRADE_SUCCESS') {
                //更新订单
            }
        }

        //接收异步通知
    }

service

验证异步通知的数据是否正确

app/service/alipay.js
    alipayNotify(params) {

        //实例化 alipay
        const service = new Alipay(this.config.alipayOptions);

        return service.makeNotifyResponse(params);


    }

流程

点击 支付宝支付

订单信息

传入订单名称,订单号,总价

        const data = {
            subject: '辣条111',
            out_trade_no: d.getTime().toString(),
            total_amount: '0.1'
        }

点击去支付

clipboard.png

支付宝把我们的订单参数,加密封装,之后返回一个url,我们重定向,跳转到这个url,就是支付的页面

clipboard.png

支付宝支付页面

自动跳转到支付页面,url为支付宝自动生成
clipboard.png

扫码支付

clipboard.png

支付成功后,跳转的地址

clipboard.png

支付成功后,返回的xml参数,解析成json

clipboard.png

eggjs

标签:alipay,支付宝,service,js,controller,支付,egg
From: https://www.cnblogs.com/luoguixin/p/17052925.html

相关文章

  • 【linux】在linux上安装nodejs
    在linux上安装nodejs1.到官网上下载linux的源码包sourcecode(https://nodejs.org/en/download/)并上传2.使用解压命令解压tar-xvfnode-v10.14.1-linux-x64.tar.xz3.进入到......
  • 【JavaScript】使用WdatePicker.js插件限选一个时间范围(例如一个月)
    需求:公司处理的业务数据比较大,单张表就是几十上百万的。如果不加入指定的条件,指定的时间,限定条数的查。经过多张表的关联查询sql执行速度将会变得特别慢。之前限定时间都是......
  • JSP
          jsp中的Java代码应该是执行输出   重要!!!! ......
  • (8)SpringBoot整合JSP
    SpringBoot官方不推荐使用JSP来开发web页面,而是推荐如Thymeleaf,FreeMarker等模板引擎来开发,但是绝大部分做java的程序员还是习惯jsp;所以,本文先讲解SpringBoot如何支持jsp开......
  • [VueJsDev] 快速入门 - vue项目根目录配置文件
    vue项目根目录配置文件:::details目录目录​vue项目根目录配置文件​​​Part.1:package.json-入口文件​​​​Part.2:jsconfig.json-舒适度文件​​​​Part.3......
  • [VueJsDev] 快速入门 - vscode 设置推荐
    vscode设置推荐:::details目录目录​vscode设置推荐​​​Edit.1:GotoLocation​​​​Flow.2:创建tag并送到远程​​:::一些常用设置Edit.1:GotoLocationvscode......
  • [VueJsDev] 快速入门 - vscode 自动格式化
    vscode自动格式化(vue):::details目录目录​vscode自动格式化(vue)​​​Step.1:.editorconfig​​​​Step.2:jsconfig.json​​​​Step.3:.eslintrc.js​​​......
  • [VueJsDev] 快速入门 - vscode 插件推荐
    Vscode插件推荐:::details目录目录​Vscode插件推荐​​​Font.1:字体推荐​​​​Them.2:Ayu主题​​​​Them.3:SpacegrayVSCode​​​​Plug.4:Veturvue2......
  • [VueJsDev] 基础知识 - CommonJs VS ES Module
    CommonJsVSESModule:::details目录目录​CommonJsVSESModule​​​Part.1:CommonJs​​​​Part.2:ESModule​​​​Part.3:CJS对比ESM表​​​​Code.4......
  • [VueJsDev] 基础知识 - 常见编码集
    常用编码集:::details目录目录​常用编码集​​​Part.1:Unicode编码​​​​Part.2:ASCII编码​​​​Part.3:HTML实体名称​​​​Part.4:UTF8编码​​​​......