使用 node 调用支付宝支付接口

这篇文章中,我将简单介绍下在 node 中使用支付宝沙箱。

文章目录

1、起步

  1. 先注册支付宝开放平台账号:https://open.alipay.com/
  2. 登陆成功后,点击进入管理中心
    使用 node 调用支付宝支付接口
  3. 进入成功后,选择控制台选项,然后点击研发服务进入。
    使用 node 调用支付宝支付接口
  4. 在这个沙箱应用界面中等待着,待会再过来操作
    使用 node 调用支付宝支付接口

2、生成密钥

  1. 这时候还需要下载一个生成支付宝支付密钥的应用,下载地址:https://opendocs.alipay.com/common/02kipl,这里面有 window 和 mac 两个版本,按照自己电脑自行下载安装(直接点下一步就好,选择一个要安装的文件夹)
    使用 node 调用支付宝支付接口

  2. 安装好了之后来到下面这个页面:
    使用 node 调用支付宝支付接口

  3. 选择最常用的 RSA2 加密算法,这个是麻省理工发明的算法,几十年来都没有人突破过。然后再这下面有两个选择:PKCS8(JAVA适用)PKCS1(非JAVA适用), 因为我要用 node 演示,没用到 Java,并且我没有安装 Java 环境,这里选择第二个 PKCS1(非JAVA适用)。
    使用 node 调用支付宝支付接口

  4. 点击生成密钥,就会生成公钥和私钥。
    使用 node 调用支付宝支付接口

  5. 然后点击复制公钥的按钮,回到沙箱环境的界面,在开发信息中选择自定义密钥的选项。然后点击RSA2密钥(推荐) 后面的按钮。
    使用 node 调用支付宝支付接口使用 node 调用支付宝支付接口

  6. 在弹框加签管理页面中,选择公钥选项,将刚才在生成密钥的应用中的公钥粘贴进下面的输入框,然后点击保存设置。
    使用 node 调用支付宝支付接口使用 node 调用支付宝支付接口

  7. 添加密钥就已经完成了。

3、初始化项目

这里先给各位支付宝官方给的文档:https://www.yuque.com/chenqiu/alipay-node-sdk/config-sdk,可以保存下,以后要学习的时候可以看看。

  1. 建立一个新的文件夹,用编辑器打开
    使用 node 调用支付宝支付接口
  2. 首先初始化整个项目,在文件夹的根目录下打开控制面板,输入 npm init -y,初始化整个文件夹。使用 node 调用支付宝支付接口
  3. 然后要下载一个很重要的模块,就是支付宝支付的 sdk,输入命令:npm install alipay-sdk -S使用 node 调用支付宝支付接口
  4. 因为我要待会编写的 node 会用到 express 框架,所以再安装一下 express 框架:npm install express -S
    使用 node 调用支付宝支付接口

4、代码编写

这里我将会把完整的代码贴出来,每一条要用到的信息我会做说明的

//引入 alipay sdk 模块
const AliPaySdk = require('alipay-sdk').default

//引入 alibapay form 模块
const AlipayForm = require('alipay-sdk/lib/form').default

//引入 express 框架
const express = require('express')

// 实例化框架
const app = express()

// 引入框架的中间件
const router = express.Router()

// 挂载
app.use('/api', router)

//初始化alipay 配置
const alipaySdk = new AliPaySdk({
    appId: '', // 自己的id
    gateway:"https://openapi.alipaydev.com/gateway.do", // 这是支付宝官网沙箱测试网关
    privateKey: "", // 应用私钥
    alipayPublicKey: "" // 支付宝公钥
})
 
// 服务器发送请求
router.get('/pay', async (req, res) => {
  // 实例化 AlipayForm
    const formData = new AlipayForm()

    // 下面是官网的测试代码
    formData.setMethod('get')
    formData.addField('returnUrl', 'http://www.baidu.com'); //支付成功的回调
    formData.addField('bizContent', {
        outTradeNo: Math.random(), // 订单号
        productCode: 'FAST_INSTANT_TRADE_PAY', // 产品码
        totalAmount: '499999', // 商品金额
        subject: '凉爽爽爽爽爽爽爽爽爽的知识', // 出售商品的标题
        body: '本人的知识' // 出售商品的内容
    });
  
    //执行结果
    const reult = await alipaySdk.exec('alipay.trade.page.pay',{},{ formData: formData })

    // 返回一个 json 格式的数据
    res.json({
      code: reult
    })
})

// 开启服务器进行监听
app.listen(8080, () => {
  console.log('success, http://localhost:8080/api/pay')
})

