Skip to content

ตัวอย่าง Python

ตัวอย่างโค้ด Python สำหรับใช้งาน EasySlip API

การติดตั้ง

bash
pip install requests

ตัวอย่างพื้นฐาน

ตรวจสอบด้วย Payload

python
import os
import requests

def verify_slip(payload: str, check_duplicate: bool = False) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    response = requests.post(
        'https://developer.easyslip.com/api/v1/verify',
        headers={
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        },
        json={
            'payload': payload,
            'checkDuplicate': check_duplicate
        }
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# การใช้งาน
slip = verify_slip('00020101021230...')
print(f"จำนวนเงิน: {slip['amount']['amount']}")
print(f"ผู้โอน: {slip['sender']['displayName']}")
print(f"ผู้รับ: {slip['receiver']['displayName']}")

ตรวจสอบด้วยรูปภาพ

python
import os
import requests

def verify_slip_image(file_path: str, check_duplicate: bool = False) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    with open(file_path, 'rb') as f:
        response = requests.post(
            'https://developer.easyslip.com/api/v1/verify',
            headers={
                'Authorization': f'Bearer {api_key}'
            },
            files={
                'file': f
            },
            data={
                'checkDuplicate': 'true' if check_duplicate else 'false'
            }
        )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# การใช้งาน
slip = verify_slip_image('/path/to/slip.jpg', check_duplicate=True)
print(f"จำนวนเงิน: {slip['amount']['amount']}")

ตรวจสอบด้วย Base64

python
import os
import base64
import requests

def verify_slip_base64(base64_image: str, check_duplicate: bool = False) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    response = requests.post(
        'https://developer.easyslip.com/api/v1/verify',
        headers={
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        },
        json={
            'image': base64_image,
            'checkDuplicate': check_duplicate
        }
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# การใช้งาน - แปลงไฟล์เป็น Base64
with open('/path/to/slip.jpg', 'rb') as f:
    image_data = base64.b64encode(f.read()).decode('utf-8')
    base64_image = f'data:image/jpeg;base64,{image_data}'

slip = verify_slip_base64(base64_image, check_duplicate=True)

ตรวจสอบด้วย URL

python
import os
import requests

def verify_slip_url(url: str, check_duplicate: bool = False) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    response = requests.post(
        'https://developer.easyslip.com/api/v1/verify',
        headers={
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        },
        json={
            'url': url,
            'checkDuplicate': check_duplicate
        }
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# การใช้งาน
slip = verify_slip_url('https://example.com/slips/slip.jpg', check_duplicate=True)

API v2

ตรวจสอบสลิปธนาคาร (v2)

python
import os
import requests

def verify_slip_v2(payload: str, **options) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    body = {'payload': payload, **options}

    response = requests.post(
        'https://api.easyslip.com/v2/verify/bank',
        headers={
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        },
        json=body
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# การใช้งานกับ account matching
slip = verify_slip_v2(
    '00020101021230...',
    receiverAccount='1234567890',
    amount=1000.00
)

if slip['receiver']['account']['match']:
    print('บัญชีผู้รับตรงกัน!')

if slip['amount']['match']:
    print('จำนวนเงินตรงกัน!')

ข้อมูลบัญชี (v2)

python
import os
import requests

def get_account_info_v2() -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    response = requests.get(
        'https://api.easyslip.com/v2/info',
        headers={
            'Authorization': f'Bearer {api_key}'
        }
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

info = get_account_info_v2()
print(f"โควต้าคงเหลือ: {info['quota']['remaining']}")

สร้าง QR Code (v1)

python
import os
import base64
import requests

def generate_qr(config: dict) -> dict:
    api_key = os.environ.get('EASYSLIP_API_KEY')

    response = requests.post(
        'https://developer.easyslip.com/api/v1/qr/generate',
        headers={
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        },
        json=config
    )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# สร้าง PromptPay QR
qr = generate_qr({
    'type': 'PROMPTPAY',
    'msisdn': '0812345678',
    'amount': 100.00
})

# บันทึกเป็นไฟล์
image_data = base64.b64decode(qr['image'])
with open('qr-code.png', 'wb') as f:
    f.write(image_data)

print('บันทึก QR Code สำเร็จ')

EasySlip Client Class

python
import os
import requests
from typing import Optional, Dict, Any
from dataclasses import dataclass


@dataclass
class EasySlipException(Exception):
    message: str
    status: int
    data: Optional[Dict[str, Any]] = None


class EasySlipClient:
    def __init__(self, api_key: str, version: str = 'v1'):
        self.api_key = api_key
        self.base_url = f'https://developer.easyslip.com/api/{version}'

    def _request(self, endpoint: str, method: str = 'GET', **kwargs) -> dict:
        headers = {
            'Authorization': f'Bearer {self.api_key}'
        }

        if 'json' in kwargs:
            headers['Content-Type'] = 'application/json'

        response = requests.request(
            method,
            f'{self.base_url}{endpoint}',
            headers=headers,
            **kwargs
        )

        result = response.json()

        if result['status'] != 200:
            raise EasySlipException(
                message=result['message'],
                status=result['status'],
                data=result.get('data')
            )

        return result['data']

    def verify_by_payload(self, payload: str, check_duplicate: bool = False) -> dict:
        return self._request('/verify', 'POST', json={
            'payload': payload,
            'checkDuplicate': check_duplicate
        })

    def verify_by_image(self, file_path: str, check_duplicate: bool = False) -> dict:
        with open(file_path, 'rb') as f:
            return self._request('/verify', 'POST',
                files={'file': f},
                data={'checkDuplicate': 'true' if check_duplicate else 'false'}
            )

    def verify_by_url(self, url: str, check_duplicate: bool = False) -> dict:
        return self._request('/verify', 'POST', json={
            'url': url,
            'checkDuplicate': check_duplicate
        })

    def verify_by_base64(self, image: str, check_duplicate: bool = False) -> dict:
        return self._request('/verify', 'POST', json={
            'image': image,
            'checkDuplicate': check_duplicate
        })

    def generate_qr(self, config: dict) -> dict:
        return self._request('/qr/generate', 'POST', json=config)

    def get_account_info(self) -> dict:
        return self._request('/me')


# การใช้งาน
client = EasySlipClient(os.environ.get('EASYSLIP_API_KEY'))

try:
    slip = client.verify_by_payload('00020101021230...')
    print(f"จำนวนเงิน: {slip['amount']['amount']}")
except EasySlipException as e:
    print(f"Error: {e.message}")
    if e.data:
        print(f"Data: {e.data}")

Async Client (aiohttp)

python
import os
import aiohttp
import asyncio
from typing import Optional, Dict, Any


class AsyncEasySlipClient:
    def __init__(self, api_key: str, version: str = 'v1'):
        self.api_key = api_key
        self.base_url = f'https://developer.easyslip.com/api/{version}'

    async def _request(self, endpoint: str, method: str = 'GET', **kwargs) -> dict:
        headers = {
            'Authorization': f'Bearer {self.api_key}'
        }

        if 'json' in kwargs:
            headers['Content-Type'] = 'application/json'

        async with aiohttp.ClientSession() as session:
            async with session.request(
                method,
                f'{self.base_url}{endpoint}',
                headers=headers,
                **kwargs
            ) as response:
                result = await response.json()

        if result['status'] != 200:
            raise Exception(result['message'])

        return result['data']

    async def verify_by_payload(self, payload: str, check_duplicate: bool = False) -> dict:
        return await self._request('/verify', 'POST', json={
            'payload': payload,
            'checkDuplicate': check_duplicate
        })

    async def verify_by_image(self, file_path: str, check_duplicate: bool = False) -> dict:
        with open(file_path, 'rb') as f:
            data = aiohttp.FormData()
            data.add_field('file', f, filename='slip.jpg')
            data.add_field('checkDuplicate', 'true' if check_duplicate else 'false')
            return await self._request('/verify', 'POST', data=data)

    async def generate_qr(self, config: dict) -> dict:
        return await self._request('/qr/generate', 'POST', json=config)

    async def get_account_info(self) -> dict:
        return await self._request('/me')


# การใช้งาน
async def main():
    client = AsyncEasySlipClient(os.environ.get('EASYSLIP_API_KEY'))

    slip = await client.verify_by_payload('00020101021230...')
    print(f"จำนวนเงิน: {slip['amount']['amount']}")

asyncio.run(main())

Flask Integration

python
import os
from flask import Flask, request, jsonify
from werkzeug.utils import secure_filename

app = Flask(__name__)
client = EasySlipClient(os.environ.get('EASYSLIP_API_KEY'))

ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/verify', methods=['POST'])
def verify_slip():
    if 'file' not in request.files:
        return jsonify({'error': 'ไม่พบไฟล์'}), 400

    file = request.files['file']

    if file.filename == '':
        return jsonify({'error': 'ไม่ได้เลือกไฟล์'}), 400

    if not allowed_file(file.filename):
        return jsonify({'error': 'ประเภทไฟล์ไม่รองรับ'}), 400

    try:
        # บันทึกไฟล์ชั่วคราว
        filename = secure_filename(file.filename)
        file_path = f'/tmp/{filename}'
        file.save(file_path)

        # ตรวจสอบสลิป
        slip = client.verify_by_image(file_path, check_duplicate=True)

        # ลบไฟล์ชั่วคราว
        os.remove(file_path)

        return jsonify({
            'success': True,
            'data': slip
        })
    except EasySlipException as e:
        return jsonify({
            'success': False,
            'error': e.message
        }), 400
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500

if __name__ == '__main__':
    app.run(debug=True)

จัดการ Error

python
def verify_with_error_handling(payload: str) -> dict:
    try:
        slip = verify_slip(payload)
        return {'success': True, 'data': slip}
    except Exception as e:
        error_messages = {
            'invalid_payload': 'Payload ไม่ถูกต้อง',
            'slip_not_found': 'ไม่พบสลิป',
            'quota_exceeded': 'โควต้าหมด',
            'duplicate_slip': 'สลิปซ้ำ',
            'unauthorized': 'API Key ไม่ถูกต้อง'
        }

        message = error_messages.get(str(e), str(e))

        return {'success': False, 'error': message}

ที่เกี่ยวข้อง

Bank Slip Verification API for Thai Banking