(四):支付流程(后端):提交订单,对接沙箱支付宝 nodejs版

472 阅读3分钟

四:提交订单,对接沙箱支付宝 nodejs版.png

前端:juejin.cn/editor/draf…

后端

一 前置准备工作

  1. 进入支付宝沙箱环境:用自己的支付宝扫码登录 developers.alipay.com/dev/workspa…

  2. 登录后 填写信息

image.png

  1. 填写完信息,进入这个页面:点击设置,点击公钥 openhome.alipay.com/platform/ap…

image.png

image.png

  1. 下载工具:【支付宝开放平台开发助手】:opendocs.alipay.com/open/291/10…

image.png

  1. 打开下载好的工具,登录之后生成秘钥

image.png

  1. 将生成的秘钥中,复制公钥 到 步骤 3 的公钥输入框中,点击保存设置,关闭弹窗之后,刷新步骤3的页面,可以点击 【设置/查看】

image.png

二:沙箱api

  1. 语雀:www.yuque.com/chenqiu/ali…

  2. 后端安装:npm install alipay-sdk -S ,安装完成记得启动自己的后端项目

  3. 在后端目录中 新建一个js文件 作为对接支付的内容配置文件

image.png

// 引入sdk 必须这样引入 否则报错,官方文档那里没有写清楚 :https://www.yuque.com/chenqiu/alipay-node-sdk/config-sdk
const AlipaySdk = require('alipay-sdk').default;

// 前4个参数在这个页面获取 :https://openhome.alipay.com/platform/appDaily.htm
//最后一个在 下载的工具 生成秘钥获取:应用私钥
const alipaySdk = new AlipaySdk({
    appId: '2021000118605577', // appid
    signType: 'RSA2', // 签名算法
    gateway: 'https://openapi.alipaydev.com/gateway.do',// 支付宝网关
    alipayPublicKey: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmineLOV9vEF0H39/tWVDes1ASQLUwN/z5UWflWvb/M+iDZpBPCEgPZjRbyBD7sBTApQSv2dvVM+7V5klaei+TlYmxgNd1zgWlJJkFECkQRCP3lvQmUfuJnEU/0Vx5GS/7xrQy7RaoBUGd+0P4HD48bx/DkTGQDZxWzb6C8KH7y5zRJKEP19IR9eF+7QcKIIBaclxRxHy5JqlRK2bC2ikr85RuTd9LPi2fX8eOHsPVQSutx50rrpEDQY7vJfNbGICeQUohK4c6SMltfDef2Lo4tR6u4FS7eM22mjkH7fRnDRiDD580lkMX73CDcQLYhs3RdtfnkF71jeBw3QxItPJGwIDAQAB', // 支付宝公钥
    privateKey: 'MIIEpQIBAAKCAQEAhvEeA4nJ+IqT7puj8iRmezoCLbaMpaU+30AQmfqAdIadRqfJ1Js1dvwtL8MYKlJw6obKca2ZI0TxKQ0tu7PfAg2QJLoWAQ/RLWOXpvnd/jrQb4c4iNlsDPGFE+a6V36HWPkkRBM5odGSznDUCCBx9RQtr59Xps+HZvHk88CUiTb8ecM/vOpNxHYrjERVdWkXNDjzxi/CyLK3/qjvn16g54SD/COIaXTJOzm/lXl8ba3B3rEuzqWKq8riwxwLrrxbBXNjc0Cv4a5wIDeqAAuvjtHWqKwDhVaxKMTgAQzIIKg3XabfhyXrzuS6yRFMsLRQayfrY4y4cNofZKKYLT5MtwIDAQABAoIBAFmWfuyucA64Qhpp7mB2Vit9ibC7v4jBuooRSHRR4TJ7pLMh9ldWbBqAtac+CS8f6KNrtb/fFwpZXRp6C2DQvD/qrUYU3UL7M07FDgvnW8DLX1KMHbaNUrUNK+LYjeJEuKsTTUZ81Qhf0O2J7tsuXznsmaA9U74FjcmE0xIZSwQFK+v4Sd03veM2J0Md9ZSlSEaVoekuXUznGzWuFG2jVTAybJuMx2UudOfmq86IUv+6Qutu37uCvaHneAAP6UXSl9g3JY8LdBUcElnoCzdjeMCYfwixgCI5/ZC6VK+qRVcoYidqR9TeSDqKCk/S8t+Bywn2vOilKGmcHrdYrXI9n1ECgYEAyTVBYX9+LEBQOgN/l/4shjJ8GDuHW0xAsMmNObg3J0YIlT2LKVLdpbvVkojB9g5jp2K4zP7zKDaz6lsYHnukiWkE8fTgH+DzJPCjwkDWtqEZEfCYmEri4HyRl7tD0V1F4zrnpNCseugUzJahVlUk4tWr9rX3szIKYWQ9yh/DfQMCgYEAq7BFobkZpYp6lWxa1E2BGCsEsdhMLiLVjmYKk5pEcQ4cgYUCVNbM1TT6CSDircHnmz673gCWbiaAH919as51fUTvVUY3l/FKt9Kc5pXUIzVgwBlmpRcdOFDWuStNfoz8KAJWRLtbcH8myt8/AXyod0UaMuJbyhMFloNkY2w5gT0CgYEAomhVHMCO9GL5HsqiG+oywCNR3TF3oS7cbJZTYwqZoh66YNQrVrCnbdY+nqe6f8S/lWVvKzCCzqvQ71KWFkzQ04UsU6zHl5O4TtHaLLqvVPyVwtBEK3EOzgpebm3eYMj71109iuBQyGg6GaVgFtJlEp9Lzbi1djPnAxOpeFPJNEcCgYEAgJQVweU3ANPxtCAe8epNaQUmke5UNyUdXHStLReWdDjGPnWXZmQrqOzw6I85VDnos0pLNhqojjvFLpgZCjkuoi9TMkDQ97jcZUiU+tdwtSGPoK4lQjRKTNe1x51XfxQk7+24H+dUtq5zJfIFZJ6wKAqXcU42weJ3B97E+vSdKF0CgYEAtq4vKcPMD/jRY9iKUQOno7jchp3hxeo4F/G2+yMJCHemuhMyVIIeotxgGs0zV0qnaB/6d/N5mjq8/UfTzKlKHzzP7tVZlYw9HAsYwXW0+ydb3HNRlNGm6aeaAM0HQpSbCZ7tpol/EOOohSMX8Q3jKq9W6f7EhLtKsf+OikPHRlg=' // 应用私钥
});