我会一步一步来介绍的

  1. 首先就是引入几个重要的模块

    //引入 alipay sdk 模块
    const AliPaySdk = require('alipay-sdk').default
    
    //引入 alibapay form 模块
    const AlipayForm = require('alipay-sdk/lib/form').default
    
    //引入 express 框架
    const express = require('express')
    
    // 实例化框架
    const app = express()
    
    // 引入框架的中间件
    const router = express.Router()
    
    // 挂载
    app.use('/api', router)
    

    ① 引入的 AliPaySdkAlipayForm 都是我们安装支付宝 sdk 模块中的东西,注意每个模块的后面要加入 .default 这个属性
    ② 后面四行代码,都是我引入的 express 框架的东西,看不明白也无所谓,放在这里就行

  2. 下面的配置比较重要,这就是要进行支付宝支付的初始化配置。注意这里面的关键字都不能自己改动,后面要输入的值我会解释的。

    //初始化alipay 配置
    const alipaySdk = new AliPaySdk({
    	appId: '', // 自己的id
    	gateway:"https://openapi.alipaydev.com/gateway.do", // 这是支付宝官网沙箱测试网关
    	privateKey: "", // 应用私钥
    	alipayPublicKey: "" // 支付宝公钥
    })
    

    appId: 这个就是支付宝开发平台中的 id,把这个 id 复制进代码的 appId 中。使用 node 调用支付宝支付接口
    gateway: 这个就是支付宝官方的一个支付测试网官。
    privateKey: 这是私钥,打开我们之前生成密钥的应用,将私钥复制下来,粘贴进代码的 privateKey 中。使用 node 调用支付宝支付接口
    alipayPublicKey: 支付宝公钥,打开我们之前在支付宝开放平台中设置的公钥,然后将公钥复制下来,贴进代码的 alipayPublicKey 中。使用 node 调用支付宝支付接口使用 node 调用支付宝支付接口

  3. 下面就是对支付宝支付发送的请求了,这一段代码在官方文档中有编写:https://www.yuque.com/chenqiu/alipay-node-sdk/page_api

    // 服务器发送请求
    router.get('/pay', async (req, res) => {
    
    	// 实例化 AlipayForm
    	const formData = new AlipayForm()
    
    	// 下面是官网的测试代码
    	formData.setMethod('get')
    	formData.addField('returnUrl', 'http://www.baidu.com'); //支付成功的回调
    	formData.addField('bizContent', {
       		outTradeNo: Math.random(), // 订单号
       		productCode: 'FAST_INSTANT_TRADE_PAY', // 产品码
        	totalAmount: '9.89', // 商品金额
        	subject: '良辰的商品~', // 出售商品的标题
        	body: '衣服甩卖' // 出售商品的内容
    	});
    
      	//执行结果
     	const reult = await alipaySdk.exec('alipay.trade.page.pay',{},{ formData: formData })
    
     	// 返回一个 json 格式的数据
    	res.json({
    		code: reult
     	})
    })
    

    这里面就是固定的代码了,不需要改动代码,这里我说两点:
    ①代码 formData.addField('returnUrl', 'http://www.baidu.com') 中,第二个参数,是支付商品成功后,将要跳转到的网站。
    ② 代码 outTradeNo: Math.random(),这个是用来编写订单号的,每一个商品的订单号都是唯一的,当支付完这个商品后,订单号也不能再用了,所以这里我是用一个 Math.random,每次生成一个是随机数

5、支付商品

  1. 开启服务器 node pay.js
    使用 node 调用支付宝支付接口

  2. 打开开启的服务器,然后打开的页面如下,复制 code 后面的一串地址,然后在页面中打开
    使用 node 调用支付宝支付接口

  3. 注意,如果你是在当前浏览器中打开的话,会出现下面的页面:
    使用 node 调用支付宝支付接口

  4. 这是因为在当前浏览器打开不够安全,这个时候复制这个页面的地址,新开启一个浏览器(我这里使用 Edge 浏览器打开),再次打开这个地址
    使用 node 调用支付宝支付接口

  5. 登录支付宝的账户名和密码,账户名和密码在开放平台的沙箱账号中, 因为这里我代码中使用的是支付的接口,即我们是买家,所以找到买家信息,将账号和密码粘贴进浏览器的输入框中。使用 node 调用支付宝支付接口使用 node 调用支付宝支付接口

  6. 之后购买商品就行了。使用 node 调用支付宝支付接口

  7. 账号钱不够的话就去沙盒账号中充值,一次最多充 999999.99
    使用 node 调用支付宝支付接口使用 node 调用支付宝支付接口

  8. 当然了这里面都是测试用的钱,不可能取出来的,可以体验下花钱的快感。

6、结束

       完结散花

上一篇:人工智能Java SDK:实例分割(支持80分类)


下一篇:AS自定义模板,效率提升的不是一星半点,flutter推送sdk