使用 alipay-sdk-nodejs 让 node 应用接入支付宝付款

本文介绍了如何使用alipay-sdk-nodejs让Node.js应用与支付宝对接,实现用户付款功能。详细讲解了从开发构思、前期准备到部署应用的步骤,包括Koa框架的使用、SDK的安装配置、请求接口的调用,以及Demo示例。特别强调了页面类接口的处理和异步回调的验签重要性。
摘要由CSDN通过智能技术生成

1. 开发构思

我们的总体需求是让 node js 应用接入支付宝,完成用户付款,具体流程是:

  • 当用户在商户应用点击付款后,页面跳转到支付宝界面,这时会出现两种情况:
    • 手机用户唤醒支付宝应用
    • PC 唤醒支付宝收银台
  • 用户在支付宝页面进行付款,并完成付款
  • 支付宝检测用户完成付款后向商户应用发送一个 POST 请求作为支付完成的异步回调
  • 商户应用对回调信息进行验证后,对订单状态进行变更
  • 用户返回商户应用,刷新订单界面,显示该订单已支付

2. 前期准备

我们以 Koa 为例,简单演示一下接入支付宝的具体流程,首先安装 Koa 本体以及所需的中间件:

npm install koa koa-router koa-static koa-bodyparser -S

之后需要安装阿里官方提供的 nodejs 端的支付宝 sdk:

npm install alipay-node-sdk -S

当所有的开发依赖准备完成之后,我们可以直接申请应用,同时也可以到支付宝开放平台上使用 沙箱环境 来模拟真实应用。在此我们以沙箱环境进行开发演示,在沙箱界面需要记住 APPID

image.png
同时点击下方的 RSA2 密钥,并下载密钥生成工具,分别生成私钥和公钥。我们要将生成的 应用私钥 记录下来,存放到 private-key.pem 文件中;之后再将 “应用公钥” 填写到页面中,从而会生成一个 支付宝公钥 ,记录该公钥到 public-key.pem 文件中,前期准备工作完成。如果还不清楚以上流程,参考 说明文档

我们来整理一下文件,将密钥文件整理在一起,这样前期准备工作就完成了:

.
├── package.json
├── package-lock.json
├── serve.js // 主服务
└── static
    ├── index.html // 客户端
    └── pem // 密钥存放文件夹
        ├── private-key.pem
        └── public-key.pem

3. 部署应用

3.1 alipay-node-sdk 的使用

当用户点击付款信按钮,会触发我们服务器上的一个路由条件,在这个路由中,我们的服务器主动向支付宝服务器发送了一个请求,请求中携带着该条支付的信息(如订单号、商品价格等),同时还携带了私钥信息,当支付宝服务器收到该条请求后,会向我们的服务器返回一个付款 url,我们的服务器再将该条 url 信息转发到前端页面上,由前端页面完成跳转逻辑。

而使用 alipay-node-sdk 就简化了我们的服务器向支付宝服务器发送请求信息的这一过程,它会将必要的参数与加密信息处理好,我们只需要传入业务参数就可以了。

构建 Sdk 实例

当我们引入 alipay-node-sdk 时首先要对其进行实例化以及全局参数的设置:

const AlipaySdk = require('alipay-sdk').default;
const alipaySdk = new AlipaySdk({
   
   appId: '2016**********710', // 之前我们所记录的沙箱环境的 sdk
   privateKey: fs.readFileSync('./static/pem/private-key.pem', 'ascii'), // 传入私钥
   gateway: "https://openapi.alipaydev.com/gateway.do" // 沙箱环境的请求网关与正式环境不一样,需要在此更改,如果是使用正式环境则去掉此处的设置
 });
alipaySdk.exec()

alipaySdk.exec() 方法可以帮我们简便的发送一个业务请求,在 支付API文档 中我们可以查看到所有的业务请求列表,我们以发送一个 统一收单交易关闭接口(alipay.trade.close) 为例:

const result = await alipaySdk.exec('alipay.trade.close', {
   
  notifyUrl: 'http://notify_url',
  appAuthToken: '',
  // 通过 bizContent 传递请求参数
  bizContent: {
   
    tradeNo: '',
    outTradeNo: '',
    operatorId: '',
  },
});

// 从官方文档看到,result 包含 tradeNo、outTradeNo 2 个 key
console
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值