자주 묻는 질문
연동 예제가 있나요?
각 API 페이지에는 코드 예시가 있습니다. 예시가 없다면 문의해 주세요.
API 연동 중 문제가 발생하면 어떻게 하나요?
먼저 연동 문서를 확인하세요. 문제가 해결되지 않으면 고객 지원으로 문의해 주세요.
주문 후 에너지 위임 여부를 확인하는 방법
에너지가 충분하면 주문 후 약 1~3초 안에 수신 주소로 위임됩니다. status가 4이면 주문 성공, 6이면 에너지 위임 완료, 14이면 에너지 부족으로 환불되었음을 뜻합니다. 다른 상태는 주문 상세 조회 API를 주기적으로 호출해 확인하세요. Go 처리 예시를 제공해 주신 @miya0v0 님께 감사드립니다.
Golang
go
// 결과를 받을 버퍼 채널을 생성
resultCh := make(chan *utils.OrderQueryResponse, 1)
var wg sync.WaitGroup
wg.Add(1)
// 컨텍스트와 취소 함수를 생성
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
// 고루틴을 시작
go func() {
defer wg.Done() // 대기 중인 고루틴 수를 줄임
for {
select {
case <-ctx.Done():
// 시간이 초과되면 반복을 종료
log.Println("Timeout, stopping to fetch order details.")
return
default:
result, err := utils.GetOrderDetail(sendRentEnergy.OrderNo)
if err != nil {
log.Println("Error getting order detail:", err)
return
}
// result.FrozenTxID가 비어 있지 않으면 결과를 채널에 보내고 반복을 종료
if result.Status == 6 && result.FrozenTxID != "" {
resultCh <- result
return
} else {
log.Println(result.Status, result.FrozenTxID)
}
time.Sleep(1 * time.Second)
}
}
}()
// 모든 고루틴이 끝날 때까지 대기
wg.Wait()
// 고루틴의 결과를 수신
select {
case result := <-resultCh:
cancel() // 메인 고루틴의 시간 초과를 취소
case <-ctx.Done():
log.Println("Timeout: Failed to receive result from the goroutine.")
// 필요하면 시간 초과를 처리
}