abookyun/einvoice

View on GitHub
docs/Tradevan E-Invoice APIs.md

Summary

Maintainability
Test Coverage
# Tradevan E-Invoice APIs

## Overview

* Preparation
* Encode Request
* Decode Response
* APIs

## Preparation

After contacting with Tradevan, you'll get

* acnt: your account name
* acntp: your account password
* key1: 1st AES encryption key
* key2: 2nd AES encryption key

## Encode Request

* Method: POST/GET
* URL: "#{endpoint}/#{path}"
* Parameters: "#{v}"
* v: `Base64_strict.encode(AES.encrypt(key2, { acnt: "#{acnt}", acntp: "#{acntp}", api_key1: "#{encryption_of_api_value1}", api_key2: "#{encryption_of_api_value2}", ... }))`
* `AES.encrypt(key, content)`:
  * mode: CBC-128
  * key: use `key2` for outter encryption, use `key1` for inner value encryption
  * iv: same as key
  * padding: no, but you should manually pad with `"\u0000"`(character space in bytes format) to fit correct CBC block size
* encryption_of_api_value1: `Base64_strict.encode(AES.encrypt(key1, api_value1))`

## Decode Response

* Format: JSON, i.e. `{ "Success": "Y", "Message": "#{encryption_of_message}" }`
* Success: "Y" for OK, "N" for Failure, "E" for Error
* Message:
  * Plain Text when `"Success": "E"`
  * Encryption Text when `"Success": "Y"` or `"Success": "N"`
  * Decryption: `AES.decrypt(key2, Base64_strict.decode(response["Message"]))`
* `AES.decrypt(key, content)`:
  * mode: CBC-128
  * key: use `key2` for decrypt `response["Message"]` content
  * iv: key
  * padding: no

## APIs

### POST /DEFAULTAPI/post/issue

You could use this API to do

1. issue an new invoice
2. issue an existed invoice
3. issue an allowance
4. issue an existed allowance

#### Parameters

* issueData
    * type: json

### POST /DEFAULTAPI/post/cancel

You could use this API to do

1. cancel an existed invoice
2. cancel an allowance

#### Parameters

* voidData
    * type: json

### GET /DEFAULTAPI/get/searchInvoiceByMemberId

#### Parameters

* invoiceStartDate
    * description: begining of invoice issued date interval
    * type: string
    * require: false
    * format: yyyyMMdd
* invoiceEndDate
    * description: end of invoice issued date interval
    * type: string
    * require: false
    * format: yyyyMMdd
* companyUn
    * description: company universal business number(ubn) of Taiwan
    * type: string
    * require: true
* memberId
    * description: customer's member id of your service
    * type: string
    * require: true if `sellTargetCode` and `carrierId` are empty
* carrierId
    * description: customer's carrier id of invoices
    * type: string
    * require: true if `memberId` and `sellTargetCode` are empty
* sellTargetCode
    * description: ?
    * type: string
    * require: true if `memberId` and `carrierId` are empty

### GET /DEFAULTAPI/get/searchInvoiceDetail

#### Parameters

* invoiceNumber
    * description: invoice number
    * type: string
    * require: true

### GET /DEFAULTAPI/get/sendCardInfotoCust

#### Parameters

* companyUn
    * description: company universal business number(ubn) of Taiwan
    * type: string
    * require: true
* sellTargetCode
    * description: ?
    * type: string
    * require: true
* invoiceStartYM
    * description: begining of invoice issued year and month interval
    * type: string
    * require: false
    * format: yyyyMM
* invoiceEndYM
    * description: end of invoice issued year and month interval
    * type: string
    * require: false
    * format: yyyyMM
* receiverEmail
    * description: receiver's email
    * type: string
    * require: true if `receiverMobile` is empty
* receiverMobile
    * description: receiver's mobile
    * type: string
    * require: true if `receiverEmail` is empty

### GET /DEFAULTAPI/get/getInvoiceMarkInfo

#### Parameters

* companyUn
    * description: your company universal business number(ubn) of Taiwan
    * type: string
    * require: true
* orgId
    * description: your orgId
    * type: string
    * require: true
* uniFiedNumber
    * description: your company or branch ubn used to issue invoices
    * type: string
    * require: true
* bookType
    * description: your book type
    * type: string
    * require: true
* period
    * description: query year with or without months
    * type: string
    * require: true
    * format: yyyymm

### GET /DEFAULTAPI/get/getDonateUnitList

#### Parameters

* companyUn
    * description: company universal business number(ubn) of Taiwan
    * type: string
    * require: true

### GET /DEFAULTAPI/get/getInvoiceContent

#### Parameters

* invoiceNumber
    * description: invoice number
    * type: string
    * require: true if `sellTargetCode` is empty
* sellTargetCode
    * description: ?
    * type: string
    * require: true if `invoiceNumber` is empty
* invoiceStartDate
    * description: begining of invoice issued date interval
    * type: string
    * require: false
    * format: yyyyMMdd
* invoiceEndDate
    * description: end of invoice issued date interval
    * type: string
    * require: false
    * format: yyyyMMdd