# Rakmao X JFIN
## Preparing Connection
### Rakmao environment
| Name | Endpoint | AuthString | Username | Password |
| ---------- | --------------------------------- | -------------------------------------------------------------------- | ---------- | ------------ |
| Test | https://rakmao-api-test.builk.com | eyJVc2VyTmFtZSI6InBhLWpmaW4iLCJQYXNzd29yZCI6IjNHU3pFVzVwNmJpdVgifQ== | pa-jfin | 3GSzEW5p6biuX |
| Staging | https://apiprototype.rakmao.com | | pa-jfin | 3GSzEW5p6biuX |
| Production | https://api.rakmao.com | eyJVc2VyTmFtZSI6InBhLWpmaW4iLCJQYXNzd29yZCI6InZSYWVkalU5NFQifQ== | pa-jfin | vRaedjU94T |
> ทุกๆ Request ที่ทำการร้องขอมาที่ Rakmao ต้องแนบ Header มาด้วยดังนี้
```json=
authorization: Bearer {{access token}}
```
### JFIN environment
| Name | Endpoint | Module Key | IV | Secret |
| ---------- | --------------------------------- | -------------------------------------------------------------------- | ---------- | ------------ |
| Test | https://pah-credit-api-dev.jventures.co.th | jcClO5hZsVdPc2ieqB54QNC9CdEp2mIFUp+OYDTjtZs= | HsFVe05R8NUn2hfysYP2Mw== | K+DWvPpkoCJV1DwDElUyZUyzrWqL0N7PZOmWCJblGSQ= |
| Production | https://pah-credit-api.jventures.co.th | VaPmX8pyFu998gwANvGPQzDrpVYIpW3K3XfQKIzkPJs= | 9qMLz5WuqIrgDWYWjWV7UQ== | o2hLgSmcy1cd8Mo7hkuoJ423PZdeo1i7KroaopbMq60= |
> ทุกๆ Request ที่ทำการร้องขอไปที่ JFIN ต้องแนบ Header มาด้วยดังนี้
```json=
X-Module-Key: {{module key}},
X-Module-Token: {{module token}}
```
### JFIN Header Token
> Header Token หรือ Module Token จะแนบไปกับทุกการร้องขอที่ไปยัง JFIN สร้างโดย
> ใช้การ encrypt ด้วย algorithm AES (Mode: CBC, Padding: PKCS7) และแนบวันเวลาที่สร้าง token ไปด้วย
### Rakmao Request Authorization
#### Rqeuest Path `POST /api/v1/Authentication/RequestAPIToken`
> มี header เป็น "Content-Type: application/json"
> การ Request Authorization หรือการ Login ในที่นี้จะไม่สามารถใช้ User/Password และวิธีทั่วไปในการใช้งานเว็บไซต์ www.rakmao.com ให้ทำตามวิธีดังต่อไปนี้
> 1. นำ authen_string ที่ได้รับจากการลงทะเบียน (หมายเหตุ แจ้งให้ผู้พัฒนาลงทะเบียนให้) แนบลงในส่วนของ body ของ request
> 2. ทำการร้องขอ Method POST ไปที่ `{baseUrl}/api/v1/Authentication/RequestAPIToken` (หมายเหตุ baseUrl ในที่นี้หมายถึง Endpoint ในส่วน [Rakmao Environment](#Rakmao-Environment))
>
> หมายเหตุ authen_string ได้จากการนำ user/password ไปประกอบในรูปแบบ json และทำการ encoding ด้วย method base64, Example `{"UserName":"your-username","Password":"your-password"}`
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | -------------------------------------- | ------------------- |
| authenString (*required*) | authen string ที่ได้รับจากการลงทะเบียน | string (plain/text) |
**Data Response**
| Parameter | Description | Schema |
| ----------- | ----------------- | ------ |
| token | token สำหรับแนบ ใน Header | string |
| refreshToken | token สำหรับ ในการร้องขอสิทธิ์ใหม่อีกครั้งหลังจากหมดอายุ | string |
| expiration | วันที่และเวลาหมดอายุของ token ที่ร้องขอ | DateTime |
**Example Request**
```
"authString..."
```
**Example Response**
```json
{
"status": 200,
"message": "Success",
"data": {
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.****",
"refreshToken": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.****",
"expiration": 1613978508
}
}
```
### Rakmao Renew Authorization
#### Rqeuest Path `POST /api/v1/Authentication/RenewAPIToken`
> มี header เป็น "Content-Type: application/json"
> การ Renew Authorization คือการออก Token ใหม่โดยใช้สิทธ์ล่าสุดที่เคยได้รับ (หมายเหตุ ต้องเป็น refreshToken ล่าสุดเท่านั้น)
> 1. นำ refreshToken ที่ได้รับจากการ Rquest Authorization แนบลงในส่วนของ body ของ request
> 2. ทำการร้องขอ Method POST ไปที่ `{baseUrl}/api/v1/Authentication/RenewAPIToken` (หมายเหตุ baseUrl ในที่นี้หมายถึง Endpoint ในส่วน [Rakmao Environment](#Rakmao-Environment))
>
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | -------------------------------------- | ------------------- |
| refreshToken (*required*) | refreshToken ที่ได้รับจากการ login ครั้งล่าสุด | string (plain/text) |
**Data Response**
| Parameter | Description | Schema |
| ----------- | ----------------- | ------ |
| token | token สำหรับแนบ ใน Header | string |
| refreshToken | token สำหรับ ในการร้องขอสิทธิ์ใหม่อีกครั้งหลังจากหมดอายุ | string |
| expiration | วันที่และเวลาหมดอายุของ token ที่ร้องขอ | DateTime |
**Example Request**
```
"refreshToken..."
```
**Example Response**
```json
{
"status": 200,
"message": "Success",
"data": {
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.****",
"refreshToken": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.****",
"expiration": 1613978508
}
}
```
### Rakmao Body encryption
> ทุกๆ data ใน request body จะ encrypt ด้วย algorithm RSA256 ที่มี key size 2048 และ algorithm AES
#### Public Key for external
```xml
-----BEGIN PRIVATE KEY-----
MIIEoAIBAAKCAQEAhgGNeji4Y2k0pJr4ReSbrUvFUUtSzVhJVl0+ekcGm50/ntEZ
mZcDT/pr9OuojlLilQSzhObxm43LLvMbrSsO7eD7pbskode2l5TaOkXyTcDXz3IF
IG3D+zWtJg5m2Ib/Fu1iohMHF3imiAY79Q1qeTJLKQqNVyL5mgZxo7ElhFvYzpyF
YmnALkr/jXhQPKg7dkMh/6lWEKZ8inVQIycJUoiJrCVefRPA1DnV43eVCCmJaEYR
t9HHarFXleFrsoIahYVdQ+XDA8pdrDZvNPuG9AgCjriPXeY1/urpH+aVFGiG06LZ
qecvA3tca4pdi/IP0sw7yMphdkHiyZ00WlUqQQIBJQKCAQBsp1Ad6Mza+1sdrhVp
GjkJDQDaIWW7QKoqWXDthbJUqQMm0w3WenFjcRlDH/BzZcx402Efpn61eeMDeQGv
AFFLQMwJ1gIGrucTHr7HdvvQVyuFmrgMdKy92H6NjyL0wHvNZodS+qvN13JExsjU
h2sWKMdRtYdbaHdaSmn6WEfuxdSB267e77CaXopncjcgE+Gkc+kJji9CvfTSd2Vz
COcpowlMTxbvDSIb7hWwUJgkGA4LJHX/mNe1CyfDH+uNDRHFF3opksnETdGgZX8/
R15RaKlYi5KA1JqWjYfLUH8R4BR9gzBx964WqIVtr7Rjc37cSpKc6n+zOY2Ql70g
vfnNAoGBAM+ZWGaqvJrM0OcmYhLRX1oM018Co4DA6AQz2O5uPGG8nkqfiFhHXQcu
QG4rp/RZuUCWbX1lNN+tIUQ8SfbgIuk5htB8l7jkqspkrjHjdqPU5G9y+hfdudhM
wV1VF7QZs/8RNhSdjtUTjMuFI0X312DyQ9rlfplRmEsPgNzbjXSVAoGBAKU/xj6C
lphe0kuSK4H27BfraVbGkjSfj+yGPFOE6DUm1F4/kNBTJocMD4ArJ/YbhdEZb+Co
cXdNNYRxeJ8b4CPp+zHYTDNov5lF+f4/NWZDRKAdeLpHrrAanSALyXd1ucPSSvg7
hL72HrkjY7kZcqN7gb0hxCqlfDXuLf9N3Wf9AoGATo0MsTmvJdD1GTEeMKI/wTVJ
DzFuTGSq0Shf64OoJPtC0CCwIWccR+f8tBCEvVJhxWlZ3Gt7ykGCNX6Yhu0GSmjL
OiFOKkivU4AKj2rS8eHZ5PsShZIqpN7FtJy83FzApbN8PybcGUWq5TlLne8TOXBs
s7DIHlY5n9xaRbrbk+UCgYBU249QiD9+rTuOlysZOZvU7oIzernH/ukKwXjsnjIN
dM3rNWYKHNxu3K4Di8hpn2468WL20wnVeqzHeIoMg++jvVd6df2d29gCmY42c3xJ
RSM9dur3357kz2VxUikvgaSU/UkXr9xiD67pcwmyE/yZI78pxTs4fn4N2yxgge48
UQKBgDuGq3APARnr90fVDFMrZsLa8YgpwhBajqcDcddh2+NorX2HCPZE9ONPIdhj
gZyW7ynTT4RxWwkQVGQLwxqttjsOWhrwgV2QZHfJjWp+kM9qN3P7heFJ9QY1GbCD
gqRxzZg8fD/M6umClCb7p40+/M+tpOKvrGXIsREypzWtn7Sf
-----END PRIVATE KEY-----
```
#### Decryption process
> 1. แปลง encrypted data ให้อยู่ในรูปแบบ bytes ค่า encrypted AES Key จะอยู่ที่ 256 bytesแรก และ IV(Initialization Vector) จะอยู่ที่ 256 bytesถัดมา
> 2. Decrypt encrypted AES Key และ IV โดยใช้ algorithm RSA256 with OAEP padding and SHA-1
> 3. Decrypt encrypted data ที่เหลือ โดยใช้ algorithm AES ที่มี Key และ IV จากข้อที่ 2
#### Example data
> ผลลัพท์ที่ได้จาก body ของ requst เกิดจากการเข้ารหัสด้วย public key
```xml
Mb+k+guo+Zq0PmloiUdvxfqEyXVEhjn3FczLi+SHNELZHrSs65uDNanbffbAp20g4FuXw/mfOd6BkTgfdV5j6OPzwiSzroptpPOMYwsOmq1swSszrJZG1JCGGkS8GJJpCU2DcCS+CgoXnt8Op0/qaE18y/RDi550Tb4eKi2l12MoXZDNezFL5yWlBLj49tqgI5S0xv6WjsrnTeRfpxLdS1VAY15kLpiVmQ0Z9F50OQpKOZqkmGBvRCJDt71SuM+UCeyiJDZ6TQt30RSXM6YzJPCcNI07xeIV/7gv+gg1wpSsXBKCFXmxYh5YYaDpc5hzAYoLiUTIBii5TSgHfvoJcyVsdtEcDRrKK3kDqEFssPb09VyFAdmq0XMPwl9n25B/9eNHxJoqw4GYAOKgkJvmYPvvdvwoTGZdGfPx+gksUaQOPpUg3oYFFnuUh1Url8k6owNdx4eYBk5kvgtwHvTyrbATXvT71CQEV9Viw0+XBc5FYy9EkVXeksqCI7oZ6+XM8+OmT+KI1Piku1fGbCxpkaTCaBkHZlaaocT3a4F7WuaDStYnQ6qTVMWN/O55RWv4KsvGQpBIuO0bPhdNybYI0qKSNUpU7NU1TDHlbyQlQki0hu1Z1LNGXuhbfEhrisBWqf9Dip40olg7ekmJCficM8h8zGmN8CeB4MkfA7SNdXHVKlL1tjYSu/zwgUSILNU4tIhuwUBws6EOCsoUrJIkkDppvIWA5NRya57UNbHHeLkKn98PNo/Sn1hdcYx7J/JBESx17CLZcX70Rdos4zIiBB+gn0dpxjnOmQDT8AYlBHw+oS0KQDK0hKWSscVhaL4fmotHRzcZb5TZGvn2M7ElpQG3ed7gpXLRLzOIn++Qhwc/Lvd2BNx8eTv+NGQUzosLog/gLofJ8q8Jruljls65JhiCCNal/B588OTTBcFZ1NDCkM0JXEQPaMJqhcB2nc9knA6fQ5v2lIdrgRsWqpYkK1Lq25dZcYYaAizrxo9sUPYwgU6nD1JQGOSM/34+5adF9qkFqhULrVhcQ2EZl70TuGc/tNQiuDsrR/jdYIV3VH/qdJK2aEzQD6VR1mOvUU2iShKv71bhAzamMTtmFHmihcVekurFs8FgcPgMmfVkQKaVRIz11c9Geab8uYa9OU22
```
> ผลลัพท์ที่คาดหวังจากการนำข้อมูลด้านบน ถอดรหัสด้วย private key ที่แนบไว้
```json
{
"TaxId": "1121112323",
"FirstName": "nattaya",
"LastName": "jaranapol",
"PhoneNo": "0977777777",
"Email": "nattaya@builk.com",
"OrgCode": "RMO0000",
"Address": "ตึกมหานคร นะคะ",
"Province": "กรุงเทพมหานคร",
"District": "จอมทอง",
"SubDistrict": "บางค้อ",
"PostalCode": "10150",
"OrgType": 1
}
```
### Rakmao Response model
> เป็น model ที่นำไปใช้ในการตอบกลับของทุกๆ API และจะละเว้นการอธิบาย model นี้ในทุกๆ API ต่อไป
| Parameter | Description | Schema |
| --------- | -------------------------------------- |-------------|
| Data | ค่าที่ตอบกลับจากการทำงานของAPI นั้นๆ (ไม่มีการตอบกลับอนุญาติให้เป็น null) | Object |
| Status | สถานะการทำงานของ API นั้นๆ โดยหมวด 2xx คือทำงานปกติ 4xx คือข้อมูลบ้างอย่างไม่ถูกต้อง และ 5xx เป็นการทำงานผิดปกติของทาง API โดยถ้าได้รับ status หมวด 5xx สามารถแจ้งทีมงานเพื่อตรวจสอบได้ | Integer |
| Messge | คำอธิบายขยายความของ Status เบื้องต้น โดยหมวด 2xx จะเป็น success 4xx ส่วนใหญ่จะเป็นข้อบงชี้ของข้อมูลที่ไม่ถูกต้อง และ 5xx จะเป็น error ของตัวระบบ | String |
### Rakmao Acept Value (Enum)
#### RegisterStatusEnum
| Key | Value |
| ---------- | ----- |
| IN_PROGRESS | 1 |
| SUBMITTED | 2 |
| RESUBMIT | 3 |
| APPROVED | 4 |
| REJECTED | -1 |
#### ProjectOrderStatusEnum
| Key | Value |
| ---------- | ----- |
| Approved | 1 |
| Rejected | -1 |
#### OrganizationType
| Key | Value |
| ---------- | ----- |
| Juristic Person | 1 |
| Individual | 2 |
#### LoanStatus
| Key | Value |
| ---------- | ----- |
| Submitted | 1 |
| Confirmed | 2 |
| Completed | 3 |
| Disburse | 4 |
| Effective | 5 |
| Closed | 6 |
| Cancelled | -1 |
| Voided | -2 |
#### PaybackStatus
| Key | Value |
| ---------- | ----- |
| Paid | 1 |
| Unpaid | 2 |
### CreditLimitIncreaseStatusEnum
| Key | Value |
| ---------- | ----- |
| Submitted | 1 |
| Approved | 2 |
| Rejected | -1 |
### Action flow
#### User from rakmao register JFin
```mermaid
sequenceDiagram
participant Customer
participant Rakmao
participant PA_JFin
autonumber
Customer->>Rakmao: Interest Ads and click !
activate Rakmao
Note right of Rakmao: Create token user data with time expired session
Rakmao->>PA_JFin: Redirect with token
deactivate Rakmao
PA_JFin->>Rakmao: Use token to request user data
Note left of PA_JFin: API:RequestUserDetail
activate Rakmao
Rakmao->>PA_JFin: Return user data with rsa encryption
deactivate Rakmao
activate PA_JFin
PA_JFin->>Customer: decryption data and return autofill register page
deactivate PA_JFin
Customer->>PA_JFin: User register
PA_JFin->>Rakmao: Send something when register success
Note left of PA_JFin: API:SendSuccessRegister
```
## Rakmao Api
### GetUserInfo
**POST /api/v1/ExternalInterface/jfin/GetUserInfo/{token}**
> API สำหรับนำ Token ที่ได้รับเมื่อ user กดลงทะเบียนผ่าน Rakmao มาขอข้อมูลผู้ใช้เพิ่มเติม
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| token (*required*) | Token ที่แนบไปทาง query param เมื่อผู้ใช้งานสนใจสมัครผ่าน rakmao | Guid |
**Response Model (after Decyption)**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------- | ------ |
| TaxId | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
| FirstName | ชื่อผู้สมัคร | string |
| LastName | นามสกุลผู้สมัคร | string |
| PhoneNo | เบอร์โทรศัพท์ผู้สมัคร | string |
| Email | อีเมล์ผู้สมัคร | string |
| OrgCode | โค้ดตัวแทนที่ทำให้ทั้งฝั่งรักเหมาและJFIN เข้าใจตรงกัน | string |
| Address | ที่อยู่บริษัท | string |
| Province | จังหวัด | string |
| District | อำเภอ/เขต | string |
| SubDistrict | ตำบล/แขวง | string |
| ProvinceId | รหัสของจังหวัด | number |
| DistrictId | รหัสของอำเภอ/เขต | number |
| SubDistrictId | รหัสของตำบล/แขวง | number |
| PostalCode | รหัสไปรษณีย์ | string |
| OrgType | ประเภทของบริษัท | [number](#OrganizationType) |
| OrgName | ชื่อของบริษัท | string |
#### Example Request
```json
https://rakmao-api-test.builk.com/api/v1/ExternalInterface/jfin/GetUserInfo/MGNmNWEzMmItZDYwOC00YmNlLTg2ZmMtOTE5MDE0ZDlkNjVl
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": "QQ7isQTCS35dkoQD6yoBQ1HMJNzdXgjeC7BvVFfjAl5qMNeMFuqp6FgHcXQYlo3Fva7R3uW53Dpj0DdR6EJv87LpX4zLBSMrmWdOuTJOYpKhcQeh8hv85+aXHdTUYRtD2udKWJxjVwDpBq7EN6ppkD4vocYycPNchSffUnZRA6t/3AOqKwMoDw5tKQzX0YdRCyNBoOfPIe1+wPkOZIg28CBcWfld8Ba/7nHeALVvY9LqvstyY/OK8M1WdsmhmM6ytuqrTfnGrv0h8rh+Op+M1ea2U7A45kMCWngErgkk2db1H2eMudKp6iOT1/oH6FTYKRaqo7O3DPO4xKKiqxkdIg=="
}
```
#### Response Model (after Decyption)
```json
{
"TaxId": "1234567890123",
"FirstName": "นายมาดี",
"LastName": "มีขันติ",
"PhoneNo": "0901234567",
"Email": "madee_meekhanti@gmail.com",
"OrgCode": "RMO0001",
"Address": "123/4 ม.5",
"Province": "กรุงเทพมหานคร",
"District": "คลองสาน",
"SubDistrict": "คลองต้นไทร",
"ProvinceId": 111,
"DistrictId": 17,
"SubDistrictId": 69,
"PostalCode": "10600",
"OrgType": 1,
"OrgName": "Rakmao Construction"
}
```
### UpdateRegisterState
**POST /api/v1/ExternalInterface/jfin/UpdateRegisterState**
> API สำหรับแจ้งผลการลงทะเบียนการขอวงเงินเครดิตของ JFIN
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| Email (*required*) | อีเมล์ของผู้สมัคร | string |
| [Status](#RegisterStatusEnum) (*required*) | สถานะการลงทะเบียนที่จะแจ้งให้ทราบ | Number |
| Reason | เหตุผลที่ขอวงเงินเครดิตไม่สำเร็จ | string |
#### Example Request 1
```json
{
"orgCode":"RMO0001",
"email": "test@builk.com"
"status":1,
"reason": ""
}
```
#### Example Request 2
```json
{
"orgCode":"RMO0001",
"email": "test@builk.com"
"status": -1,
"reason": "คุณสมบัติไม่ผ่าน"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### UpdateUserRegisterSuccess
**POST /api/v1/ExternalInterface/jfin/UpdateUserRegisterSuccess**
> API สำหรับแจ้งผลการลงทะเบียนการใช้งานของ JFIN สำเร็จ
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| Email (*required*) | อีเมล์ของผู้สมัคร | string |
#### Example Request
```json
{
"orgCode":"RMO0001",
"email": "test@builk.com"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### UpdateProjectOrderState
**POST /api/v1/ExternalInterface/jfin/UpdateProjectOrderState**
> API สำหรับแจ้งผล การลงขอใช้วงเงินกับโครงการ
**Body Request**
| Parameter | Description | Schema |
| ---------------------------------------------- | ----------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| [Status](#ProjectOrderStatusEnum) (*required*) | สถานะการลงทะเบียนที่จะแจ้งให้ทราบ | Number |
| ProjectOrderId | รหัสโปรเจคของทาง Pah | string |
| Detail | คำอธิบายเพิ่มเติมสำหรับสถานะที่เปลี่ยนไป | string |
#### Example Request 1
```json
{
"orgCode":"RM0001",
"DocumentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"ProjectOrderId":"PJ-000001",
"status":1
}
```
#### Example Request 2
```json
{
"orgCode":"RM0001",
"documentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"ProjectOrderId":"PJ-000001",
"status": -1,
"detail" : "ไม่สามารถอนุมัตได้เนื่องจากวงเงินคงเหลือไม่เพียงพอ"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### PayoutApprove
**POST /api/v1/ExternalInterface/jfin/PayoutApprove**
> API สำหรับแจ้งผลการจ่ายเงินสู่ร้านค้า
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| Status | สถานะ Payout | Number |
| Reason | เหตุผลที่ payout ไม่สำเร็จ | string |
#### Example Request 1
```json
{
"orgCode":"RM0001",
"DocumentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"Status": 1,
"Reason": ""
}
```
#### Example Request 2
```json
{
"orgCode":"RM0001",
"DocumentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"Status": -1,
"Reason": "Error"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### ApprovedVoidCredit
**POST /api/v1/ExternalInterface/jfin/ApprovedVoidCredit**
> API สำหรับแจ้งผลการยกเลิกการใช้วงเงินเครดิต
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| CreditLimit (*required*) | จำนวนวงเงินเครดิตที่ได้รับคืน | number |
#### Example Request 1
```json
{
"orgCode":"RM0001",
"DocumentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"creditLimit":32000
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### GetProjectInfo
**POST /api/v1/ExternalInterface/jfin/GetProjectInfo/{token}**
> API สำหรับนำ Token ที่ได้รับเมื่อผู้ใช้เลือกชำระเงินผ่าน Platform ป๋า ใน Rakmao มาขอข้อมูลโครงการเพิ่มเติม
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| token (*required*) | Token ที่แนบไปทาง query param เมื่อผู้ใช้งานชำระเงินผ่าน rakmao ในวิธีการ Credit ของ Pah | Guid |
**Response Model (after Decyption)**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------- | ------ |
| OrgCode | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| ProjectName | ชื่อโครงการ | string |
| DocumentRefId | รหัสเอกสารของทาง rakmao | string |
| DocumentCode | Document code ของทาง rakmao | string |
| ContactName | ชื่อผู้ติดต่อ | string |
| <mark>ContactPhone</mark> | เบอร์โทรผู้ติดต่อ | string |
| GrandTotal | ยอดที่ต้องชำระ | number |
| PoDocumentUrl | url สำเนาเอกสารอีเล็กทรอนิคของ PurchaseOrder | string |
| UserInfo | ข้อมูลของผู้ใช้ | Object |
| RedirectUrl | url สำหรับกลับมา rakmao เพื่อแจ้งผลการใช้เครดิต | string |
| <mark>PoInfo</mark> | ข้อมูลของ PurchaseOrder | Object |
**UserInfo Object**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------- | ------ |
| TaxId | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
| FirstName | ชื่อผู้สมัคร | string |
| LastName | นามสกุลผู้สมัคร | string |
| PhoneNo | เบอร์โทรศัพท์ผู้สมัคร | string |
| Email | อีเมล์ผู้สมัคร | string |
| OrgCode | โค้ดตัวแทนที่ทำให้ทั้งฝั่งรักเหมาและJFIN เข้าใจตรงกัน | string |
| Address | ที่อยู่บริษัท | string |
| Province | จังหวัด | string |
| District | อำเภอ/เขต | string |
| SubDistrict | ตำบล/แขวง | string |
| ProvinceId | รหัสของจังหวัด | number |
| DistrictId | รหัสของอำเภอ/เขต | number |
| SubDistrictId | รหัสของตำบล/แขวง | number |
| PostalCode | รหัสไปรษณีย์ | string |
| OrgType | ประเภทของบริษัท | [number](#OrganizationType) |
| OrgName | ชื่อของบริษัท | string |
**PoInfo Object**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------- | ------ |
| VendorOrgName | ชื่อบริษัทผู้ขาย | string |
| VendorContactName | ชื่อผู้ขาย | string |
| VendorContactPhone | เบอร์โทรผู้ขาย | string |
| VendorOrgTaxId | เลขประจำตัวผู้เสียภาษีผู้ขาย | string |
| VendorAddress | ที่อยู่ผู้ขาย | string |
| DeliveryDate | วันที่จัดส่ง | DateTime |
| DeliveryAddress | สถานที่จัดส่ง | string |
| SubTotal | ราคารวมสินค้า | number |
| Discount | ยอดส่วนลด | number |
| BeforeTax | ราคาก่อนคำนวณภาษี | number |
| ProductVat | ภาษีค่าสินค้า | number |
| ProductFee | ราคาสินค้าสุทธิ | number |
| DeliveryFee | ค่าขนส่ง | number |
| DeliveryVat | ภาษีค่าขนส่ง| number |
| Items | รายการสินค้า | Array of Object |
**Items Object**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------- | ------ |
| Name | ชื่อสินค้า | string |
| Quantity | จำนวนสินค้า | number |
| PricePerUnit | ราคาสินค้าต่อหน่วย | number |
| Total | ราคาสินค้า | number |
| Unit | หน่วยของสินค้า | string |
| Category | หมวดหมู่สินค้า | string |
#### Example Request
```json
https://rakmao-api-test.builk.com/api/v1/ExternalInterface/jfin/GetProjectInfo/MGNmNWEzMmItZDYwOC00YmNlLTg2ZmMtOTE5MDE0ZDlkNjVl
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": "hf9v5QSiBC+hPXMu8KkmO9vXWdW0CA6//idCTeimCQ7oUIxi9VcT4OqBTz9TwU86zr91uj+UBe3U1eYWfn5Ch2+mP9n+ds/MLhyo1A6mPNNQwjKKwpYLM2aKa03oiOIgm7DiiVT2EUfe2Rdfcg9Ju2toE8uG71rEfMKgE7b4/E3BGYeSGTvbAfge8GsNxCAnIkiq/oSe97PkHFjUvHM1fEnZuIstw176wsRy9w89I1iQTUqEawK7iVvsOf4Ib6xkVqNtKWMWclS/AROXJDoHl+oXJpRw8R0nrXrB4x87+WUj0swqQ6RYx6f3R+/qEEUghpen7xrITvlDuyAQRS3FLD4Ql0qUCNR/aT6JApVji3y3G1ykQG+79Wcu4wqVUP7D62hAOTm2j/N1mmNt/TMtwoCiC6slyvwI66li+smlkZm3yTVGCglCRPHGpLQxK6S+VmTewl36SydKwkb7i7i2jk5TxpJPjJAAMjR/fKjsazfCnjrKpxu/hfqo7blooDC6QZXsT5rtu/xtgTLifhW6iLOSj4qqNX69XlckdGb/y8T12MkvSApHLA7vsTFCPqwf48NpcC7Z9xv+LylZS51iqebi3xPQPq9ahIyi2lgxB0Hl4suwJowibbiOWKVRzaEU4hO4uPkeiRHg6cxyoGu3D0JbkSoDP/z63ODkSjUSLQqxZBeudr9lLy2a4v/YWUQfze+KJIvt9prjzqWHmhLmSyBlyuSaP2Yev/nvc8NdTeVklTwXnFe1yXwkntA1hAjstfj+P1b8QgMNQKnAWuC4lTPKZmDKQ/pfmIs4assttWyYmxKVEyFcB26P1BdT0AaDisCJYTOiB+SWyjwBl592IIDgqlNcWhvgCJ8JRTmauJAyzClFy1ztV5r/ed02lteC+unNgWU3vmDwcxOPAotBaLIp4DBvQCguUBptet8Nx9i21WAPP1Q+aDYEC0KDOFDElAXIa0jUnyIoCeFfsM0RZLgoEI71soXk/zKIviyXYIYi5tIiycqj8wSHjQLBrZ9jESlhfDLfoeC8CQnR7k74NdzP78Vg7/igTCP0fRbuCgKjNSh9G5S7StUI7zkCj4hMu+4DR5dBGIEBMerGk4ZAyYfvSF/DyfcLXk146sKVs/vemuJKKQ9TL/k4qCUPaO5NtGRhbRGZXBN6WXqEczrosARZvvcGpI4TqazR+hFZQ328d8bS6NZ5g1n5is0yaHzv5w0HvGWD5j89Ez4FTFITNH8E7qb7psJcn/jQnQdjAHd0s/4Ucp7Jl8uEOpMerUucw86OImVE0NTlNq4TlLV/d6wWypE+d3159vDnYARMJftMGlW7qO1f94YTcPT17ieU/P6fFLtoQgZPazSdKQU1QiJn7f4E0KWU6TZpBXzKaeaepatkrCAOICD7b0MFMpOAE85CjXP6GCL1yQO1KVFBq5+VdWeLOr9yfE7/C+CEoRK6Axc422UZeWqaBeBz5aphpkZ0dZdamUvMRzof/i3FGICa/TOq+kDL0iUQXbjFskHf49aMMHZn9HOn1e4YAyRzejouIB2TVzSiygoJg/KqDiSdO7IMuSKl9zpjmihbd+fwcx3az/jN8JWGaUimUC2wNPGBSOqlqNUDhUwddTJLks9H1m/ruTqMur0qqujqdIj+EeIoS+ii+tbWw5S1Z1vhYIjymHslqlGZBjU3c3bgOk1LH0tu+ZFjmI6PWqh32y1jVBPI0eGfiNGYjqrMSjdpBYWK3j2G8nZmq+BOAtUUVt9X5z/rck5W8t+voEmLSUZEAfabk3jj2kU6vAUNZozbHbb301iuU07XDIgbjVi3pgTEgnIMeVhqXQOTIpUo2J7p0QRIbdm0hWqGkLFg23Wf"
}
```
#### Response Model
```json
{
"OrgCode": "RMO0005",
"ProjectName": "Test comparesheet",
"DocumentRefId": "11e71be4-47c2-4f79-84b9-d5a721493b2a",
"DocumentCode": "PO-230912-0001",
"ProjectAddress": "ตึกมหานคร นะคะ",
"ContactName": "Test",
"ContactPhone": "0899999999",
"GrandTotal": 510.00,
"PoDocumentUrl": "https://rakmao-po-api-test.builk.com/api/v1/FileManagement/DownloadFile/UG9BdHRhY2htZW50LzIwMjMwNzEwMDQwMDU0LWY5MDY5NjIyLWY4NTUtNDQ2MS05ZmViLTFiNDA5NWMzZjA5OA==",
"RedirectUrl": "https://rakmao-web-test.builk.com/po/checkout/paymentSuccess/11e71be4-47c2-4f79-84b9-d5a721493b2a",
"UserInfo": {
"TaxId": "1121112323",
"FirstName": "nattaya",
"LastName": "jaranapol",
"PhoneNo": "0977777777",
"Email": "nattaya@builk.com",
"OrgCode": "RMO0005",
"Address": "ตึกมหานคร นะคะ",
"Province": "กรุงเทพมหานคร",
"District": "จอมทอง",
"SubDistrict": "จอมทอง",
"ProvinceId": 111,
"DistrictId": 36,
"SubDistrictId": 126,
"PostalCode": "10150",
"OrgType": 1,
"OrgName": "บริษัท builk cha cha cha จำกัด 7"
},
"PoInfo": {
"VendorOrgName": "ร้านค้าทดสอบ",
"VendorContactName": "ผู้ขาย",
"VendorContactPhone": "0899999999",
"VendorOrgTaxId": "0000000000111",
"VendorAddress": "ห้อง 1*103 เลขที่ 1624/2 ถนน เพชรบุรีตัดใหม่ แขวง มักกะสัน เขตราชเทวี กรุงเทพมหานคร 10400",
"DeliveryDate": "2023-06-24 17:01:32",
"DeliveryAddress": "ตึกมหานคร นะคะ",
"SubTotal": 511.55,
"Discount": 11.55,
"BeforeTax": 467.29,
"ProductVat": 32.71,
"ProductFee": 500.00,
"DeliveryFee": 10.00,
"DeliveryVat": 0.65,
"Items" : [
{
"Name": "Product 1",
"Quantity": 2.00,
"PricePerUnit": 100.00,
"Total": 200.00,
"Unit": "ea",
"Category": "สินค้าทดสอบ"
},
{
"Name": "Product 2",
"Quantity": 3.10,
"PricePerUnit": 100.50,
"Total": 311.55,
"Unit": "ea",
"Category": "สินค้าทดสอบ"
}
]
}
}
```
### SendPaymentDueDate
**POST /api/v1/ExternalInterface/jfin/SendPaymentDueDate**
> API สำหรับส่งแจ้งเตือนวันครบกำหนดชำระ
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| GrandTotal (*required*) | ยอดที่ครบกำหนดชำระ | number |
| DueDate (*required*) | วันและเวลาที่ครบกำหนดชำระ | DateTime |
#### Example Request
```json
{
"orgCode":"RM0001",
"DocumentRefId":"8a0bef9f-eef1-4767-8030-1076b2e27fab",
"GranTotal":32000.25,
"DueDate": "2023-06-24 17:01:32"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### RequestAdditionalDocument
**POST /api/v1/ExternalInterface/jfin/RequestAdditionalDocument**
> API สำหรับส่งแจ้งเตือนเมื่อต้องขอเอกสารการอนุมัติวงเงินเครดิตเพิ่มเติม
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| Email (*required*) | อีเมล์ผู้สมัคร | string |
#### Example Request
```json
{
"OrgCode":"RM0001",
"Email": "test123@gmail.com"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### NotificationRegistrable
**POST /api/v1/ExternalInterface/jfin/NotificationRegistrable**
> API สำหรับส่งแจ้งเตือนเมื่อสามารถลงทะเบียนได้อีกครั้งหลังจากไม่ได้รับอนุมัติวงเงินเครดิต
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
#### Example Request
```json
{
"OrgCode":"RM0001"
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### UpdateCreditLimitIncreaseStatus
**POST /api/v1/ExternalInterface/jfin/UpdateCreditLimitIncreaseStatus**
> API สำหรับอัพเดทสถานะการขอเพิ่มวงเงิน
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| OrgCode (*required*) | โค้ดตัวแทนที่ทำให้ฝั่งทั้งรักเหมาและJFIN เข้าใจตรงกัน | string |
| CreditAmount | วงเงินที่อนุมัติเพิ่ม | number |
| [Status](#CreditLimitIncreaseStatusEnum) (*required*) | สถานะการขอเพิ่มวงเงิน | number |
| Reason | เหตุผลในการไม่อนุมัติ | string |
#### Example Request
```json
{
"OrgCode":"RM0001",
"CreditAmount": 10000.00,
"Status": 1,
"Reason": null
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
### UpdateDeliveryConfirmationStatus
**POST /api/v1/ExternalInterface/jfin/UpdateDeliveryConfirmationStatus**
> API สำหรับอัพเดทสถานะการยืนยันการจัดส่งจากผู้ซื้อ
**QueryParam Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| Status | สถานะการยืนยัน | bool |
#### Example Request
```json
{
"DocumentRefId":"491482c2-6d89-4511-9cd3-aed095853663",
"Status": true,
}
```
#### Example Response
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
## JFIN Api
### GetCreditInfo
**Get /v1/credits/tax-id/{taxId}**
> API สำหรับเรียกดูข้อมูลเครดิต
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| TaxId (*required*) | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
#### Example Request
> {JFIN endpoint}/v1/credits/tax-id/1293844756637
**Body Result**
| Parameter | Description | Schema |
| ------------- | ----------------------------------------------------- | ------ |
| id | | string |
| orgId | | string |
| financialAmount | | number |
| balance | | number |
| state | | string |
| status | | string |
| createdAt | | DateTime |
| createdBy | | string |
| updatedAt | | DateTime |
| updatedBy | | string |
| used | | number |
#### Example Response
```json
{
"id": "a3eb2156-e104-4598-903b-482123e483b5",
"orgId": "c5a43615-381d-4897-bc34-c8e2ef4ac9c8",
"financialAmount": "600000",
"balance": "600000",
"state": "NORMAL",
"status": "ACTIVE",
"createdAt": "2023-07-25T02:10:45.998292Z",
"createdBy": "279507f0-5a4c-438b-8cea-c8d53db049f7",
"updatedAt": "2023-07-25T02:10:45.998292Z",
"updatedBy": "279507f0-5a4c-438b-8cea-c8d53db049f7",
"used": "0"
}
```
### UploadSellerDocument
**POST /v1/quotations/confirm-delivery**
> API สำหรับส่งข้อมูลและเอกสารของผู้ขาย
**Body Request**
| Parameter | Description | Schema |
| --------- | ----------------------------------------------------- | ------ |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| ConfirmTimestamp (*required*) | วันที่ยืนยันการจัดส่ง | DateTime |
| Note | หมายเหตุการจัดส่ง/ ข้อมูลเพิ่มเติม | string |
| AttachedFileList | รายการไฟล์แนบ | Array of object |
| AttachedInvoiceFileList | รายการไฟล์แนบ Invoice | Array of object |
**AttachedFileList Object**
| Parameter | Description | Schema |
| -------------------------- | ------------------- | ------ |
| AttachedFileName (*required*) | | string |
| AttachedFileLink (*required*) | | string |
#### Example Request
```json
{
"DocumentRefId" : "491482c2-6d89-4511-9cd3-aed095853663",
"ConfirmTimestamp": "2023-02-22T00:00:00.000000Z",
"Note": "การจัดส่งเร็วกว่ากำหนด",
"AttachedFileList": [
{
"AttachedFileName" : "devivery-site-image-1.jpg",
"AttachedFileLink" : "https://example.domin/path/to/file"
},
{
"AttachedFileName" : "devivery-site-image-2.jpg",
"AttachedFileLink" : "https://example.domin/path/to/file"
}
],
"AttachedInvoiceFileList": [
{
"AttachedFileName" : "devivery-site-image-1.jpg",
"AttachedFileLink" : "https://example.domin/path/to/file"
},
{
"AttachedFileName" : "devivery-site-image-2.jpg",
"AttachedFileLink" : "https://example.domin/path/to/file"
}
]
}
```
**Body Result**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| updatedAt | | DateTime |
#### Example Response
```json
{
"updatedAt": "2023-08-08T16:34:18.0271669+07:00"
}
```
### OrderComplete
**POST /v1/quotations/confirm-order-complete**
> API สำหรับส่งข้อมูลสถานะของ order เพื่อให้ทำการจ่ายเงินให้กับผู้ขาย
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
#### Example Request
```json
{
"DocumentRefId" : "491482c2-6d89-4511-9cd3-aed095853663"
}
```
**Body Result**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| updatedAt | | DateTime |
#### Example Response
```json
{
"updatedAt": "2023-08-08T16:34:18.0271669+07:00"
}
```
### UpdateBankInfo
**POST /v1/quotations/update-bank-info**
> API สำหรับส่งข้อมูลสถานะของ order เพื่อให้ทำการจ่ายเงินให้กับผู้ขาย
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| bankAccountNo (*required*) | เลขที่บัญชีของ seller | string |
| bankAccountName (*required*) | ชื่อบัญชีของ seller | string |
| bankCode (*required*) | รหัสธนาคารที่ออกบัญชี | string |
#### Example Request
```json
{
"documentRefId" : "491482c2-6d89-4511-9cd3-aed095853663",
"bankAccountNo": "1234567890",
"bankAccountName": "Test Test",
"bankCode": "014"
}
```
**Body Result**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| updatedAt | | DateTime |
#### Example Response
```json
{
"updatedAt": "2023-08-08T16:34:18.0271669+07:00"
}
```
### RequestVoidCredit
**POST /v1/quotations/void**
> API สำหรับส่งข้อมูลการยกเลิกการชำระเงิน
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| TaxId (*required*) | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
| DocumentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| Note (*required*) | หมายเหตุการยกเลิกการชำระเงิน | string |
#### Example Request
```json
{
"TaxId" : "1234567890123",
"DocumentRefId" : "491482c2-6d89-4511-9cd3-aed095853663",
"Note" : "Note"
}
```
**Body Result**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| updatedAt | | DateTime |
#### Example Response
```json
{
"updatedAt": "2023-08-08T16:34:18.0271669+07:00"
}
```
### InquiryUserStatus
**POST /v1/customers/status**
> API สำหรับสอบถามสถานะของผู้ใช้
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| TaxId (*required*) | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
| Email (*required*) | Email ของผู้ใช้ | string |
**Body Response**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| [userState](#RegisterStatusEnum) (*required*) | สถานะการลงทะเบียนของผู้ใช้งานที่จะแจ้งให้ทราบ | Number |
| creditApplicationState (*required*) | สถานะการขอวงเงินเครดิตที่จะแจ้งให้ทราบ | Number |
#### Example Request
```json
{
"TaxId" : "0000000000003",
"Email" : "test@builk.com"
}
```
#### Example Response
```json
{
"userState": "NOT_REGISTER",
"creditApplicationState": "IN_PROGRESS"
}
```
### GetContractList
**GET /v1/contracts/partner/loans?taxId={tax id}&pageNumber={page number}&pageSize={page size}**
> API สำหรับรับโครงการที่ทำสัญญากับ Pah
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| TaxId (*required*) | เลขประจำตัวผู้เสียภาษีของบริษัท | string |
| PageNumber (*required*) | | string |
| PageSize (*required*) | | string |
**Body Response**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| loans | | Array of object |
| page | | Object |
**Loan Model**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| id | | string |
| quotationId | | string |
| contractId | | string |
| refId | | string |
| moduleId | | string |
| orgId | | string |
| name | | string |
| orgName | | string |
| loanAmount | | Number |
| totalFeeAmount | | Number |
| interestRate | | Number |
| paybackPerTerm | | Number |
| termAmount | | Number |
| monthPerTerm | | Number |
| remainPaybackAmount | | Number |
| remainPaybackPrincipalAmount | | Number |
| remainPaybackTotalFeeAmount | | Number |
| state | | [string](#LoanStatus) |
| bankCode | | string |
| BankAccountNo | | string |
| BankAccountName | | string |
| createdAt | | DateTime |
| updatedAt | | DateTime |
| dueDate | | DateTime |
| url | | string |
| paybackList | | Array of object |
| totalExtraFee | | Number |
| totalInterest | | Number |
| totalCollectionFee | | Number |
| totalFee | | Number |
| feeDetail | | Object |
**Payback Model**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| term | | Number |
| dueDate | | DateTime |
| paidDate | | DateTime |
| payment | | Number |
| state | | [string](#PaybackStatus) |
**FeeDetail Model**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| totalFee | | Number |
| feeList | | Array of object |
**FeeList Model**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| name | | string |
| rate | | Number |
| amount | | Number |
**Page Model**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| pageSize | | Number |
| total | | Number |
| totalPages | | Number |
| pageNumber | | Number |
#### Example Request
> {JFIN endpoint}/v1/contracts/partner/loans?taxId=0000000000056&pageNumber=1&pageSize=10
#### Example Response
```json
{
"loans": [
{
"id": "9d15e261-c545-493e-b734-322f6c3fbae4",
"quotationId": "9d15e261-c545-493e-b734-322f6c3fbae4",
"contractId": "657d7de4-42ae-47a0-934b-084adaa330aa",
"refId": "2cfb2052-c79b-46cb-a03a-dd9d39d15090",
"moduleId": "d0cc2e56-f8ae-4df8-8f74-49fbbf15021b",
"orgId": "50d5e847-6537-4ddf-b6d0-3ba84b4f9369",
"name": "Tarm",
"orgName": "Pah56",
"loanAmount": "16500",
"totalFeeAmount": "165",
"interestRate": "25",
"paybackPerTerm": "16665",
"termAmount": 1,
"monthPerTerm": 1,
"remainPaybackAmount": "16665",
"remainPaybackPrincipalAmount": "16500",
"remainPaybackTotalFeeAmount": "165",
"state": "EFFECTIVE",
"bankCode": "022",
"BankAccountNo": "7007244240",
"BankAccountName": "Test Test",
"createdAt": "2023-09-05T13:44:42.217644+07:00",
"updatedAt": "2023-09-08T16:40:00.650681+07:00",
"dueDate": "2023-09-08T00:00:00+07:00",
"url": "https://pah-credit-dev.jventures.co.th/projects/rakmao/9d15e261-c545-493e-b734-322f6c3fbae4",
"paybackList": [
{
"term": "1",
"dueDate": "2023-09-08T00:00:00+07:00",
"paidDate": null,
"payment": "17060.55",
"state": "UNPAID"
}
],
"totalExtraFee": "560.55",
"totalInterest": "395.55",
"totalCollectionFee": "0",
"totalFee": "165",
"feeDetail": {
"totalFee": "165",
"feeList": [
{
"name": "ค่าธรรมเนียมการใช้แพลตฟอร์ม",
"rate": "1",
"amount": "165"
}
]
}
}
],
"page": {
"pageSize": 10,
"total": 5,
"totalPages": 1,
"pageNumber": 1
}
}
```
### Request Confirm Product
**POST /v1/quotations/request-confirm-product**
> API สำหรับยืนยันการจัดส่งกับผู้ซื้อ
**Body Request**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| documentRefId (*required*) | รหัสเอกสารของทาง rakmao | string |
| requestDate (*required*) | เวลาส่งคำขอ | DateTime |
**Body Result**
| Parameter | Description | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| updatedAt | | DateTime |
#### Example Request
```json
{
"documentRefId": "491482c2-6d89-4511-9cd3-aed095853663",
"requestDate": "2023-08-08T16:34:18.0271669+07:00"
}
```
#### Example Response
```json
{
"updatedAt": "2023-08-08T16:34:18.0271669+07:00"
}
```