node 支付

阿里支付
微信支付
银联支付

Installation

npm install china-pay

阿里支付

app支付
回调处理
提现

Prepare

生成私钥 设置私钥 将上面生成的私钥生成无密码的私钥

Importing

const privatePem = fs.readFileSync('private_key.pem');//该私钥为无密码的私钥
const publicPem = fs.readFileSync('public_key.pem');
const alipayJson = {
    app_id: '',  //应用ID
    notify_url: '',//通知地址
};
const key = {
    privateKey: privatePem,//私钥,格式为buffer
    publicKey: publicPem//公钥, 格式为buffer
}
const pay = require('china-pay')('alipay');
//alipayJson, key 必传
const alipay = new pay(alipayJson, key)
复制代码

Usage

app支付(getAppParam)
  • app端获取支付需要的参数
let biz_content = {
    out_trade_no: '订单号',
    total_amount: '金额',
    subject: '订单标题',
    body: "商品描述"
}
try{
    //result为移动端需要给支付宝的数据
    let result = await alipay.getAppParam(biz_content)
}catch(err){
    //err
}

复制代码
回调处理(verifySign)
try{
    //obj 为支付宝返回的body对象里面的内容
    let result = await alipay.verifySign(obj)
    //res.send("success");如果成功
}catch(err){
    //认证失败
}
复制代码
提现(refundTransfer)
try{
    await alipay.refundTransfer({
        out_biz_no :'12124324234',//提现订单
        payee_account:'130*',//支付宝账号
        amount :'0.01',//提款金额
        payee_real_name :'董佳',//支付宝账号对应的真实姓名
        payer_show_name :'欣享车'//支付人的姓名
    });
}catch(err){
    //失败
}

复制代码

微信支付

app统一下单接口
扫码支付
回调处理
提现

Importing

const wxpayJson = {
    appid: '',  //邮箱里
    mch_id: '',//邮箱里
    notify_url: //邮箱里
};
const key = {
    key:'',//邮箱里
}
const pay = require('china-pay')('wxpay');
//alipayJson, key 必传
const wxpay = new pay(wxpayJson, key)
复制代码

Usage

app统一下单接口(appUnifiedorder)
    let obj = {
        attach: '12313231',//附加数据(有时候必填)
        body: '测试',
        out_trade_no: '12312324143',
        total_fee: "1"//(支付费用(分))
    }
    try{
        //前端需要的数据
        let result = await wxpay.appUnifiedorder(obj);
    }catch(err){
        console.log(err)
    }
复制代码
扫码支付(webUnifiedorder)
    let obj = {
        attach: '12313231',//附加数据(有时候必填)
        body: '测试',
        out_trade_no: '12312324143',
        total_fee: "1"//(支付费用(分))
    }
    try{
        //支付的url码, 该码可以转为二维码
        let result = await wxpay.webUnifiedorder(obj);
    }catch(err){
        console.log(err)
    }
复制代码
回调处理(notify)

注: 微信返回的格式是xml格式, 因此先对其进行转换, express可以使用express-xml-bodyparser中间件处理

//obj 里面的 key 可以是数组或者字符串
let obj =  {
     appid: [ 'wx7c73ca24*******' ],
     attach: [ '1231323123' ],
    ......
}
//失败则抛出异常, 
try{
    let result = await wxpay.notify(obj)   
}catch(err){
    //
}

//之后需要给wx返回, 返回的参数为“SUCCESS”
// res.set('Content-Type', 'text/xml');
// res.send("SUCCESS")
复制代码

银联支付

获取tn
回调处理

Prepare

  • 获取私钥 获取银联以priv.pfx结尾的证书后
const pem = require('pem');
const fs = require('fs');
const pfx = fs.readFileSync("/home/dj/priv.pfx");
pem.readPkcs12(pfx, { p12Password: "password" }, (err, cert) => {
    //cert.key就是私钥
    console.log(cert.key)
});

复制代码
  • 获取certId
wopenssl = require('wopenssl');
var p12 = wopenssl.pkcs12.extract(__dirname + '/priv.pfx', '761202');
var certs = wopenssl.x509.parseCert(p12.certificate);
//certs里面的Serial就是certId, 但是是16进制的, 然后使用python int("1149699808", 16)将其转换为10进制


