已解决
Node.js 支付宝支付
来自网友在路上 161861提问 提问时间:2023-09-27 08:25:56阅读次数: 61
最佳答案 问答题库618位专家为你答疑解惑
/*** 统一下单* @param ctx* 商户订单号 - outTradeNo* 订单总金额 - totalAmount* 订单标题 - subject*/async pcpay(ctx) {console.log("统一下单:" + JSON.stringify(ctx.request.body));let outTradeNo = ctx.request.body.outTradeNo;let totalAmount = ctx.request.body.totalAmount;let subject = ctx.request.body.subject;// 填写订单基础信息const bizContent = {product_code: "FAST_INSTANT_TRADE_PAY",out_trade_no: outTradeNo,total_amount: totalAmount,subject: subject}// 获取支付宝官方支付链接const formData = new AlipayFormData();formData.setMethod("get");formData.addField("bizContent", bizContent);//支付成功或失败的返回链接formData.addField("returnUrl", "http://qjzjne.natappfree.cc/api/payment/callback");let message = "下单成功";const resultUrl = await alipaySdk.exec("alipay.trade.page.pay",{},{ formData: formData }).catch(error => console.error('订单生成失败!', error), message = "订单生成失败!" );//保存订单数据const data = {outTradeNo: outTradeNo,totalAmount: totalAmount,subject: subject,tradeStatus: 'WAIT_BUYER_PAY',}await strapi.entityService.create('api::payment.payment', { data: data });ctx.send({code: 200,url: resultUrl,message: message});},
/*** 支付回调* @param ctx* 商户订单号 - outTradeNo* 平台订单号 - tradeNo*/async callback(ctx) {console.log("支付回调:" + JSON.stringify(ctx.query));const signRes = alipaySdk.checkNotifySign(ctx.query);console.log("验签:"+signRes);const outTradeNo = ctx.query.out_trade_no;const tradeNo = ctx.query.trade_no;if(signRes){let message = "支付回调成功";const payments = await strapi.entityService.findMany('api::payment.payment',{ filters: { outTradeNo: outTradeNo } }).catch(error => console.error('支付回调失败!', error), message = "支付回调失败!" );let payment;if (payments || payments.length > 0) {payment = payments[0];}const entry = await strapi.entityService.update('api::payment.payment', payment.id, {data: {tradeNo: tradeNo,},});ctx.send({code: 200,data: entry,message: message});}else{ctx.send({code: 200,message: "验签失败"});}},
/*** 订单查询* @param ctx* 商户订单号 - outTradeNo* 平台订单号 - tradeNo*/async queryOrder(ctx) {console.log("订单查询:" + JSON.stringify(ctx.request.body));let outTradeNo = ctx.request.body.outTradeNo;let tradeNo = ctx.request.body.tradeNo;let message;const formData = new AlipayFormData();formData.setMethod("get");const bizContent = {outTradeNo,tradeNo};formData.addField("bizContent", bizContent);const queryResult = await alipaySdk.pageExec('alipay.trade.query', {method: 'GET',bizContent})const result = await axios.get(queryResult)const dataResult = result.data.alipay_trade_query_response;console.log("交易查询:" + JSON.stringify(dataResult))if (dataResult.code == 10000) {switch (dataResult.trade_status) {case 'WAIT_BUYER_PAY':message = "交易创建,等待买家付款"break;case 'TRADE_FINISHED':message = "交易结束,不可退款"break;case 'TRADE_SUCCESS':message = "交易支付成功"break;case 'TRADE_CLOSED':message = "未付款交易超时关闭,或支付完成后全额退款";break;}//更新交易状态值const payments = await strapi.entityService.findMany('api::payment.payment',{ filters: { outTradeNo: outTradeNo } });const entry = await strapi.entityService.update('api::payment.payment', payments[0].id, {data: {tradeStatus: dataResult.trade_status,},});ctx.send({code: 200,data: entry,message: message})} else if (dataResult.code == 40004) {ctx.send({code: 404,message: "交易不存在"})}}
Demo下载地址:https://download.csdn.net/download/u013772876/88376302
查看全文
99%的人还看了
相似问题
- “三面一体”的业务调度方案在运营商订单运营的实践
- 基于灰色神经网络的预测算法——订单需求预测
- 以订单退款流程为例,聊聊如何优化策略模式
- web3通过antd 在React dapp中构建订单组件基本结构
- 数据分析实战 - 2 订单销售数据分析(pandas 进阶)
- Android sqlite分页上传离线订单后删除
- python django获取某个角色的某个数据和——例如:获取所有订单的应付金额总和
- 机器视觉能不能再火爆?大多数企业订单减少是现实,大多数企业维持现有的经营状态将会非常困难,就看人工智能和新兴产业能不能破门而入
- 在销售区域 销售范围 <‘5100‘,‘20‘,‘00‘> 中, 订单类型 ZO05 没有定义
- 淘宝API接口获取商品信息,订单管理,库存管理,数据分析
猜你感兴趣
版权申明
本文"Node.js 支付宝支付":http://eshow365.cn/6-14546-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!