### Maldives Islamic Bank Payment Verification API - This api will allow you to match customers payment and your MIB account history, it will match with transaction time, account owner name and amount. - Issue with using account number name is that, MIB to MIB transaction sometimes have MIBs made-up name for the account owner name, This is challenging, so work around that, I added option to send customers account number to fetch the made-up name and match with it. - BML (Farava) transations works perfectly with just the name! - It uses cookie from webssion to fetch everything, it also has a keepalive service so websession does not expire after 5mins. ## How to deploy/get started (with docker/podman) 1. Login to MIB web [https://faisanet.mib.com.mv/](https://faisanet.mib.com.mv/) and get the your profile id and type: ![select_profile.jpg](select_profile.jpg) 2. copy .env.example to .env and fill your MIB Username, Password and TOTP Seed, `PROFILE_ID` and `PROFILE_TYPE` needs to be filled with contents from step 1, Make sure to fill `ACCOUNT_NUMBER` with your account number. 3. Create `compose.yml` with the follwing contents: ```yaml services: keepalive: env_file: .env image: git.shihaam.dev/shihaam/mib-payment-verify/keepalive cookieserver: env_file: .env image: git.shihaam.dev/shihaam/mib-payment-verify/cookieserver api: env_file: .env image: git.shihaam.dev/shihaam/mib-payment-verify/api ports: - 5000:5000 ``` 4. Run `docker compose up -d` and that is all. ## Using the API with curl examples: 1. With both benefName and accountNo: ```bash curl -X POST http://localhost:5000/verify-payment \ -H "Content-Type: application/json" \ -d '{ "benefName": "ABDLA.MAJUDHU AHMED", "accountNo": "90103101178641000", "absAmount": "100", "time": "2024-10-16 16:08" }' ``` In this request, it will first try to verify with benfName, if it fails, then it will try with accountNo. 2. With only benefName: ```bash curl -X POST http://localhost:5000/verify-payment \ -H "Content-Type: application/json" \ -d '{ "benefName": "ABDLA.MAJUDHU AHMED", "absAmount": "100", "time": "2024-10-16 16:08" }' ``` 3. With only accountNo: ```bash curl -X POST http://localhost:5000/verify-payment \ -H "Content-Type: application/json" \ -d '{ "accountNo": "90103101178641000", "absAmount": "100", "time": "2024-10-16 16:08" }' ``` ## Exmaple Succcess responses: 1. Both benefName and accountNo or only benefName provided ```json { "message": "Payment verified using beneficiary name", "success": true, "transaction": { "ref": "MALBIPS20241208190231 HBTLGAKCNUS", "sourceBank": "BML", "trxDate": "2024-12-09 00:02:36" } } ``` 2. Both benefName and accountNo or only accountNo provided, but failed with benefName ```json { "message": "Payment verified using account number", "success": true, "transaction": { "ref": "1-77722758-34140519-1", "sourceBank": "MIB", "trxDate": "2024-12-05 12:57:32" } } ``` ## Example Failed response: 1. If transaction is not found with the provided details. ```json { "message": "Transaction not found, contact support", "success": false } ``` 2. If session times out ```json { "message": "Error from tx.sh: Session Expired", "success": false } ``` 3. If 500 from server ```json { "message": "Internal server error" "success": false, } ```