---
# System prepended metadata

title: Rakmao X Easy Money

---

# Rakmao X Easy Money

## Preparing Connection

### Rakmao environment
| Name       | Endpoint                          | AuthString                                                           | Username   | Password     |
| ---------- | --------------------------------- | -------------------------------------------------------------------- | ---------- | ------------ |
| Test       | https://rakmao-api-test.builk.com | eyJVc2VyTmFtZSI6ImVhc3ktbW9uZXkiLCJQYXNzd29yZCI6IkROZWFtMm11bFpyZyJ9 | easy-money | DNeam2mulZrg |
| Staging    | https://apiprototype.rakmao.com   | eyJVc2VyTmFtZSI6ImVhc3ktbW9uZXkiLCJQYXNzd29yZCI6IkROZWFtMm11bFpyZyJ9 | easy-money | DNeam2mulZrg |
| Production | https://api.rakmao.com            | eyJVc2VyTmFtZSI6ImVhc3ktbW9uZXkiLCJQYXNzd29yZCI6Ims5T1BqVzk4dm9hUyJ9 | easy-money | k9OPjW98voaS |

 > ทุกๆ Request ที่ทำการร้องขอมาที่ Rakmao ต้องแนบ Header มาด้วยดังนี้ 
```json=
authorization: Bearer {{access 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

#### Public Key for external
```xml 
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCRNmt/q493jkP9
Mcm59VWwHe2qyBjBxZRrW+PX85/IiVWkU0RxZNg1vQ76DWEJ7SJmCUbziYetq/4M
l+fKFI7RroGg6s+PV1PsPYWNDhBAtYyEUiLXZ4oETGpvBzIdOmdW2HkgMTAMrf2g
aQ+JF6K9UNcFsVwPtZm7XuZbCG5QGwJka68UNa9fv8IOKk7tcLSjeEPOatvAnFtl
Q/dZEXThu/rlqQanuowUIoJQUQoiSPwzD0uqv5kdTNTJzKc8rnHy8ACcwJOwAHGA
Cd8qLOxBE7ZyM+KWxtIWfAqQeA1MJSIf8jzKiq/RdvllCnXH5jd1FU6hQ1ej2o14
aY/Fh9bPAgMBAAECggEAWnSD0iuUWu0L/RSejG/+yI5cFh4/DbV+FsJO05620bx6
1Lnp0Jj49cCnK6xZ3k0ROG5e/CWXlt+kiUO253KW5JbHuO2MDcZgSLCqGIvCJAzz
Uxm3Cmc82iCfzDm3Re2zoa2HBj6dp8haTSoku0k13qgUyT8KEd8VvFoJNHuz+8Fm
Lq+PLAj77AvzUnDCFbmv2DMdcI0EnfHHimEtrKzmqhPZROPqtu3ODN/N6Bs/kwW4
/ZGdMN+hhIBRxT777DcDaKjRfhBgIi5IZWrN0lpsRZM3SZCIWBZA+JDh0OiUIA3P
XojHrODvISdHooEs0LM6qOIOF0XWUv6bzpuIl9sLwQKBgQDTObVqcXdcY6K4KC4c
uCY0LorcPYp/vAt2Hhih20foDRIX40nPtRiSWOHnh3o8yW6xh7DtWbl0TVErV/Fy
5Q3vi9+7xxATQyLopFfC+ln2TdrRlJTj2oF/yTNIAOh04KXqfvdgMVr618hUrWbs
7czQXX/NZHM4Ei9DuFxJsgI2QwKBgQCv/nqvBDdTgU506ew2+8bHlMO7HtUW+FXd
hrnOga8kPWVJvuphEeIbegydV/UBITwkOJ8Q5NWq+2pwxZRcp/m1OS9O+bKFBkjf
+WyoxXgq+eXJpTwnqt8s/EDrSOlP0y3ZykQdurGc+4xf7YM7SF11KcPQpJU+Klhe
yZZvJDRihQKBgB9oeFpgjuAVDLAXgWvR0hR2Sz2ehQajXozswrrmkVWnA+a7bFFP
W1z/jG/SDFIXnbcWNy/D5Liven9Yb1WnS6AwC0+vtOs4U2uGbGpYsaHXR89cKZuL
9S+cKlztjaM7eFBbGsuZ6y5bgbVdp21Zmtfs30EaS6utwItwUYC/0GZjAoGARWAB
KIB29rngHYIglUQGhaIEzfxHb3iREHQNRnQkgBqblMhnR8Bu6vnfgx6q+7kIJhcT
zOsHtxDIUo/v/d5RNrjGB1Gyp3FkxLVjudutlPNRO32hCtn2g5skVBs3rTnHtzRe
SYHQhds66I2Nz46lGIxQHizij9DNaP/6BvG0nKkCgYB7XvDog+xVk105zRpiEgy/
QH/QsPmVZbBXadouuM6NIUBkJ8+Zwy9vfDDCz72aHFcwjbsvDzLcXT7sz+fuozSd
E7fd8kGt4KXwBDQgeXPHpz9l4pY2z+Q2AHuhHlpS2ge5nNYyPQUmnagYlQctAAXT
69qOEq6ZuBcOqurGwkXcPg==
-----END PRIVATE KEY-----
```
#### Example data
> ผลลัพท์ที่ได้จาก body ของ requst เกิดจากการเข้ารหัสด้วย public key
```xml
QQ7isQTCS35dkoQD6yoBQ1HMJNzdXgjeC7BvVFfjAl5qMNeMFuqp6FgHcXQYlo3Fva7R3uW53Dpj0DdR6EJv87LpX4zLBSMrmWdOuTJOYpKhcQeh8hv85+aXHdTUYRtD2udKWJxjVwDpBq7EN6ppkD4vocYycPNchSffUnZRA6t/3AOqKwMoDw5tKQzX0YdRCyNBoOfPIe1+wPkOZIg28CBcWfld8Ba/7nHeALVvY9LqvstyY/OK8M1WdsmhmM6ytuqrTfnGrv0h8rh+Op+M1ea2U7A45kMCWngErgkk2db1H2eMudKp6iOT1/oH6FTYKRaqo7O3DPO4xKKiqxkdIg==
```
> ผลลัพท์ที่คาดหวังจากการนำข้อมูลด้านบน ถอดรหัสด้วย private key ที่แนบไว้
```json
{
  "Id": "ex001",
  "Name": "Example Name",
  "Age": 100,
  "Type": [
    1,
    2,
    3,
    4
  ]
}
```

### 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 |
### Action flow
#### User from rakmao register easymoney 

```mermaid
sequenceDiagram
    participant Customer
    participant Rakmao
    participant EasyMoney
    autonumber
    Customer->>Rakmao: Interest Ads and click !
    activate Rakmao
    Note right of Rakmao: Create token user data with time expired session
    Rakmao->>EasyMoney: Redirect with token
    deactivate  Rakmao
    EasyMoney->>Rakmao: Use token to request user data
    Note left of EasyMoney: API:RequestUserDetail
    activate Rakmao
    Rakmao->>EasyMoney: Return user data with rsa encryption
    deactivate  Rakmao
    activate EasyMoney
    EasyMoney->>Customer: decryption data and return autofill register page
    deactivate  EasyMoney
    Customer->>EasyMoney: User register
    EasyMoney->>Rakmao: Send customer code when register success 
    Note left of EasyMoney: API:SendSuccessRegister
