/// <summary> /// 현재 설정으로 유효한 토큰을 확보합니다. /// </summary> /// <returns>토큰 정보</returns> public async Task <IamportToken> AuthorizeAsync() { ThrowsIfDisposed(); var input = new IamportTokenRequest { ApiKey = options.ApiKey, ApiSecret = options.ApiSecret }; // TODO: 인증 코드는 UsersApi와 중복된 부분임. // 별도로 빼는 방법이 있을지? var url = ApiPathUtility.Build(options.BaseUrl, UsersGetTokenPath); var httpRequest = new HttpRequestMessage(HttpMethod.Post, url); httpRequest.Content = new JsonContent(input); var response = await RequestAsync <IamportToken>(httpRequest); if (response.Code != 0) { throw new IamportResponseException(response.Code, response.Message); } var token = response.Content; lock (tokenLock) { httpClient.DefaultRequestHeaders.Remove(options.AuthorizationHeaderName); httpClient.DefaultRequestHeaders.Add(options.AuthorizationHeaderName, token.AccessToken); CurrentToken = token; } return(token); }
/// <summary> /// 주어진 경로 및 쿼리스트링을 API의 기본 경로에 추가하거나 덮어씁니다. /// </summary> /// <param name="api">API</param> /// <param name="path">추가 경로 및 쿼리스트링</param> /// <returns>완성된 경로 및 쿼리스트링</returns> public static string BuildPath(this IIamportApi api, string path) { if (api == null) { throw new ArgumentNullException(nameof(api)); } return(ApiPathUtility.Build(api.BasePath, path)); }
/// <summary> /// 주어진 아임포트 요청 정보에 해당하는 HttpRequestMessage를 반환합니다. /// </summary> /// <typeparam name="TRequest">요청 정보의 타입</typeparam> /// <param name="request">요청 정보</param> /// <returns>HttpRequestMessage</returns> protected HttpRequestMessage GetHttpRequest <TRequest>(IamportRequest <TRequest> request) { var url = ApiPathUtility.Build(options.BaseUrl, request.ApiPathAndQueryString); var httpRequest = new HttpRequestMessage(request.Method, url); if (request.Method != HttpMethod.Get) { httpRequest.Content = new JsonContent(request.Content); } return(httpRequest); }