36,对接支付宝沙箱 交易状态 支付后
时间:2023-10-28 20:07:02
Order.vue
提交订单 收货信息
{
{ path.name }} {
{ path.tel }} {
{ path.province }} {
{ path.city }} {
{ path.county }} {
{ path.addressDetail }} 支付方式: 微信支付 支付宝支付 -
{
{ item.goods_name }}
¥{
{ item.goods_price }} x{
{ item.goods_num }}
对接支付宝沙箱(进行支付)nodejs
api链接:https://github.com/alipay/alipay-sdk-nodejs-all
api链接:https://www.yuque.com/chenqiu/alipay-node-sdk/config-sdk
***测试支付,一定要用无痕浏览
后台 db---alipay.js
//引入sdk
const AlipaySdk = require('alipay-sdk').default;
const alipaySdk = new AlipaySdk({
//AppId
appId: '202100011768788888514',
//签名算法
signType:'RSA2',
//支付宝网关
gateway:'https://openapi.alipaydev.com/gateway.do',
//支付宝公钥
alipayPublicKey:'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkel1HVjCXwxoRRHg449wOcFaeLHI7AgZCQZzRx0VPymq1wdunJrRfOxAedbO+JCWi09o9BTy1zHhBsJ2A8dzyhhycOGJDS2gwWrZSrBHyLwqqRJJ7KVNyA1fKydHO7Bi0tJ1pL28jWiSANfklvw9b9kdaAuGAeswRkKHQ7YQeoOM1SVWJygJnKJEyhy5LE06hGUE0VjSBUgepUS/crYuCFi9UvIobqca38y0aqc+bI0I6TvJQ9wqUWpUoV9YNR8jhgOpU7aDuTEEFCvSpaLy0xNwSVTmWeu82MjOaGLNQmrVV4ymOozYgRfdpOcA1QrqyYlEBx9osiYsEAMevnx2bdhwIDAQAB',
//应用私钥
privateKey: 'MIIEowIBAAKCAQEAhk5HSR/+Yd1qtd/x16+7lYYpS7hkvH978Hr8Vo4p9sFGTr3iCAlHZ9ceEuIJZG6mAzJWTo0Nc0tJV889bAhYYgijiAvO5ImvVVtM3WJb//ST9zz3+PuOAezVbPnSuSHsVwsUuXNvPkJRlkKQffiNVHd2YM07nYAwZMt3iTop5R5KaSOlz0TFtOJKBsEsyIDl1Tuhlg33wUCcLm8em9gvu3hApubFBuQq6B/oEhlWPi7Xi0NIYDeKKIQuoaHBXK1E2aI67g2pBKHRbuzv6NuSRzMMhFecNRZAIVweVBqplSKhuSINbUm7p84lgmzTMZXtxpf2ub6mvbPvhnEmdpWNRQIDAQABAoIBAAU5yoBH5Gf+a4atyurEHi7cQZpBzB2MIS9MbpAe2O6tPWjCgG/T55WUdtjNf/gQH3lu7Lq3HLCVwG46AbKO977aXEYEPAixHO27hbz2fnkmuJmu9IrsLmHbt9zPUEabOd3GOiHw5m+I1E1B21bTZDfike01cL+3fJhWQovJdu85+iNWCfLAxcu/Ao55kKOGYdvKv+GGorDRPhlOzh09geqvss6rQE9j00JFqFuIPcA2Unxq5yszB1LGUVOPCYw5eznDDcBLx0N8UgUfpjASRdjJNL+1eezr0v6//J4HZ4VQmzJ2WMu+MmOyUHzYnoYb49Kh79RpSL8BdE/o8Vxb7mR7dwkCgYEAwDwFTgrIB8ouWXsNVkmf7SjUYHUlkYQHnf2o57/2d2pIw50vdhUnZKTmdKhaHh4zVoPLAoad9HWwwkdUQiTpfJD7nAglW4Tsw0kHu0vK2lYp3gjvoMVf1VQwM36r3tCnMyv6Yt3dNU/qXfEbbwJCGIowQdU3hidBfdatgOl8PAsCgYEAstsgS6sbiCiIQfRoznJefpGlrTSXZC0Rsn2DCULsNiwI1uzKHfFx0ZZ9Y04ICKpiWNyu1W43ZB4CGExYZP21xr4oK7jF0UTpIKXzEV63aow4M6mcmJfFVriweuy2BOM/eMhJYn1IXXe0Dl8Uj4B37X70I7JPx4DWTp6RYAnM3e8CgYBg315E/8Xhtw84ZHxKGXwQRV0Q5rfx5rj38xYlA2Wus87LVPDP7sUVQMwpyZTwTIPOe0fYlAIRaSWUIeHiGzvWXDGPZcN9pTSzDKBq0Dz/XiBnFdW8DPrIRE6uBI2UEU3Qyb66B9grv4P5p0EN5fNs7mZ3Jn1+i1XDlmWE6ySCFQKBgQCfulH9QbI0xv3o6P0wYbNCFZCAPpd1P0quvKhpfPq25lx+lLlsRFQBeQRBy04hbwilk3AP635MSwBT8tp+VpYgB3KYmUsQuRn5rjqFKLFk1hTbDn5rSB9Uc1woa32in8/vbe8bpgcacey7aO5TucdgsiAWQQg+gzDgxXvO6PGswQKBgBjP5vXcaz+WVzbY3mBi0B7Cd3G15wKQGpZRDy55WX/BCqlKnG41LJqeADxOPJKbZxHRxOYztR4742nzpNIEPddALV1uN/tNtb3MhpuH8QVvaDlfSqbNKaqaP/jY18QfMbS9q9dTCjoDcSUPzbSorq/4L6TV3pogOnQqqzV5kUkL'
});
module.exports = alipaySdk;
后台接口
index.js
//引入支付宝配置文件 const alipaySdk = require("../db/alipay.js"); const AlipayFormData = require("alipay-sdk/lib/form").default; //引入axiso const axios = require("axios");
//发起支付
router.post("/api/payment", function (req, res, next) {
//订单号
let orderId = req.body.orderId;
//商品总价
let price = req.body.price;
//购买商品的名称
let name = req.body.name;
//开始对接支付宝API
const formData = new AlipayFormData();
// 调用 setMethod 并传入 get,会返回可以跳转到支付页面的 url
formData.setMethod("get");
//支付时信息
formData.addField("bizContent", {
outTradeNo: orderId, //订单号
productCode: "FAST_INSTANT_TRADE_PAY", //写死的
totalAmount: price, //价格
subject: name, //商品名称
});
//支付成功或者失败跳转的链接
formData.addField("returnUrl", "http://localhost:8080/payment");
//返回promise
const result = alipaySdk.exec(
"alipay.trade.page.pay",
{},
{ formData: formData }
);
//对接支付宝成功,支付宝方返回的数据
result.then((resp) => {
res.send({
data: {
code: 200,
success: true,
msg: "支付中",
paymentUrl: resp,
},
});
});
});
Payment.vue
恭喜您支付成功~
支付失败
后台接口
//支付状态
router.post("/api/successPayment", function (req, res, next) {
//token
let token = req.headers.token;
let tokenObj = jwt.decode(token);
//订单号
let out_trade_no = req.body.out_trade_no;
let trade_no = req.body.trade_no;
//支付宝配置
const formData = new AlipayFormData();
// 调用 setMethod 并传入 get,会返回可以跳转到支付页面的 url
formData.setMethod("get");
//支付时信息
formData.addField("bizContent", {
out_trade_no,
trade_no,
});
//返回promise
const result = alipaySdk.exec(
"alipay.trade.query",
{},
{ formData: formData }
);
//后端请求支付宝
result.then((resData) => {
axios({
method: "GET",
url: resData,
})
.then((data) => {
let responseCode = data.data.alipay_trade_query_response;
if (responseCode.code == "10000") {
switch (responseCode.trade_status) {
case "WAIT_BUYER_PAY":
res.send({
data: {
code: 0,
data: {
msg: "支付宝有交易记录,没付款",
},
},
});
break;
case "TRADE_CLOSED":
res.send({
data: {
code: 1,
data: {
msg: "交易关闭",
},
},
});
break;
case "TRADE_FINISHED":
connection.query(
`select * from user where tel = ${tokenObj.tel}`,
function (error, results) {
//用户id
let uId = results[0].id;
connection.query(
`select * from store_order where uId = ${uId} and order_id = ${out_trade_no}`,
function (err, result) {
let id = result[0].id;
//订单的状态修改掉2==》3
connection.query(
`update store_order set order_status = replace(order_status,'2','3') where id = ${id}`,
function () {
res.send({
data: {
code: 2,
data: {
msg: "交易完成",
},
},
});
}
);
}
);
}
);
break;
case "TRADE_SUCCESS":
connection.query(
`select * from user where tel = ${tokenObj.tel}`,
function (error, results) {
//用户id
let uId = results[0].id;
connection.query(
`select * from store_order where uId = ${uId} and order_id = ${out_trade_no}`,
function (err, result) {
let id = result[0].id;
//订单的状态修改掉2==》3
connection.query(
`update store_order set order_status = replace(order_status,'2','3') where id = ${id}`,
function () {
res.send({
data: {
code: 2,
data: {
msg: "交易完成",
},
},
});
}
);
}
);
}
);
break;
}
} else if (responseCode.code == "40004") {
res.send({
data: {
code: 4,
msg: "交易不存在",
},
});
}
})
.catch((err) => {
res.send({
data: {
code: 500,
msg: "交易失败",
err,
},
});
});
});
});