>백엔드 개발 >Golang >Golang 앱에 zip.zax 판매세 API 통합

Golang 앱에 zip.zax 판매세 API 통합

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 22:17:41418검색

Integrate the zip.zax Sales Tax API in Your Golang App

정확한 판매세 계산이 필요한 애플리케이션을 구축하는 경우 zip.tax API는 통합할 수 있는 훌륭한 도구입니다. 이 가이드는 Golang 애플리케이션에서 zip.tax API를 설정하고 사용하는 방법을 안내합니다.

전제조건

시작하기 전에 다음 사항을 확인하세요.

  • Golang에 대한 기본지식.
  • Golang 개발 환경 설정
  • zip.tax의 API 키

1단계: 필수 라이브러리 설치

HTTP 요청을 위해 Golang의 표준 net/http 패키지를 사용합니다. 또한 JSON 응답을 구문 분석하기 위해 인코딩/json을 사용합니다.

2단계: Golang 프로젝트 설정

새 프로젝트 디렉토리를 생성하고 새 모듈을 초기화합니다.

mkdir ziptax-golang && cd ziptax-golang
go mod init ziptax-golang

3단계: 코드 작성

다음은 판매세 정보를 위해 zip.tax API를 쿼리하는 간단한 Golang 애플리케이션의 전체 예입니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "net/url"
)

type Response struct {
    Version       string        `json:"version"`
    RCode         int           `json:"rCode"`
    Results       []Result      `json:"results"`
    AddressDetail AddressDetail `json:"addressDetail"`
}

type Result struct {
    GeoPostalCode     string  `json:"geoPostalCode"`
    GeoCity           string  `json:"geoCity"`
    GeoCounty         string  `json:"geoCounty"`
    GeoState          string  `json:"geoState"`
    TaxSales          float64 `json:"taxSales"`
    TaxUse            float64 `json:"taxUse"`
    TxbService        string  `json:"txbService"`
    TxbFreight        string  `json:"txbFreight"`
    StateSalesTax     float64 `json:"stateSalesTax"`
    StateUseTax       float64 `json:"stateUseTax"`
    CitySalesTax      float64 `json:"citySalesTax"`
    CityUseTax        float64 `json:"cityUseTax"`
    CityTaxCode       string  `json:"cityTaxCode"`
    CountySalesTax    float64 `json:"countySalesTax"`
    CountyUseTax      float64 `json:"countyUseTax"`
    CountyTaxCode     string  `json:"countyTaxCode"`
    DistrictSalesTax  float64 `json:"districtSalesTax"`
    DistrictUseTax    float64 `json:"districtUseTax"`
    District1Code     string  `json:"district1Code"`
    District1SalesTax float64 `json:"district1SalesTax"`
    District1UseTax   float64 `json:"district1UseTax"`
    District2Code     string  `json:"district2Code"`
    District2SalesTax float64 `json:"district2SalesTax"`
    District2UseTax   float64 `json:"district2UseTax"`
    District3Code     string  `json:"district3Code"`
    District3SalesTax float64 `json:"district3SalesTax"`
    District3UseTax   float64 `json:"district3UseTax"`
    District4Code     string  `json:"district4Code"`
    District4SalesTax float64 `json:"district4SalesTax"`
    District4UseTax   float64 `json:"district4UseTax"`
    District5Code     string  `json:"district5Code"`
    District5SalesTax float64 `json:"district5SalesTax"`
    District5UseTax   float64 `json:"district5UseTax"`
    OriginDestination string  `json:"originDestination"`
}

type AddressDetail struct {
    NormalizedAddress string  `json:"normalizedAddress"`
    Incorporated      string  `json:"incorporated"`
    GeoLat            float64 `json:"geoLat"`
    GeoLng            float64 `json:"geoLng"`
}

func getSalesTax(address string, apiKey string) (*Response, error) {
    url := fmt.Sprintf("https://api.zip-tax.com/request/v50?key=%s&address=%s", apiKey, url.QueryEscape(address))

    resp, err := http.Get(url)
    if err != nil {
        return nil, fmt.Errorf("failed to make API request: %w", err)
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
    }

    var taxResponse Response
    if err := json.NewDecoder(resp.Body).Decode(&taxResponse); err != nil {
        return nil, fmt.Errorf("failed to parse response: %w", err)
    }

    return &taxResponse, nil
}

func main() {
    apiKey := "your_api_key_here".  // Replace with your key
    address := "200 Spectrum Center Dr, Irvine, CA 92618"                  // Example address

    taxInfo, err := getSalesTax(address, apiKey)
    if err != nil {
        log.Fatalf("Error fetching sales tax: %v", err)
    }

    fmt.Printf("Normalized Address: %s\n", taxInfo.AddressDetail.NormalizedAddress)
    fmt.Printf("Address Lat/Lng: %f, %f\n", taxInfo.AddressDetail.GeoLat, taxInfo.AddressDetail.GeoLng)
    fmt.Printf("Rate: %.2f%%\n", taxInfo.Results[0].TaxSales*100)
}

코드 설명

  1. API 요청: getSalesTax 함수는 API 키와 주소로 URL을 구성하고 GET 요청을 한 후 응답을 구문 분석합니다.
  2. 응답 구문 분석: 판매세 세부정보에 쉽게 액세스할 수 있도록 응답 JSON이 응답 구조체로 마샬링 해제됩니다.
  3. 표시 결과: 기본 기능은 지정된 주소 코드에 대한 정규화된 주소, 위도/경도 및 판매세율을 인쇄합니다. 여기에서 Response 구조체 값 중 하나를 사용하여 필요한 데이터를 출력할 수 있습니다.

4단계: 애플리케이션 실행

코드를 파일(예: main.go)에 저장한 후 프로그램을 실행하세요.

go run main.go

다음과 유사한 출력이 표시됩니다.

Normalized Address: 200 Spectrum Center Dr, Irvine, CA 92618-5003, United States
Address Lat/Lng: 33.652530, -117.747940
Rate: 7.75%

결론

zip.tax API를 Golang 애플리케이션에 통합하는 것은 간단합니다. 이 가이드를 따르면 주소에 따른 정확한 판매세 정보로 신청서를 개선할 수 있습니다. 자세한 내용은 공식문서를 참고하세요.

질문이나 의견이 있으시면 아래에 댓글을 남겨주세요. 즐거운 코딩하세요!

위 내용은 Golang 앱에 zip.zax 판매세 API 통합의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.