본 포스팅에서는 ASP.NET Core 개발환경에서 고객사들이 팝빌 전자세금계산서 API SDK를 쉽고 빠르게 이용할 수 있도록, 예시를 통하여 연동 설정 방법을 안내드리겠습니다. 신규프로젝트 생성과 SDK 추가 후, "즉시발행(RegistIssue) API"를 구현하는 순서로 진행하겠습니다.
링크허브 SDK는 .NET Core 2.0 이상 모든 개발환경을 지원하며, 통신을 위한 별도 프로그램 설치가 필요하지 않습니다.
"팝빌은 링크허브에서 자체 개발하고 직접 운영하는 전자세금계산서 서비스 Brand Name 입니다."
아래 설명하는 개발환경은 [ .NET Core 2.0 | MS Visual Studio 2017 ] 기준으로 작성되어 있어, 이용 중인 개발환경과 차이가 있을 수 있는 점 감안해 주시기 바랍니다.
1. 프로젝트 생성
비주얼 스튜디오에서 [파일 > 새로 만들기 > 프로젝트] 메뉴를 선택하여 전자세금계산서 SDK 추가를 위한 새 프로젝트를 생성합니다.
- 템플릿 : ASP.NET Core 웹 응용 프로그램 (모델-뷰-컨트롤러)
- (프로젝트) 이름 : Tutorial_Example
- 위치 : C:\
- 솔루션 이름 : Tutorial
2. 전자세금계산서 SDK 추가
① [프로젝트 > NuGet 패키지 관리 ] 메뉴를 선택 후 최신 버전의 Popbill 패키지를 설치합니다.
② Startup.cs 파일에 팝빌API 인증정보인 링크아이디와 비밀키를 할당 후 세금계산서 서비스 객체를 초기화 하는 TaxinvoiceInstance Class를 작성합니다.
using Popbill.Taxinvoice;
public class TaxinvoiceInstance
{
//파트너 신청 후 메일로 발급받은 링크아이디(LinkID)와 비밀키(SecretKey)값 으로 변경하시기 바랍니다.
private string linkID = "OOOOOOO";
private string secretKey = "BwzxvU+0TEjBXy/9xVjIEEnI0V3UMMSQtAJf3Ed8q2I=";
public TaxinvoiceService taxinvoiceService;
public TaxinvoiceInstance()
{
//세금계산서 서비스 객체 초기화
taxinvoiceService = new TaxinvoiceService(linkID, secretKey);
//연동환경 설정값, 개발용(true), 상업용(false)
taxinvoiceService.IsTest = true;
}
}
▶ 파트너 신청 후 메일로 발급받은 링크아이디(LinkID)와 비밀키(SecretKey)값 으로 변경하시기 바랍니다.
③ ②에서 작성한 TaxinvoiceInstance Class를 Controller에서 사용 할 수 있도록 Startup.cs 파일의 ConfigureServices메서드에 의존성 주입을 시켜줍니다.
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//세금계산서 서비스 객체 의존성 주입
services.AddSingleton<TaxinvoiceInstance>();
}
API 호출 시점에 인증서버로부터 발급받은 토큰을 이용해 사용자를 인증하며, 발급된 토큰은 30분의 유효시간 내에서 재사용이 가능 합니다. 만약 세금계산서 서비스 객체를 Singleton 의존성 주입을 하지않으면 API 호출시 마다 토큰을 재발급 받는 과정을 거쳐야 하기 때문에 성능 저하 및 리소스 낭비의 요인이 됩니다.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Popbill.Taxinvoice;
public class TaxinvoiceInstance
{
//파트너 신청 후 메일로 발급받은 링크아이디(LinkID)와 비밀키(SecretKey)값 으로 변경하시기 바랍니다.
private string linkID = "TESTER";
private string secretKey = "SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=";
public TaxinvoiceService taxinvoiceService;
public TaxinvoiceInstance()
{
//세금계산서 서비스 객체 초기화
taxinvoiceService = new TaxinvoiceService(linkID, secretKey);
//연동환경 설정값, 개발용(true), 상업용(false)
taxinvoiceService.IsTest = true;
}
}
namespace Tutorial_Example
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime.
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//세금계산서 서비스 객체 의존성 주입
services.AddSingleton<TaxinvoiceInstance>();
}
// This method gets called by the runtime.
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
④ RegistIssue API를 구현하기 위해 ./Controllers/TaxinvoiceController.cs를 생성 합니다.
⑤ TaxinvoiceController.cs 파일의 TaxinvoiceController 생성자에서 세금계산서 서비스 객체를 할당합니다.
using Popbill;
using Popbill.Taxinvoice;
namespace Tutorial_Example.Controllers
{
public class TaxinvoiceController : Controller
{
private readonly TaxinvoiceService _taxinvoiceService;
public TaxinvoiceController(TaxinvoiceInstance TIinstance)
{
//세금계산서 서비스 객체 할당
_taxinvoiceService = TIinstance.taxinvoiceService;
}
}
}
3. API 구현
① 세금계산서를 발행하기 위해 ./Controllers/TaxinvoiceController.cs 파일에 RegistIssue API를 작성합니다.