ตรวจสอบความคืบหน้าการสร้างแบบกลุ่ม
ดึงข้อมูลสถานะปัจจุบันของงานสร้างกำหนดการเรียกเก็บเงินแบบกลุ่ม ใช้ endpoint นี้เพื่อติดตามความคืบหน้า ตรวจสอบสถานะความสำเร็จ และกำหนดว่ารายงานสถานะพร้อมสำหรับดาวน์โหลดเมื่อใด
ข้อมูลยืนยันตัวตน API
พารามิเตอร์คำขอ
จำเป็น - 1 ฟิลด์พารามิเตอร์พาธ
`recurring_id`STRING(required)
Recurring export ID ที่ได้รับจาก endpoint การสร้างแบบกลุ่ม IDs เริ่มต้นด้วย recr_
การตอบกลับ
200
ดึงสถานะงานสำเร็จส่งคืนสถานะปัจจุบันของงานสร้างแบบกลุ่มพร้อมรายละเอียดความคืบหน้า
การตอบกลับประกอบด้วย:
object- เป็น "recurring_export" เสมอid- Recurring export ID (recr_*)livemode- ว่าเป็นการดำเนินการในโหมด live หรือไม่location- พาธ API ไปยังทรัพยากรนี้state- สถานะงานปัจจุบัน (pending, processing, completed, failed)total_rows- จำนวนแถวทั้งหม ดใน CSVprocessed_rows- จำนวนแถวที่ประมวลผลแล้วsuccessful_rows- จำนวนกำหนดการที่สร้างสำเร็จfailed_rows- จำนวนแถวที่สร้างล้มเหลวprogress_percentage- เปอร์เซ็นต์ความสำเร็จ (0-100)download_uri- URI สำหรับดาวน์โหลดรายงานสถานะ (มีเมื่อเสร็จสมบูรณ์)created_at- เวลาที่สร้างงานcompleted_at- เวลาที่งานเสร็จสมบูรณ์ (null หากยังไม่เสร็จ)
400
คำขอไม่ถูกต้องการตรวจสอบคำขอล้มเหลว ตรวจสอบข้อความข้อผิดพลาดสำหรับรายละเอียด
สาเหตุทั่วไป:
- รูปแบบ recurring_id ไม่ถูกต้อง
- พารามิเตอร์ recurring_id หายไป
401
ไม่ได้รับอนุญาตการยืนยันตัวตนล้มเหลว API key ไม่ถูกต้องหรือหายไป
สาเหตุทั่วไป:
- ไม่มี Authorization header
- Secret key ไม่ถูกต้อ ง
- ใช้ public key แทน secret key
- รูปแบบ HTTP Basic Auth ไม่ถูกต้อง
404
ไม่พบไม่พบงานสร้างแบบกลุ่ม
สาเหตุทั่วไป:
- recurring_id ไม่ถูกต้อง
- งานเป็นของบัญชีอื่น
- ใช้คีย์โหมด test และ live ปนกัน
- งานหมดอายุแล้ว (เก่ากว่า 30 วัน)
5xx
ข้อผิดพลาดเซิร์ฟเวอร์เกิดข้อผิดพลาดฝั่งเซิร์ฟเวอร์ เหตุการณ์เหล่านี้หายากแต่ควรจัดการอย่างเหมาะสม
วิธีจัดการ:
- ลองคำขอใหม่ด้วย exponential backoff
- ตรวจสอบ status.omise.co สำหรับเหตุการณ์บริการ
- ดู การจัดการข้อผิดพลาด สำหรับคำแนะนำโดยละเอียด
ตัวอย่างโค้ด
- cURL
- Ruby
- Python
- Node.js
- PHP
- Java
- C#
- Go
# ตรวจสอบสถานะงานสร้างแบบกลุ่ม
curl https://api.omise.co/recurring_exports/recr_test_5xuy4w91xqz7d1w9u0t \
-u skey_test_5xuy4w91xqz7d1w9u0t:
require 'omise'
require 'net/http'
require 'uri'
require 'json'
Omise.api_key = 'skey_test_5xuy4w91xqz7d1w9u0t'
recurring_id = 'recr_test_5xuy4w91xqz7d1w9u0t'
uri = URI("https://api.omise.co/recurring_exports/#{recurring_id}")
request = Net::HTTP::Get.new(uri)
request.basic_auth(Omise.api_key, '')
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
result = JSON.parse(response.body)
puts "State: #{result['state']}"
puts "Progress: #{result['progress_percentage']}%"
puts "Successful: #{result['successful_rows']} / #{result['total_rows']}"
import omise
import requests
omise.api_secret = 'skey_test_5xuy4w91xqz7d1w9u0t'
recurring_id = 'recr_test_5xuy4w91xqz7d1w9u0t'
response = requests.get(
f'https://api.omise.co/recurring_exports/{recurring_id}',
auth=(omise.api_secret, '')
)
result = response.json()
print(f"State: {result['state']}")
print(f"Progress: {result['progress_percentage']}%")
print(f"Successful: {result['successful_rows']} / {result['total_rows']}")
const omise = require('omise')({
secretKey: 'skey_test_5xuy4w91xqz7d1w9u0t'
});
const axios = require('axios');
const recurringId = 'recr_test_5xuy4w91xqz7d1w9u0t';
const response = await axios.get(
`https://api.omise.co/recurring_exports/${recurringId}`,
{
auth: {
username: 'skey_test_5xuy4w91xqz7d1w9u0t',
password: ''
}
}
);
console.log('State:', response.data.state);
console.log('Progress:', response.data.progress_percentage + '%');
console.log('Successful:', response.data.successful_rows, '/', response.data.total_rows);
<?php
define('OMISE_SECRET_KEY', 'skey_test_5xuy4w91xqz7d1w9u0t');
$recurring_id = 'recr_test_5xuy4w91xqz7d1w9u0t';
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omise.co/recurring_exports/{$recurring_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => OMISE_SECRET_KEY . ':'
]);
$response = curl_exec($curl);
curl_close($curl);
$result = json_decode($response, true);
echo "State: " . $result['state'] . "\n";
echo "Progress: " . $result['progress_percentage'] . "%\n";
echo "Successful: " . $result['successful_rows'] . " / " . $result['total_rows'] . "\n";
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;
HttpClient client = HttpClient.newHttpClient();
String recurringId = "recr_test_5xuy4w91xqz7d1w9u0t";
String auth = Base64.getEncoder().encodeToString("skey_test_5xuy4w91xqz7d1w9u0t:".getBytes());
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.omise.co/recurring_exports/" + recurringId))
.header("Authorization", "Basic " + auth)
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http;
using System.Net.Http.Headers;
var client = new HttpClient();
var credentials = Convert.ToBase64String(
System.Text.Encoding.ASCII.GetBytes("skey_test_5xuy4w91xqz7d1w9u0t:")
);
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", credentials);
var recurringId = "recr_test_5xuy4w91xqz7d1w9u0t";
var response = await client.GetAsync($"https://api.omise.co/recurring_exports/{recurringId}");
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
recurringId := "recr_test_5xuy4w91xqz7d1w9u0t"
req, _ := http.NewRequest("GET",
"https://api.omise.co/recurring_exports/"+recurringId, nil)
req.SetBasicAuth("skey_test_5xuy4w91xqz7d1w9u0t", "")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("State: %s\n", result["state"])
fmt.Printf("Progress: %.0f%%\n", result["progress_percentage"])
}
การ Polling รอความสำเร็จ
นี่คือตัวอย่างการ polling endpoint จนกว่างานจะเสร็จสมบูรณ์:
- Node.js
- Python
const axios = require('axios');
async function waitForCompletion(recurringId, maxAttempts = 60, intervalMs = 5000) {
for (let i = 0; i < maxAttempts; i++) {
const response = await axios.get(
`https://api.omise.co/recurring_exports/${recurringId}`,
{
auth: { username: 'skey_test_5xuy4w91xqz7d1w9u0t', password: '' }
}
);
const { state, progress_percentage, successful_rows, failed_rows, total_rows } = response.data;
console.log(`Progress: ${progress_percentage}% (${successful_rows + failed_rows}/${total_rows})`);
if (state === 'completed') {
console.log(`Completed! Success: ${successful_rows}, Failed: ${failed_rows}`);
return response.data;
}
if (state === 'failed') {
throw new Error('Bulk creation job failed');
}
await new Promise(resolve => setTimeout(resolve, intervalMs));
}
throw new Error('Timeout waiting for job completion');
}
// การใช้งาน
const result = await waitForCompletion('recr_test_5xuy4w91xqz7d1w9u0t');
import time
import requests
def wait_for_completion(recurring_id, max_attempts=60, interval_sec=5):
api_secret = 'skey_test_5xuy4w91xqz7d1w9u0t'
for _ in range(max_attempts):
response = requests.get(
f'https://api.omise.co/recurring_exports/{recurring_id}',
auth=(api_secret, '')
)
result = response.json()
state = result['state']
progress = result['progress_percentage']
successful = result['successful_rows']
failed = result['failed_rows']
total = result['total_rows']
print(f"Progress: {progress}% ({successful + failed}/{total})")
if state == 'completed':
print(f"Completed! Success: {successful}, Failed: {failed}")
return result
if state == 'failed':
raise Exception('Bulk creation job failed')
time.sleep(interval_sec)
raise Exception('Timeout waiting for job completion')
# การใช้งาน
result = wait_for_completion('recr_test_5xuy4w91xqz7d1w9u0t')
รหัสข้อผิดพลาดและผลลัพธ์
สถานะงาน
| สถานะ | คำอธิบาย | ขั้นตอนถัดไป |
|---|---|---|
pending | งานอยู่ในคิว | รอและ poll อีกครั้ง |
processing | งานกำลังทำงานอยู่ | รอและ poll อีกครั้ง |
completed | งานเสร็จสิ้น | ดาวน์โหลดรายงานสถานะ |
failed | งานพบข้อผิดพลาดร้ายแรง | ตรวจสอบข้อความข้อผิดพลาด ลองอัปโหลดใหม่ |
รหัสข้อผิดพลาดทั่วไป
| รหัส | คำอธิบาย | การแก้ไข |
|---|---|---|
authentication_failure | API key ไม่ถูกต้อง | ตรวจสอบว่า secret key ของคุณถูกต้อง |
not_found | ไม่พบงาน | ตรวจสอบว่า recurring_id ถูกต้อง |
job_expired | ข้อมูลงานหมดอายุ | งานถูกเก็บไว้ 30 วัน |
ลองใช้งาน
จำเป็น - 1 ฟิลด์
IP ของคุณ:
...กำลังโหลด...