有写到,记录下支付宝领取
demo 请狠狠的戳这里 ¥ https://download.lllomh.com/cliect/#/product/J302659722615829
沙箱环境 (Beta) 是帮助开发者进行接口性能开发及次要性能联调的辅助环境,模仿了开放平台局部产品的次要性能和次要逻辑。可用于在产品上线前理解环境、组合和调试各种接口。
沙箱环境配置
关上 支付宝开发者核心 并登录,点击 => 进入我的控制台(也可能登录之后主动进入), 不须要企业账户,集体的也能够
在开发者核心中点击开发服务下的研发服务,就进入沙箱环境页面了,
在沙箱利用能够看到根本配置。
密钥配置
点击 RSA2(SHA256)密钥 设置,
点击 支付宝密钥生成器,下载对应版本的工具,下载实现后将工具装置在不蕴含空格的目录中,
而后点关上,点击生成密钥,即可生成商户利用私钥与商户利用公钥。而后点击复制公钥。
回到沙箱界面,抉择公钥,并把刚刚复制的公钥粘贴进去;
而后就能够失去支付宝公钥了,代码中会用到。
1,封装配置
alipayUtil.js
const AlipaySdk = require('alipay-sdk').default; // 引入 SDKconst alipaySdk = new AlipaySdk({ appId: '2021000117615613', // 开放平台上创立利用时生成的 appId signType: 'RSA2', // 签名算法,默认 RSA2 gateway: 'https://openapi.alipaydev.com/gateway.do', // 支付宝网关地址 ,沙箱环境下应用时须要批改 alipayPublicKey: '', // 支付宝公钥,须要对后果验签时候必填 privateKey: '', // 利用私钥字符串});module.exports = alipaySdk;//正式环境只有把上述换成正式的就能够了
2,接口定义
创立支付宝须要的表单表
const formData = new AlipayFormData(); formData.setMethod('get');
把 告诉加进去(如需要的话)
formData.addField('notifyUrl', 'https://www.baidu.com'); // 领取胜利回调地址,必须为能够间接拜访的地址,不能带参数
而后就是须要的订单参数
formData.addField('bizContent', { outTradeNo: orderId, // 商户订单号,64个字符以内、可蕴含字母、数字、下划线,且不能反复 productCode: 'FAST_INSTANT_TRADE_PAY', // 销售产品码,与支付宝签约的产品码名称,仅反对FAST_INSTANT_TRADE_PAY totalAmount: '0.01', // 订单总金额,单位为元,准确到小数点后两位 subject: '商品', // 订单题目 body: '商品详情', // 订单形容 });
后就是 胜利回调: 这里我被坑了很久:
formData.addField('returnUrl', 'https://opendocs.alipay.com');//加在这里才有成果,不是加在bizContent 外面
最初提交官网,用官网文档的写法:
const result = alipaySdk.exec( // result 为能够跳转到领取链接的 url 'alipay.trade.page.pay', // 对立收单下单并领取页面接口 {}, // api 申请的参数(蕴含“公共申请参数”和“业务参数”) { formData: formData }, );
订单查问(可用可不必):
/** * 增加购物车提交订单支付宝领取后查问订单状态是否胜利 */router.post('/api/member/queryOrderAlipay', (req, res) => { let orderId=req.body.orderId const formData = new AlipayFormData(); formData.setMethod('get'); formData.addField('bizContent', { orderId }); // 通过该接口被动查问订单状态 const result = 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( { "success": true, "message": "success", "code": 200, "timestamp": (new Date()).getTime(), "result": { "status":0, "massage":'交易创立,期待买家付款' } } ) break; case 'TRADE_CLOSED': res.send( { "success": true, "message": "success", "code": 200, "timestamp": (new Date()).getTime(), "result": { "status":1, "massage":'未付款交易超时敞开,或领取实现后全额退款' } } ) break; case 'TRADE_SUCCESS': res.send( { "success": true, "message": "success", "code": 200, "timestamp": (new Date()).getTime(), "result": { "status":2, "massage":'交易领取胜利' } } ) break; case 'TRADE_FINISHED': res.send( { "success": true, "message": "success", "code": 200, "timestamp": (new Date()).getTime(), "result": { "status":3, "massage":'交易完结,不可退款' } } ) break; } } else if(r.code === '40004') { res.send('交易不存在'); } }) .catch(err => { res.json({ msg: '查问失败', err }); });})
到这里就实现了,胜利返回 领取领取的该地址前端只有拿到跳到这里地址去领取就能够了,胜利后跳到回调胜利页面
接口演示
前端间接申请 而后拿到地址:
goPay() { let data = { orderId: 't454545212121' //随机生成惟一的就行了这个 本人找吧 } var instance = this.$axios.create({headers: {'content-type': 'application/x-www-form-urlencoded'}}); // 代理到 http://localhost:3000/api/pcpay instance.post(`http://localhost:3000/api/pcpay`, this.$qs.stringify(data)).then(res =>{ this.data=res; window.open(res.data.result) }); }
最初用沙箱版本app扫码付款能够看到成果
后果demo
心愿多多反对,你的评论点赞都是我的能源,有问题能够留言,谢谢网友