NodeJs简单接入支付宝支付Api

36,014次阅读
没有评论

共计 3168 个字符,预计需要花费 8 分钟才能阅读完成。

开始之前需要在支付宝注册商户账号以及开发平台,并创建相关的应用,具体操作略过。

点此进入 支付宝开放平台

点此进入 支付宝商家平台

创建应用成功后在应用的开发设置里根据流程创建证书或秘钥,具体操作略过。

NodeJs 简单接入支付宝支付 Api

申请后的证书如下所示

NodeJs 简单接入支付宝支付 Api

找到应用 ID 并记录下来

NodeJs 简单接入支付宝支付 Api

确保该应用具有支付的权限,如图所示

NodeJs 简单接入支付宝支付 Api

接着打开项目文件夹,先安装支付宝的 SDK 相关依赖

请注意,NodeJs 版本需要 18.20.0 或以上

安装依赖

npm install alipay-sdk --save

安装完毕后即可初始化 SDK

验证配置

import {AlipaySdk} from 'alipay-sdk';
import * as fs from "fs";

const alipaySdk = new AlipaySdk({
  appId: '', // 此处填写应用 ID
  privateKey: fs.readFileSync('./cer/privateKey.pem', 'ascii'),
  // 传入支付宝根证书、支付宝公钥证书和应用公钥证书。alipayRootCertPath: './cer/alipayRootCert.crt',
  alipayPublicCertPath: './cer/alipayCertPublicKey_RSA2.crt',
  appCertPath: './cer/applicationCertPublicKey.crt',
});


const result = await alipaySdk.curl('POST', '/v3/alipay/user/deloauth/detail/query', {
  body: {
    date: '20230102',
    offset: 20,
    limit: 1,
  },
});

console.log(result);

如果 responseHttpStatus 返回 200,则代表配置成功

NodeJs 简单接入支付宝支付 Api

调用支付接口

// 具体相关参数可以查看该文档 https://opendocs.alipay.com/open/59da99d0_alipay.trade.page.pay

let aliPayPcPay = await alipaySdk.pageExec("alipay.trade.page.pay", {
        bizContent: {
          out_trade_no: "123456789",//【必选参数】订单号
          subject: "123456789", //【必选参数】订单标题
          total_amount: "8.88",//【必选参数】订单总金额,单位为元,精确到小数点后两位
          product_code: "FAST_INSTANT_TRADE_PAY",//【必选参数】销售产品码,电脑支付场景的参数为:FAST_INSTANT_TRADE_PAY
          qr_pay_mode: "1",//【可选参数】PC 扫码支付的方式
          qrcode_width: "100",//【可选参数】二维码宽度
          integration_type: "PCWEB", //【可选参数】PCWEB:PC 端访问 . 默认值为 PCWEB。},
      });
console.log(aliPayPcPay);

该接口会返回一个 form 表单的 html 代码,可以将他注入到前端网页上从而实现自动跳转

NodeJs 简单接入支付宝支付 Api

例子:

使用 express.post 请求后端以调用支付接口

import express from 'express' ;
import cors from 'cors';
import bodyParser from 'body-parser';
import {AlipaySdk} from 'alipay-sdk';
import * as fs from "fs";

const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));

app.use(cors());

const alipaySdk = new AlipaySdk({
  appId: '', // 应用 ID
  privateKey: fs.readFileSync('./cer/privateKey.pem', 'ascii'),
  // 传入支付宝根证书、支付宝公钥证书和应用公钥证书。alipayRootCertPath: './cer/alipayRootCert.crt',
  alipayPublicCertPath: './cer/alipayCertPublicKey_RSA2.crt',
  appCertPath: './cer/applicationCertPublicKey.crt',
});

app.post('/api/requestPay',async (req,res)=>{res.setHeader("Content-type", "application/json");
  let operator = req.body.operator;
  let scene = req.body.scene;
  let payer = req.body.payer;
  let payOrderId = req.body.payOrderId;
  let payMoney = req.body.payMoney;
  
  switch(scene){
    case 'pc' : 
      let aliPayPcPay = await alipaySdk.pageExec("alipay.trade.page.pay", {
        bizContent: {subject: ` 订单测试,订单号 ${payOrderId}`,
          product_code: "FAST_INSTANT_TRADE_PAY",
          qr_pay_mode: "1",
          qrcode_width: "100",
          integration_type: "PCWEB",
          out_trade_no: payOrderId,
          total_amount: payMoney,
        },
      });
      console.log(req.body);
      res.end(aliPayPcPay);
      break;
    case 'mobile':
      let aliPayMobilePay = await alipaySdk.pageExec("alipay.trade.wap.pay",{
        bizContent:{subject:` 手机订单测试,下单人 ${payer},订单号 ${payOrderId}`,
          out_trade_no:payOrderId,
          total_amount:"0.1",
          product_code:"QUICK_WAP_WAY",    
        }
      })
      res.end(aliPayMobilePay);
      break;
  }
  
})

前端,使用 Vue3 语法编写。




let a = document.getElementById('test');
const newButton = (scene) =>{let orderNumber = radomOrdernumber(10);
    axios.post('//127.0.0.1:4001/api/requestPay',{operator:'alipay',scene:scene,payer:'wepingon',payMoney:'0.1',payOrderId:orderNumber}).then(res=>{console.log(res);
    a.innerHTML = res.data;
    document.forms[0].submit();})
}

// 随机生成订单号,可以根据具体情况修改
const radomOrdernumber = (index)=>{
    let str = '1234567890';
    let length = index;
    let nStr = '';
    for(let i = 0;i

使用电脑网页进行支付

NodeJs 简单接入支付宝支付 Api

使用手机进行支付

NodeJs 简单接入支付宝支付 Api

原文地址: NodeJs 简单接入支付宝支付 Api

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-30发表,共计3168字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)