有写到,记录下支付宝领取

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

心愿多多反对,你的评论点赞都是我的能源,有问题能够留言,谢谢网友