module.exports = alipaySdk;

5. 在后端写接口文件中routes的index.js 引入 步骤4创建的配置文件 和 另一个模块

     // 引入支付宝配置文件
    const alipaySdk = require('../sql/alipay');
    const AlipayFormData = require('alipay-sdk/lib/form').default;


    // 对接支付宝接口/api/aliPay
    router.post('/api/aliPay', function (req, res, next) {
      // 接收前端传过来的参数
      let {
        totalPrice,
        orderId,
        shop_title
      } = req.body

      //开始对接支付宝:返回支付链接(PC 支付接口 参考) https://www.yuque.com/chenqiu/alipay-node-sdk/page_api
      const formData = new AlipayFormData();
      // 调用 setMethod 并传入 get,会返回可以跳转到支付页面的 url
      formData.setMethod('get');
      // 支付时信息
      formData.addField('bizContent', {
        outTradeNo: orderId, // 订单号
        productCode: 'FAST_INSTANT_TRADE_PAY', // 写死的
        totalAmount: totalPrice, // 价格
        subject: shop_title, // 商品名称 
      });
      // 支付成功或失败跳转的链接 : 自己在components 的cart创建了一个 Payment.vue 组件
      formData.addField('returnUrl', 'http://localhost:8080/payment');

      // 返回promise
      const result = alipaySdk.exec(
        'alipay.trade.page.pay', {}, {
          formData: formData
        },
      );
      // 对接支付宝成功,支付宝放回的url
      result.then(resp => {
        res.send({
          data: {
            code: 200,
            success: true,
            msg: '支付中',
            paymentUrl: resp
          }
        })
      })
    })