美文网首页
Node.js对接支付宝沙箱(最新详解)

Node.js对接支付宝沙箱(最新详解)

作者: 飞天小猪_pig | 来源:发表于2023-07-22 00:21 被阅读0次
    1、前期工作准备

    1、登录支付宝沙箱:这些APPID、加签、支付宝网关地址信息下面要填充自己的

    9.png

    2、秘钥工具的下载

    3.png

    3、在秘钥工具中生成秘钥:注意签名算法就是加密算法=RSA2


    1.png

    4、复制秘钥工具中生成的应用公钥


    2.png
    5、将复制的应用公钥粘贴到支付宝沙箱应用中:点击自定义秘钥>点击查看>粘贴应用公钥>确认
    4.png
    5.png

    6、将秘钥工具中生成的应用秘钥内容转换为 PKCS8 或 PKCS1 格式


    7.png
    2、引入alipay-sdk

    1、安装:npm install alipay-sdk -S

    2、定义一个alipay.js文件,在里面填上自己的appid、签名算法、支付宝网关、支付宝公钥、应用私钥等。

    //alipay.js
    const AlipaySdk = require('alipay-sdk').default;
    const alipaySdk = new AlipaySdk({
      // appid
      appId: '',
      //签名算法
      signType:'',
      //支付宝网关
      gateway:'',
      //支付宝公钥
      alipayPublicKey:'',
      //应用私钥
      privateKey:''
    });
    
    module.exports = alipaySdk;
    

    2、在Node.js后端的应用

    //引入支付宝沙箱配置
    const alipaySdk = require('../db/alipay.js');
    const AlipayFormData = require('alipay-sdk/lib/form').default;
    
    //支付接口
    router.post('/api/payment', function(req, res, next) {
        //接收前端给后端的订单号
        let orderId = req.body.orderId;
        //前端给后端总价
        let price=req.body.price
        //前端给后端商品名称
        let name=req.body.name.join('')
    
        const formData = new AlipayFormData();
        //调用get方法
        formData.setMethod('get'),
        //支付时 的信息
        formData.addField('bizContent', {
          outTradeNo: orderId,//订单号
          productCode: 'FAST_INSTANT_TRADE_PAY',//写死的
          totalAmount: price,//金额
          subject: name//商品名称
        });
        //支付成功或者失败打开的页面
        formData.addField('returnUrl', 'http://localhost:8080/payment');
        const result = alipaySdk.exec(
          'alipay.trade.page.pay',
          {},
          { formData: formData },
        );
        result.then(resp=>{
            res.send({
                data:{
                    code:200,
                    success:true,
                    paymentUrl:resp
                }
            })
        })
    })
    

    3、前端发起的请求:

    goPayment(){
        $http.request({
            url:"/payment",
            method:"POST",
            header:{
                token:true
            },
            data : {
                orderId:this.orderNumber,
                price:this.details.price,
                name:this.details.list
            }
        }).then((res)=>{
            // #ifdef APP-PLUS
            plus.runtime.openURL( res.paymentUrl );
            // #endif
            // #ifdef H5
            window.location.href=res.paymentUrl
            // #endif       
        })
    }
    

    4、进行支付
    点击你的支付入口,跳转到支付页面,这里可以用到沙箱账号进行支付,里面的钱是虚拟的。

    14.png

    (1)填写账号和登录密码


    11.png

    (2)填写支付密码


    12.png

    (3)支付成功


    13.png

    可能遇到问题

    [Warning] page interface through formdata is deprecated. Use sdk.pageExec instead
    caught error! Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag。
    1)应用私钥没有转换格式(在秘钥工具中有格式转换功能)
    2)支付宝公钥/应用私钥等信息错了

    相关文章

      网友评论

          本文标题:Node.js对接支付宝沙箱(最新详解)

          本文链接:https://www.haomeiwen.com/subject/hwqxpdtx.html