Nodejs 封装实现支付宝商家收款产品API, 包括担保交易收款,即时到帐收款,双功能收款,网银支付,即时到账批量退款,支付宝确认发货等

Nodejs 封装实现支付宝商家收款产品API, 包括担保交易收款,即时到帐收款,双功能收款,网银支付,即时到账批量退款,支付宝确认发货等

写了一个node js 封装支付宝api, 已提交github并在npm注册,欢迎探讨。 用法: 1.npm install alipay 2.cd node_modules\alipay\test 3.npm install 4.node app 5.http://localhost:3000

代码说明: alipay_config.js设置参数 app.js中 require(’./alipay_config’).alipay.route(app); 设置了支付宝通知路由 alipaydemo.js中使用事件处理交易状态等

依赖: express, xmldom


10 回复

当然,我可以帮助你编写一个关于如何使用 Node.js 封装支付宝商家收款产品的 API 示例。这个封装库将包括担保交易收款、即时到帐收款、双功能收款、网银支付、即时到账批量退款以及支付宝确认发货等功能。我们将使用 Express 和 xmldom 作为依赖项。

1. 安装依赖

首先确保安装了必要的依赖项:

npm install express xmldom

2. 配置文件

创建 alipay_config.js 文件来存储支付宝的配置信息:

module.exports = {
    appId: 'your_app_id',
    merchantPrivateKey: 'your_merchant_private_key',
    alipayPublicKey: 'your_alipay_public_key',
    notifyUrl: 'http://localhost:3000/notify',
    returnUrl: 'http://localhost:3000/return',
    gatewayUrl: 'https://openapi.alipay.com/gateway.do'
};

3. 创建封装库

创建 alipay.js 文件来封装支付宝 API:

const crypto = require('crypto');
const request = require('request');

class Alipay {
    constructor(config) {
        this.config = config;
    }

    // 构建请求参数
    buildRequestParams(params) {
        params.app_id = this.config.appId;
        params.method = params.method || 'alipay.trade.page.pay';
        params.format = 'JSON';
        params.charset = 'utf-8';
        params.sign_type = 'RSA2';
        params.timestamp = new Date().toISOString();
        params.version = '1.0';

        // 添加公共参数
        const publicParams = Object.assign({}, params);
        delete publicParams.notify_url;

        // 签名
        publicParams.sign = this.sign(publicParams);

        return publicParams;
    }

    // 签名函数
    sign(params) {
        let signStr = Object.keys(params)
            .sort()
            .map(key => key + '=' + encodeURIComponent(params[key]).replace(/%20/g, '+'))
            .join('&');
        signStr += `&private_key=${this.config.merchantPrivateKey}`;
        return crypto.createSign('RSA-SHA256').update(signStr).sign({ format: 'hex' });
    }

    // 发起请求
    async sendRequest(params) {
        const options = {
            url: this.config.gatewayUrl,
            method: 'POST',
            form: params
        };
        return new Promise((resolve, reject) => {
            request(options, (err, res, body) => {
                if (err) {
                    return reject(err);
                }
                resolve(body);
            });
        });
    }

    // 担保交易收款示例
    async tradePay(goods) {
        const params = {
            method: 'alipay.trade.page.pay',
            biz_content: JSON.stringify({
                subject: goods.subject,
                out_trade_no: goods.outTradeNo,
                total_amount: goods.totalAmount,
                product_code: 'FAST_INSTANT_TRADE_PAY'
            })
        };
        const requestParams = this.buildRequestParams(params);
        return this.sendRequest(requestParams);
    }
}

module.exports = Alipay;

4. 使用示例

app.js 中使用封装好的 Alipay 类:

const express = require('express');
const Alipay = require('./alipay');
const config = require('./alipay_config');

const app = express();

const alipay = new Alipay(config);

app.get('/pay', async (req, res) => {
    const goods = {
        subject: 'Test Product',
        outTradeNo: '123456789',
        totalAmount: '0.01'
    };
    try {
        const result = await alipay.tradePay(goods);
        res.send(result);
    } catch (error) {
        console.error(error);
        res.status(500).send('Error occurred');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

5. 测试

启动服务器并访问 http://localhost:3000/pay 来测试担保交易收款功能。

以上是一个简单的示例,展示了如何使用 Node.js 封装支付宝 API。你可以根据需要扩展更多的功能,如即时到帐收款、网银支付、批量退款等。


嗯,不错,对大家都需要。等需要时我下载用。

楼主,可以提供一个详细点的使用文档吗?例如列出具体需要改变的地方,还有事哪些地方是监听返回状态的操作等。现在这个源码比较简陋,使用起来比价复杂啊。

其实这种app应用不应该提交到npm的吧?

有没有nodejs开发的开源的店程序啊

有哪位大神接通的,跪求给我指点指点啊

点个赞。

有哪位大神接通的???

为了实现一个完整的Node.js封装,用于处理支付宝的各种支付场景(如担保交易收款、即时到帐收款、双功能收款、网银支付、即时到账批量退款以及支付宝确认发货),我们需要创建一个模块来封装与支付宝API交互的功能。以下是一个简化版的实现方案,包括如何配置和调用支付宝API的基本步骤。

示例代码

1. 安装依赖

首先需要安装必要的依赖包:

npm install express axios qs xmldom

2. 创建配置文件 alipay_config.js

module.exports = {
    appId: 'your_app_id',
    merchantPrivateKey: 'your_merchant_private_key',
    alipayPublicKey: 'your_alipay_public_key',
    notifyUrl: 'http://yourdomain.com/notify',
    returnUrl: 'http://yourdomain.com/return',
    gatewayUrl: 'https://openapi.alipay.com/gateway.do'
};

3. 创建支付宝API客户端 alipayClient.js

const axios = require('axios');
const qs = require('qs');

function createAlipayClient(config) {
    return {
        request: async function (params) {
            const formData = qs.stringify(params);
            try {
                const response = await axios.post(config.gatewayUrl, formData, {
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    }
                });
                return response.data;
            } catch (error) {
                console.error(error);
                throw new Error('Failed to call Alipay API');
            }
        }
    };
}

module.exports = createAlipayClient;

4. 创建交易逻辑 alipayService.js

const alipayClient = require('./alipayClient');
const config = require('./alipay_config');

async function createOrder(orderInfo) {
    const client = alipayClient(config);
    const response = await client.request({
        ...orderInfo,
        biz_content: JSON.stringify({
            subject: '测试商品',
            total_amount: '0.01',
            product_code: 'FAST_INSTANT_TRADE_PAY',
            // 其他参数根据实际需求添加
        }),
        method: 'alipay.trade.page.pay',
        format: 'JSON',
        charset: 'utf-8',
        sign_type: 'RSA2',
        timestamp: new Date().toISOString(),
        version: '1.0',
        notify_url: config.notifyUrl,
        return_url: config.returnUrl
    });
    return response;
}

5. 在Express应用中使用

const express = require('express');
const app = express();
const alipayService = require('./alipayService');
const alipayConfig = require('./alipay_config');

app.get('/create-order', async (req, res) => {
    const orderInfo = {
        out_trade_no: '20150320010101001',
        scene: 'bar_code',
        auth_code: 'AUTH_CODE'
    };
    const response = await alipayService.createOrder(orderInfo);
    res.send(response);
});

app.listen(3000, () => console.log('Server running on port 3000'));

总结

以上代码展示了如何封装支付宝API的基本流程。每个功能(如担保交易、即时到帐收款)的具体参数需要根据官方文档进行调整。为了确保安全性和准确性,强烈建议详细阅读官方文档,并对密钥管理、错误处理等方面进行更深入的处理。

回到顶部