nhutcaucui / NaniBank-Bank-Linker-API

0 stars 0 forks source link

HOST http://35.247.178.19:3000/

API cho NaniBank

API lấy thông tin

GET /partner/

    Header  
    {  
    "timestamp": 12345679121  
    "authen-hash": "3vudiH0Kyo8c7Qa4ihIIvL/yO8fN+ondP6aEhFJlZTA="
    "name": "KiantoBank"
    "origin": "domain name"
    }  

    Param  
    {   
        "id": 97043666000010  
    }  

"authen-hash": SHA256(timestamp+secretkey+body).digest(hex)
body sẽ là {} nếu request không có field "timestamp": Thời gian gửi, nếu thời gian hiện tại - thời gian gửi > 30s, request bị từ chối
"name": tên ngân hàng đối tác
"id": số tài khoản cần tra
"origin": dùng để check cors, browser sẽ tự add origin vào

Return

Success
{  
"status": true,  
"message": "Here's a customer",  
"id": 123445678,  
"name": "Nobody"  
}  
Failed
{  
"status": false,  
"message": "Error message",    
}  

API nộp tiền

POST /partner/transfer

    Header   
    {  
    "timestamp": 12345679121  
    "authen-hash": "3vudiH0Kyo8c7Qa4ihIIvL/yO8fN+ondP6aEhFJlZTA="  
    "sig": ""  
    "name": "tên bank nguồn"
    }  

    Body: JSON   
    {  
        "from_id": "tài khoản nguồn"
        "to_id": 97043666000010  
        "amount": 10000
        "message": "nội dung chuyển tiền, có thể rỗng nhưng phải có field"
    }  

"sig": signature sign với secret key encode base64 "amount": số tiền cần nộp

Return

Success
{  
"status": true,  
"message": "Transfer money successfully",  
"balance": 5000000,  
"signature": "signature go here"  
}  
Failed
{  
"status": false,  
"message": "Error message",    
}  

Thuật toán sign PGP

   const openpgp = require('openpgp');
   async function detachedSign(secret) {
    const { keys: [privateKey] } = await openpgp.key.readArmored(prkey);
    await privateKey.decrypt(passphrase);

    const { signature: detachedSignature } = await openpgp.sign({
      message: openpgp.cleartext.fromText(secret), // CleartextMessage or Message object
      privateKeys: [privateKey],                            // for signing
      detached: true
    });

    return detachedSignature;
  }

secret: "himom"
passphrase: passphrase khi tạo key
prkey: privatekey dùng để sign

Example request

var timestamp = moment().unix();
      var secretKey= 'himom';
      const body = {
    from_id: 123456789,
    to_id: 97043666000010,
    amount: 1000000,
    message: 'this is a fake test',
      }
  var detachedSignature = await pgp.detachedSign('himom');
    var config={headers: {
        //origin: "www.nguyen.com",
        name: "nanibank",
        timestamp: timestamp,
        "authen-hash": Crypto.createHash('sha256').update(timestamp + secretKey + JSON.stringify(body)).digest('hex'),
        sig: new Buffer.from(detachedSignature).toString('base64'),
      }
    }

    axios.post('http://35.247.178.19:3000/partner/transfer',body, config).then(function (res) {
        console.log(res.data);
    }).catch(function (error) {
        console.log(error);
    });