复制代码
x509常用命令

openssl pkcs12 -in input.pfx -out mycerts.crt -nokeys -clcerts 将pfx或p12 生成证书。

openssl pkcs12 -in x.pfx -nocerts -nodes -passin pass:123456 | openssl rsa -out privkey.pem pfx生成rsa 私钥

openssl x509 -inform der -in certificate.cer -pubkey -noout > certificate_publickey.pem cer生成公钥(证书有两种格式, 一种是der, 一种是pem。 der是二进制, 而pem是字符串, 可以使用文本编辑器打开看)

Importing

const key = {
    privateKey:fs.readFileSync('/home/dj/privkey.pem'),
    publicKey:fs.readFileSync('/home/dj/pub.pem')
}
const unionpayJson = {
    merId: "8986101739906**",
    frontUrl: "http://papanda.tk:3100",
    certId: "742461010**"
};

const pay = require('china-pay')('unionpay');
//unionpayJson key 必传
const unionpay = new pay(unionpayJson, key)
复制代码

Usage

获取tn(getTn)
let obj = {
    orderId :'211323213241234321412',
    txnAmt :'1',//(分)
    orderDesc :'这是一个测试'
}
try{
    //result 为tn 前端用来跟银联交互的数据
    let result = await unionpay.getTn(obj);
}catch(err){
    console.log(err)
}
复制代码
回调处理(notify)
try{
    //有result则成功
    let result = await unionPay.notify(req.body);
}catch(err){
    
}
//给银联的返回
//res.send('success')
复制代码

转载于:https://juejin.im/post/5b052d0cf265da0b873add88

### Node.js 中使用支付宝沙箱环境进行支付集成 在Node.js环境中实现与支付宝沙箱环境的对接主要涉及配置开发环境、获取必要的API凭证以及编写相应的业务逻辑来发起支付请求并处理回调通知。 #### 准备工作 为了能够顺利地完成支付宝沙盒测试,需先登录[支付宝开放平台](https://open.alipay.com/)注册账号,并创建应用以获得`app_id`和其他安全校验所需的密钥材料。此外,在本地搭建Node.js运行时环境也是必不可少的一部分。 #### 安装依赖库 通过npm安装官方推荐的SDK或其他第三方封装好的模块可以帮助简化操作流程: ```bash npm install alipay-sdk --save ``` 此命令会下载由蚂蚁金服提供的Alipay SDK至项目目录下[^1]。 #### 编写支付接口代码 下面给出一段基于Express框架构建的服务端路由示例,用于模拟向客户端返回可跳转至支付宝收银台页面链接的过程: ```javascript const express = require('express'); const AlipaySdk = require('alipay-sdk').default; // 初始化Alipay实例 const sdk = new AlipaySdk({ appId: "your_app_id", privateKey: fs.readFileSync(path.join(__dirname, './private_key.pem'), 'ascii'), alipayPublicKey: fs.readFileSync(path.join(__dirname, './public_key.pem'), 'ascii') }); let app = express(); app.post('/api/pay', async (req, res) => { try{ let result = await sdk.exec( 'alipay.trade.page.pay', Object.assign({}, req.body,{ product_code:"FAST_INSTANT_TRADE_PAY" }), {method:'form'} ); // 返回HTML表单字符串给前端展示或自动提交 res.send(result); }catch(e){ console.error(e.message); res.status(500).send({error:e.message}); } }) ``` 上述代码片段展示了如何利用`alipay-sdk`发送交易预下单指令(`alipay.trade.page.pay`),并将得到的结果作为HTML形式反馈给浏览器执行POST动作从而打开真实的付款界面[^3]。 请注意替换其中的`your_app_id`为实际申请到的应用ID;同时确保已准备好私钥文件(private_key.pem)和公钥证书(public_key.pem),这些资料可以在支付宝开发者中心找到对应项目的设置项里生成或上传。 对于异步通知机制,则建议单独设立监听路径专门用来接收来自网关服务器推送过来的状态更新消息,进而依据具体场景做出响应措施,比如更改订单状态等后续动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值