node 支付

阿里支付

微信支付

銀聯支付

Installation

npm install china-pay前端

阿里支付

app支付

回調處理

提現

Prepare

生成私鑰 設置私鑰 將上面生成的私鑰生成無密碼的私鑰node

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中間件處理python

//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 生成證書。web

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

openssl x509 -inform der -in certificate.cer -pubkey -noout > certificate_publickey.pem cer生成公鑰(證書有兩種格式, 一種是der, 一種是pem。 der是二進制, 而pem是字符串, 能夠使用文本編輯器打開看)npm

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')
複製代碼
相關文章
相關標籤/搜索