# 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" } ```