这篇文章中,我将简单介绍下在 node 中使用支付宝沙箱。
文章目录
1、起步
- 先注册支付宝开放平台账号:https://open.alipay.com/
- 登陆成功后,点击进入管理中心
- 进入成功后,选择控制台选项,然后点击研发服务进入。
- 在这个沙箱应用界面中等待着,待会再过来操作
2、生成密钥
-
这时候还需要下载一个生成支付宝支付密钥的应用,下载地址:https://opendocs.alipay.com/common/02kipl,这里面有 window 和 mac 两个版本,按照自己电脑自行下载安装(直接点下一步就好,选择一个要安装的文件夹)
-
安装好了之后来到下面这个页面:
-
选择最常用的 RSA2 加密算法,这个是麻省理工发明的算法,几十年来都没有人突破过。然后再这下面有两个选择:PKCS8(JAVA适用) 、PKCS1(非JAVA适用), 因为我要用 node 演示,没用到 Java,并且我没有安装 Java 环境,这里选择第二个 PKCS1(非JAVA适用)。
-
点击生成密钥,就会生成公钥和私钥。
-
然后点击复制公钥的按钮,回到沙箱环境的界面,在开发信息中选择自定义密钥的选项。然后点击RSA2密钥(推荐) 后面的按钮。
-
在弹框加签管理页面中,选择公钥选项,将刚才在生成密钥的应用中的公钥粘贴进下面的输入框,然后点击保存设置。
-
添加密钥就已经完成了。
3、初始化项目
这里先给各位支付宝官方给的文档:https://www.yuque.com/chenqiu/alipay-node-sdk/config-sdk,可以保存下,以后要学习的时候可以看看。
- 建立一个新的文件夹,用编辑器打开
- 首先初始化整个项目,在文件夹的根目录下打开控制面板,输入
npm init -y
,初始化整个文件夹。 - 然后要下载一个很重要的模块,就是支付宝支付的 sdk,输入命令:
npm install alipay-sdk -S
- 因为我要待会编写的 node 会用到 express 框架,所以再安装一下 express 框架:
npm install express -S
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')
})
我会一步一步来介绍的
-
首先就是引入几个重要的模块
//引入 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)
① 引入的 AliPaySdk 和 AlipayForm 都是我们安装支付宝 sdk 模块中的东西,注意每个模块的后面要加入 .default 这个属性
② 后面四行代码,都是我引入的 express 框架的东西,看不明白也无所谓,放在这里就行 -
下面的配置比较重要,这就是要进行支付宝支付的初始化配置。注意这里面的关键字都不能自己改动,后面要输入的值我会解释的。
//初始化alipay 配置 const alipaySdk = new AliPaySdk({ appId: '', // 自己的id gateway:"https://openapi.alipaydev.com/gateway.do", // 这是支付宝官网沙箱测试网关 privateKey: "", // 应用私钥 alipayPublicKey: "" // 支付宝公钥 })
① appId: 这个就是支付宝开发平台中的 id,把这个 id 复制进代码的 appId 中。
② gateway: 这个就是支付宝官方的一个支付测试网官。
③ privateKey: 这是私钥,打开我们之前生成密钥的应用,将私钥复制下来,粘贴进代码的 privateKey 中。
④ alipayPublicKey: 支付宝公钥,打开我们之前在支付宝开放平台中设置的公钥,然后将公钥复制下来,贴进代码的 alipayPublicKey 中。 -
下面就是对支付宝支付发送的请求了,这一段代码在官方文档中有编写: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、支付商品
-
开启服务器
node pay.js
-
打开开启的服务器,然后打开的页面如下,复制 code 后面的一串地址,然后在页面中打开
-
注意,如果你是在当前浏览器中打开的话,会出现下面的页面:
-
这是因为在当前浏览器打开不够安全,这个时候复制这个页面的地址,新开启一个浏览器(我这里使用 Edge 浏览器打开),再次打开这个地址
-
登录支付宝的账户名和密码,账户名和密码在开放平台的沙箱账号中, 因为这里我代码中使用的是支付的接口,即我们是买家,所以找到买家信息,将账号和密码粘贴进浏览器的输入框中。
-
之后购买商品就行了。
-
账号钱不够的话就去沙盒账号中充值,一次最多充 999999.99
-
当然了这里面都是测试用的钱,不可能取出来的,可以体验下花钱的快感。
6、结束
完结散花