```
#### User rakmao use the service easymoney 

```mermaid
sequenceDiagram
    participant Customer
    participant EasyMoneyBranch    
    participant EasyMoney
    participant Rakmao
    autonumber
    Customer->>EasyMoneyBranch: Make transection
    EasyMoneyBranch->>Customer: Give cash of transection
    EasyMoneyBranch->>EasyMoney: Insert/Update transection
    EasyMoney->>Rakmao: Send success transection data with Ref code 
    Note right of EasyMoney: API:SendSuccessTransection

```

## Rakmao API
### `POST /api/v1/ExternalInterface/EasyMoney/RequestUserDetail/{token}`

 **QueryParam Request**
| Parameter                 | Description                                       | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| token (*required*)     | Token ที่แนบไปทาง query param เมื่อผู้ใช้งานสนใจสมัครผ่าน rakmao | Guid   |

**Response Model (after Decyption)**
| Parameter    | Description | Schema |
| ------------ | ----------- | ------ |
| FirstName    |             | string |
| LastName     |             | string |
| Email        |             | string |
| Province     |             | string |
| PhoneNumber  |             | string |
| CustomerCode |             | string |

#### Example Request 
```json=
https://rakmao-api-test.builk.com/api/v1/ExternalInterface/EasyMoney/RequestUserDetail/MGNmNWEzMmItZDYwOC00YmNlLTg2ZmMtOTE5MDE0ZDlkNjVl
```

#### Example Response 
```json
{
    "Status": 200,
    "Message": "success",
    "Data": "QQ7isQTCS35dkoQD6yoBQ1HMJNzdXgjeC7BvVFfjAl5qMNeMFuqp6FgHcXQYlo3Fva7R3uW53Dpj0DdR6EJv87LpX4zLBSMrmWdOuTJOYpKhcQeh8hv85+aXHdTUYRtD2udKWJxjVwDpBq7EN6ppkD4vocYycPNchSffUnZRA6t/3AOqKwMoDw5tKQzX0YdRCyNBoOfPIe1+wPkOZIg28CBcWfld8Ba/7nHeALVvY9LqvstyY/OK8M1WdsmhmM6ytuqrTfnGrv0h8rh+Op+M1ea2U7A45kMCWngErgkk2db1H2eMudKp6iOT1/oH6FTYKRaqo7O3DPO4xKKiqxkdIg=="
}
```

#### Response Model 
```json
{
    "FirstName": "นายมาดี",
    "LastName": "มีขันติ",
    "Email": "madee_meekhanti@gmail.com",
    "Province" : "กรุงเทพมหานคร"
    "PhoneNumber": "0988899900",
    "CustomerCode": "RM0001"
}
```

### `POST /api/v1/ExternalInterface/EasyMoney/SendSuccessRegister` 

 **Body Request**
| Parameter                 | Description                                       | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| CustomerCode |             | string |
| Timestamp    |             | Date   |


#### Example Request 
```json=
{
    "CustomerCode": "RM0001",
    "Timestamp": "2022-03-31T08:00:00.0000000Z"
}
```

#### Example Response 
```json
{
    "Status": 200,
    "Message": "success",
    "Data": true
}
```


### `POST /api/v1/ExternalInterface/EasyMoney/SendSuccessTransection` 

 **Body Request**
| Parameter                 | Description                                       | Schema |
| ------------------------- | ------------------------------------------------- | ------ |
| CustomerCode      |             | string |
| TransectionAmount |             | number |
| TransectionDate   |             | Date   |


#### Example Request 
```json=
{
    "CustomerCode": "7d9b2a6c-8166-4e18-a66c-c335b1083258",
    "TransectionAmount": "32500",
    "TransectionDate": "2022-03-31T08:00:00.0000000Z"
}
```


#### Example Response 
```json
{
    "Status": 200,
    "Message": "success",
    "Data": true
}
```
