# SDK

Source: https://checkslip.com/docs/sdk

เรียก Checkslip API จากโค้ดของคุณด้วย SDK ทางการ 4 ภาษา: JavaScript/TypeScript, Go, PHP และ Rust ติดตั้งจาก registry ของแต่ละภาษา แล้วเรียก API ผ่านเมธอดของ SDK ซึ่งสร้างคำขอ HTTP ให้

ทุกตัวอย่างอ่าน API key จากตัวแปรสภาพแวดล้อม CHECKSLIP_API_KEY ให้เก็บ key ไว้ฝั่งเซิร์ฟเวอร์เท่านั้น อ่านเพิ่มที่ [ยืนยันตัวตนด้วย API key](https://checkslip.com/docs/authentication)

คำสั่งติดตั้งไม่ระบุเวอร์ชัน จึงได้เวอร์ชันล่าสุดตอนติดตั้ง ดูเวอร์ชันและสิ่งที่เปลี่ยนในแต่ละรุ่นได้ที่หน้าของ SDK บน registry

หักเครดิตเฉพาะเมื่อผลเป็น FOUND ใช้กับ SDK ทุกภาษา ดูความหมายของผลทุกแบบที่ [ผลตรวจรายการโอน](https://checkslip.com/docs/outcomes)

## JavaScript / TypeScript

SDK บน [npm](https://www.npmjs.com/package/@checkslip/sdk) · [ซอร์สโค้ดบน GitHub](https://github.com/Checkslip/sdk-js)

### ติดตั้ง

```bash
npm install @checkslip/sdk
```

### เริ่มใช้งาน

```typescript
import { Checkslip } from "@checkslip/sdk";

const checkslip = new Checkslip({ apiKey: process.env.CHECKSLIP_API_KEY });

const check = await checkslip.slips.lookup({
  qr: "00330006000001010306902126302105340875102TH9104F86F",
});

if (check.outcome === "FOUND" && "sender" in check.slip) {
  console.log(check.slip.amount.satang / 100, "THB");
}
```

## Go

SDK บน [pkg.go.dev](https://pkg.go.dev/github.com/Checkslip/sdk-go) · [ซอร์สโค้ดบน GitHub](https://github.com/Checkslip/sdk-go)

### ติดตั้ง

```bash
go get github.com/Checkslip/sdk-go
```

### เริ่มใช้งาน

```go
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/Checkslip/sdk-go"
)

func main() {
	client := checkslip.NewClient(os.Getenv("CHECKSLIP_API_KEY"))

	res, err := client.Slips.Lookup(context.Background(), &checkslip.LookupParams{
		QR: "00330006000001010306902126302105340875102TH9104F86F",
	})
	if err != nil {
		log.Fatal(err)
	}

	switch res.Outcome {
	case checkslip.OutcomeFound:
		fmt.Println("amount:", res.Slip.Amount)
	case checkslip.OutcomeNotFound:
		fmt.Println("the bank has no transfer for this reference")
	default:
		fmt.Println("outcome:", res.Outcome)
	}
}
```

## PHP

SDK บน [Packagist](https://packagist.org/packages/checkslip/sdk) · [ซอร์สโค้ดบน GitHub](https://github.com/Checkslip/sdk-php)

### ติดตั้ง

```bash
composer require checkslip/sdk
```

ถ้าโปรเจกต์ยังไม่มีไคลเอนต์ PSR-18 ให้ติดตั้งเพิ่ม ที่นิยมคือ Guzzle ไคลเอนต์จะหาตัวที่ติดตั้งไว้เอง จึงไม่ต้องตั้งค่าอะไรเพิ่ม

```bash
composer require checkslip/sdk guzzlehttp/guzzle
```

### เริ่มใช้งาน

```php
<?php

use Checkslip\Client;
use Checkslip\Model\Slip;

$checkslip = new Client(apiKey: getenv('CHECKSLIP_API_KEY'));

$check = $checkslip->slips->lookup(
    slip: '00330006000001010306902126302105340875102TH9104F86F',
);

if ($check->isFound() && $check->slip instanceof Slip) {
    echo $check->slip->amount->toBaht(), " THB\n";
}
```

## Rust

SDK บน [crates.io](https://crates.io/crates/checkslip) · [ซอร์สโค้ดบน GitHub](https://github.com/Checkslip/sdk-rust)

### ติดตั้ง

```bash
cargo add checkslip
```

ตัวอย่างใช้ tokio เป็น async runtime

```bash
cargo add tokio --features "macros rt-multi-thread"
```

### เริ่มใช้งาน

```rust
use checkslip::{Client, LookupRequest, Outcome};

#[tokio::main]
async fn main() -> checkslip::Result<()> {
    let client = Client::from_env()?; // reads CHECKSLIP_API_KEY

    let check = client
        .slips()
        .lookup(LookupRequest::qr("00330006000001010306902126302105340875102TH9104F86F"))
        .await?;

    match check.outcome {
        Outcome::Found => {
            let slip = check.slip.as_full().expect("FOUND carries the full record");
            println!("{} satang from {}", slip.amount.satang, slip.sender.bank.code);
        }
        other => println!("outcome {other}"),
    }
    Ok(())
}
```

ส่งรูปสลิปแทนข้อความ QR ก็ได้ วิธีเขียนอยู่ใน README ของแต่ละภาษา

ฟิลด์ทั้งหมดของคำขอและคำตอบอยู่ที่ [ตรวจสอบรายการโอนกับธนาคาร](https://checkslip.com/docs/lookup-slip)
