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: ‘2018122062672017’, appPrivKeyFile: “MIIEowIBAAKCAQEAytRAWUJE+t7Xg62PFPpwCxaIBwO942bZX2ehlHbdLSs0i1H3xHlIGTF/0pAYksLuXq8ovyGW263MqvAjt5n97JPjD1ip9eFuIZhZ2wbrOac+MerE+x7agDOBgmJGwdffxbGRRkjz/OtwrIfIVf7TcAm/MPSAuD3RAIkvVXzQO16x6BnBnev1JR+HybeyUssMCk1y6JZ2pZ4H62gGKGvDQcV8NW0q7g4qu2CwQKMVhbnMpG/wRuIla/MOB9MPZiV4CINsxNGya5mmzkXTemjheRl9me6dEZEgKU+tcgTH5Y36faRphbQQ9ATAt3EZQXw4gkoO9vHyEsf7mAAOofQyVQIDAQABAoIBAG+PpUEzKRvPnDyqJuwD/8KphvJMxZIhjOhj6MTvSCJDBGipEh24E8b/qe3YIhv/KftcXo4aXI7CHrPa19px0e/hO9/CBeHfN6M02B+Xw6P3cEcmeWgihU5EhjR/96lBIqzrSRuensz7dwL+wFtEiWmzgrzbjz1HiwC/dBCSUTqFlT7+M+xx8N6w3gQbZ8bpW33XY4KB26C5G8/g6ImEMUbNez8p+24qVztszHWfDHmGJp//Z4g6dgyd2RNrNZdzCyNmlsFRYRXgKa1WbC7qi2ihPUMmYLhlD5OFwZkGbk7bPy+GTYfAK6JjHRjONtdcE06pVFPUMlr7OL96MsABt1UCgYEA8YEPuvbE0Y4i+YlHrYxJ8iJ8WceWL1mNp6QFG6cNQ06+ohPhVVjEdKSFLQIz03aRGQI+E6Kuki5JVwlUeUmqJM1LJxA7NEm9b+YNQG+Y/23FcYAbuaiJp22qpo45XNLSs6QoKcqyJkZwM/Niv07mLP907PSt6WzM4a10vVs+pu8CgYEA1wDpWdxPpUsVfggCrfel6DveLzHvtX4DWPbL9NXj2j39B6Y0+1BuHMw5WZ/GoZxC0Gi/buuspwaqws9HiGg5ttMJqz23YOKUwHkpZrIpZjyVAjDoRduKcaX3q4/NCs5CPzWoGjfcJXoxcoZuYos5/kg+tXhmsH/DA0jmTfyR2vsCgYATZ71t1npGJFenGWLLDSS78g1v4Vut/lIlkEZgzHGCYQdsWpCWnQVcIgQZc73aVgKesdFvHnlMga+e8L765/Jl9qD9SI6ZSvuPzDpwXQc8LwPYdOTFbEdzTpqRu4fcb4xCpwQbJ5BdBvfpFLtwh9Ry9SveBmMbCIUF9TwWIwjLvQKBgFcQpG5iO9J4zFREFCm0rneTvs6nzyVUyTA+iKs17lYTYiK12KComl6JCPRVMk+BgsD4mgTl5P2iQoYvAA2p/y0c2r6AeIEAYDJtHinbHc6r27+OZJDdbXvGNLxBuEuW6NbF+LPdSQXYLKvu6kZ3kN17DgHYpuT0Z9ktrS2JiNr/AoGBAMBMG/25ioZMVuMFL2D1NqW221NLGMnHtFSATT1o6XGNEd5/PABCei7l2KSSrv93wyXllnk6cVauSn32zmKNWC0i6Ei89wYIUlgF7grRxBWHm0H8hgbss4YHqEf19t8Fu9QW0g48VXWsZaDmoNQotxytWx3rJ5jIuvz8xWz+UkbH”, alipayPubKeyFile: “MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhb/KlxYfhRE8KRp92MQM8ZB8NVjoM9LYFOnPIuNtcMZVA8ld7ybDP2FiA+QEE7wLGqMImwl1Y4xzkrTLCjHVC8fdR8ZvzZR2I3ZOrARerI9+RbkCfT+7YLv55+A+WTHEyiB+v7PfXVTT28s0CHNLPXMyQD1u8UVEQEpbMSs8hH3pJF55Li7kc5VvJpV3RVO9TXZTVAA5mSp9FvO3u+47IJDgFVLnqqHh6ETL1nHVpxiAY2LGer+RWpVYD8v+We+VWsrfJP7bO0xr2pwizldepo8YNYPgcIAIwd7KiveypL1pA0xWgSjUHzrkVh1j/nSnvJgKSdydU/VRcaVt/Mt8wwIDAQAB” } exports.alipayBasicParams = { return_url: ‘http://127.0.0.1:7001/alipay/alipayReturn’, //支付成功返回地址 notify_url: ‘http://127.0.0.1:7001/alipay/alipayNotify’ //支付成功异步通知地址 }支付前controllerapp/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); }serviceapp/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); }) }) }支付后支付后跳转的地址controllerapp/controller/default/alipay.js async alipayReturn() { this.ctx.body = ‘支付成功’; //接收异步通知 }支付宝支付成功异步通知引入koa-xml-body解析支付成功后的回调xml格式数据app/middleware/xmlparse.jsmodule.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’ }点击去支付支付宝把我们的订单参数,加密封装,之后返回一个url,我们重定向,跳转到这个url,就是支付的页面支付宝支付页面自动跳转到支付页面,url为支付宝自动生成扫码支付支付成功后,跳转的地址支付成功后,返回的xml参数,解析成json