沙箱环境 使用 Node.js 打通支付宝支付( 二 )

然后就是前端页面,这个比较简单,就是点击支付按钮,向服务器发起请求,拿到返回的支付页面地址后进行跳转:
$.ajax({method: 'POST',url: '/alipay/pcpay',data: {outTradeNo // 商户订单号,必须保证唯一,生成方法有很多,可以去看我的代码}}).done(function(res) {window.open(res.url, '_blank');}).fail(function(err) {console.log(err);});如果上诉没有问题,我们应该能看到这样的页面:

沙箱环境 使用 Node.js 打通支付宝支付

文章插图
 
如果是使用沙箱环境,必须下载沙箱钱包来完成支付,下载地方如下所示:
沙箱环境 使用 Node.js 打通支付宝支付

文章插图
 
下载完成后,使用沙箱提供的账号登陆即可,随便充值,随便消费,其实沙箱钱包里就是一个数字而已 。
沙箱环境 使用 Node.js 打通支付宝支付

文章插图
 
然后这里补充一个点,就是前端如何判断用户是否已经支付 。我们都知道前端的手段是不被信任的,所以不能依赖前端来判断,唯一可靠的方法是使用支付宝 API 中的 alipay.trade.query 来查询是否已经完成支付 。
可以通过前端发送订单号到服务器进行查询,服务器向支付宝服务器查询该订单号支付的相关信息,通过交易状态来确定是否已经完成支付,具体服务器配置如下:
const axIOS = require('axios');const alipaySdk = require('../utils/alipay');const AlipayFormData = require('alipay-sdk/lib/form').default;router.get('/query', function(req, res) {(async function() {const { outTradeNo } = req.query;const formData = new AlipayFormData();formData.setMethod('get');formData.addField('bizContent', {outTradeNo});// 通过该接口主动查询订单状态const result = await alipaySdk.exec('alipay.trade.query',{},{ formData: formData },);axios({method: 'GET',url: result}).then(data => {let r = data.data.alipay_trade_query_response;if(r.code === '10000') { // 接口调用成功switch(r.trade_status) {case 'WAIT_BUYER_PAY':res.send('交易创建,等待买家付款');break;case 'TRADE_CLOSED':res.send('未付款交易超时关闭,或支付完成后全额退款');break;case 'TRADE_SUCCESS':res.send('交易支付成功');break;case 'TRADE_FINISHED':res.send('交易结束,不可退款');break;}} else if(r.code === '40004') {res.send('交易不存在');}}).catch(err => {res.json({msg: '查询失败',err});});})();});
【本文转载自我的微信公众号-飞舟技术社区】
【喜欢我的文章欢迎 转发 点赞 与 关注,我会经常与大家分享前端的知识点的】




推荐阅读