支付宝支付 sdk node版
npm install cl-alipay
const Alipay = require("cl-alipay");
// 初始化 sdk 配置
const alipaySdk = Alipay.config({
appId: "沙箱里的APPID", //支付宝沙箱appId
signType: "RSA2", //默认的加密算法
gateway: "https://openapi.alipaydev.com/gateway.do", //默认的支付宝网关
alipayPublicKey:"支付宝公钥",//支付宝公钥
privateKey:"应用私钥" // 应用私钥
});
支付宝沙箱网址:https://open.alipay.com/develop/sandbox/app
在首页里 点击启动公钥模式,再点击查看支付宝给我们提供的支付宝公钥和应用私钥
该函数的作用是配置sdk的基础值,用于与支付宝通信
config:{
appId, //支付宝沙箱appId
signType, //加密算法 默认值为 RSA2
gateway, //支付宝网关 默认值为 https://openapi.alipaydev.com/gateway.do
alipayPublicKey, //支付宝公钥
privateKey // 应用私钥
}
返回值 alipaySdk 对象
示例:
const Alipay = require("cl-alipay");
// 初始化 sdk 配置
const alipaySdk = Alipay.config(
{
appId: "你的沙箱里的APPID",
alipayPublicKey:"你的支付宝公钥",
privateKey:"你的应用私钥"
}
);
该函数的作用是与支付宝进行通信,接收传递过来的商品数据并传入到支付宝后台,在用户完成支付后跳转到指定网址
alipaySdk:Alipay.config 函数的返回值作为 alipaySdk
bizContent:商品对象,包括如下属性
const bizContent = {
outTradeNo: "商品订单编号",
productCode: "商品代码",
totalAmount: "商品价格",
subject: "商品名称",
body: "商品详情",
}
returnUrl:支付完成后同步跳转的网址,前端路由,该返回地址上携带商品信息以及支付宝订单信息
notifyUrl:可选值,支付完成后由支付宝发起的异步支付回调地址,公网后端服务器地址,一般用于支付成功后,接收到支付宝的回调进行数据库的操作
**返回值是一个 promise ** ,promise的结果中包含要跳转的支付网址 URL:跳转支付宝支付的网址
示例:
const Alipay = require("cl-alipay");
// 初始化 sdk 配置
const alipaySdk = Alipay.config(
{
appId: "你的沙箱里的APPID",
alipayPublicKey:"你的支付宝公钥",
privateKey:"你的应用私钥"
}
);
Alipay.pay(alipaySdk, bizContent, "http://localhost:8080/pay-success")
.then( url=> console.log(`该地址给前端返回${url},用于支付页面的跳转`))
该函数是作用是查询用户订单是否支付成功
alipaySdk:Alipay.config 函数的返回值作为 alipaySdk
bizContent:订单号对象,里边包含两个属性,一个是out_trade_no,是商品订单号,另一个是trade_no,支付宝订单号
返回值 promise对象 结果为查询订单后的结果集
示例:
// 获取前端传递过来的商品订单号和支付宝订单号
// 需要注意的是,用户支付完成后才能获取支付宝订单号
const { out_trade_no, trade_no } = ctx.request.body;
Alipay.verifyPay(alipaySdk, {
out_trade_no: "商品id",
trade_no: "2023030922001476421000663465",
}).then(result=>{
console.log(result)
})
1.先清楚是由前端用户点击购买按钮后,前端发起一个请求到后端获取商品订单号,根据这个订单号,展示用户要购买的商品。
2.当用户点击支付按钮时,前端将该商品信息传入服务器后台,服务器与支付宝进行通信完成支付。
3.当支付完成后,会直接跳转到提前设置好的页面中,显示支付情况。
4.也可以设置异步回调,由支付宝通知服务器完成支付,进行后台数据库的更新操作。
假设当前处于后端服务器支付宝支付的路由中:
// 1.引入sdk
const Alipay = require("cl-alipay");
// 2.配置 alipay sdk
const alipaySdk = Alipay.config(
{
appId: "你的沙箱里的APPID",
alipayPublicKey:"你的支付宝公钥",
privateKey:"你的应用私钥"
}
);
// 3.获取前端传过来的商品数据,
// 需要注意的是该对象的属性名不能随意更改,只能按照下边的来传值,也就是说商品名属性为subject,而不能改为productname
const bizContent = {
outTradeNo: "2022030123943749", //商品订单号
productCode: "FAST_INSTANT_TRADE_PAY", //产品码
totalAmount: "9999.99", // 价格
subject: "iphone13 Pro Max", //商品名字
body: "512G 远峰蓝", // 商品详情
};
// 4、Alipay.pay 发起支付,返回一个promise,res里的值是支付宝的支付网址
Alipay.pay(
alipaySdk, //传入配置好的sdk
bizContent, //商品信息
"http://localhost:8080/pay-success", //支付完成后跳转的路由,该路由为前端路由,而不是后端路由!!
"http://t64ehj.natappfree.cc/notice"
).then(async (res) => {
// 5.给前端返回该网址 res
console.log(res);
// 假设前端打开了该网站,并且用户在支付宝页完成了支付,支付宝会自动跳转到 returnUrl 中(前端路由),
// 需要注意的是该路由不能跟任何参数,因为支付宝会在路由上跟上订单的参数
// 里边包括了 商品订单号 out_trade_no 和 支付宝订单号 trade_no
// 此时前端可以通过 axios 向后端某个接口发起请求 查询订单是否支付成功,
// 假设已经发起请求到后端,且后端取得了这两个参数
// 6.后端拿到请求 订单号对象 { out_trade_no trade_no },向支付宝发起验证是否支付成功
// 返回一个订单对象
const a = await Alipay.verifyPay(
alipaySdk, //sdk 对象
{
out_trade_no: "cccc",
trade_no: "2023030922001476421000663465",
}
);
console.log(a);
// 订单对象属性如下
// {
// code: '10000', //查询成功
// msg: 'Success',
// buyer_logon_id: 'kxn***@sandbox.com',
// buyer_pay_amount: '0.00',
// buyer_user_id: '2038222008273422',
// buyer_user_type: 'PRIVATE',
// invoice_amount: '0.00',
// out_trade_no: '2023030128397', //商品订单号
// point_amount: '0.00',
// receipt_amount: '0.00',
// send_pay_date: '2023-03-09 22:28:02', // 时间
// total_amount: '9999.99', // 总价格
// trade_no: '2023030922001476421000663465', //支付宝订单号
// trade_status: 'TRADE_SUCCESS' //已付款
// }
// 到此如果返回值中包含 trade_status: 'TRADE_SUCCESS' 则说明支付成功,此时可以进行数据库的更新操作!
});