Code Monkey home page Code Monkey logo

iamport-rest-client-net's People

Contributors

donghak-shin avatar gongdo avatar jangbora avatar waffle-iron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

iamport-rest-client-net's Issues

은행코드의 길이 제한 문제

I'mport REST API 에서 제공하는 은행코드표는 표준 코드를 사용하는 것이 아니라 PG사 별로 최소 2자리~최대 4자리의 코드를 사용하는데요, 현재 PaymentCancellationRefundAccountBank 속성의 경우 MaxLength 특성을 받아 최대 길이가 2자로 제한 됩니다. (소스)
따라서 2자리 은행코드를 쓰는 KG이니시스 이외에는 결제 취소 처리 시 은행 코드가 맞지 않아 오류가 발생합니다
해당 부분을 StringLength(4, MinimumLength = 2) 정로도 수정하거나 MaxLegnth(4) 가 되어야 하는 게 맞지 않을까 싶습니다

API별 클라이언트 확장 구조 작성

현재 제공중인 3 종류의 end-point에 대응하고 이후로도 API가 확장되는 것에 대응할 수 있도록 클라이언트의 구조를 설계하고 구성.

DLL 참조 에러

안녕하세요.

우선 ASP.net 사용하여 결제 관련 페이지를 개발중에 있습니다.

닷넷은 4.5.1버전 사용중이며 , 패키지는 설치하여 DLL 파일들(Iamport.RestApi.dll, Newtonsoft.Json.dll)이 포함되어있습니다.

컴파일을하면 문제없이 컴파일이 완료됩니다.

하지만 페이지 접속시 dll 참조 에러가 납니다.

default

 도움부탁드립니다.

감사합니다.

일부 네이밍 변경

  • FailReason -> FailedReason
  • CancellationReason -> CancelledReason
  • CancellationAmount -> CancelledAmount

[토론] 개발 방향

이 프로젝트는 제가 근무하던 회사에서 아임포트를 도입하면서 닷넷 애플리케이션에 적용하려고 만들었습니다. 이 과정에서 회사의 네이밍 정책과 닷넷의 일반적인 네이밍을 따르려고 원래 API를 그대로 쓰지 않고 많은 부분을 고쳤습니다.

하지만 상당히 자주, 새로운 API가 추가되는 아임포트를 매번 네이밍을 새로 정하는건 어렵기도 하고 여러 언어를 사용할 경우 일관성이 없다는 단점이 있습니다.

게다가 아임포트 API는 swagger 문서를 제공하므로 코드 제네레이팅을 활용할 수도 있습니다.

차기 아임포트 API의 닷넷 클라이언트(아마도 3.0)는 기존 네이밍 정책을 버리고 최대한 원래 아임포트 API의 네이밍을 적용하는게 어떨지 생각중입니다.

혹시 여기에 대해 아이디어나 의견이 있으신 분은 댓글을 남겨주세요.
혹시 사용하는 분이 있다면요;;;

Install 도 안되고 vs 2015에서 열리지 않습니다.

패키지 에러나는데요?? 어떻게 해야 할지..

종속성 'Newtonsoft.Json (≥ 10.0.2)'을(를) 확인 중입니다.
Install-Package : 'Newtonsoft.Json'에 이미 'Microsoft.CSharp'에 대한 종속성이 정의되어 있습니다.
위치 줄:1 문자:1

  • Install-Package Iamport.RestApi
  •   + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
      + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
    
    
    
솔루션을 직접 열러고 하는데도 에러 납니다.

솔루션의 프로젝트 중 하나 이상이 제대로 로드되지 않습니다.
C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\src\Iamport.RestApi\Iamport.RestApi.csproj : error : 프로젝트의 기본 XML 네임스페이스는 MSBuild XML 네임스페이스여야 합니다. 프로젝트를 MSBuild 2003 형식으로 작성한 경우에는 요소에 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"을(를) 추가하고, 프로젝트를 이전 1.0 또는 1.2 형식으로 작성한 경우에는 MSBuild 2003 형식으로 변환하십시오. C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\src\Iamport.RestApi\Iamport.RestApi.csproj

C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\test\Iamport.RestApi.Tests\Iamport.RestApi.Tests.csproj : error : 프로젝트의 기본 XML 네임스페이스는 MSBuild XML 네임스페이스여야 합니다. 프로젝트를 MSBuild 2003 형식으로 작성한 경우에는 요소에 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"을(를) 추가하고, 프로젝트를 이전 1.0 또는 1.2 형식으로 작성한 경우에는 MSBuild 2003 형식으로 변환하십시오. C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\test\Iamport.RestApi.Tests\Iamport.RestApi.Tests.csproj

C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\Samples\Sample.AspNetCore\Sample.AspNetCore.csproj : error : 프로젝트의 기본 XML 네임스페이스는 MSBuild XML 네임스페이스여야 합니다. 프로젝트를 MSBuild 2003 형식으로 작성한 경우에는 요소에 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"을(를) 추가하고, 프로젝트를 이전 1.0 또는 1.2 형식으로 작성한 경우에는 MSBuild 2003 형식으로 변환하십시오. C:\Users\Administrator\Downloads\임시\iamport-rest-client-net-master\Samples\Sample.AspNetCore\Sample.AspNetCore.csproj

Payment 모델링이 잘못됨

현재 Payment.csNotification으로 받는 모델과 payment-api로 받는 모델이 동일하다고 가정하고 있습니다.
그러나 Notification으로 받는 모델과 payment-api등의 결과로 받는 모델에는 차이가 있으므로 이 둘을 분리해야 합니다.

Notification 모델

{
    "success": false,
    "error_code": null,
    "error_msg": null,
    "imp_uid": "imp_1231424141",
    "merchant_uid": "3432424332234",
    "pay_method": "cultureland",
    "paid_amount": 0.0,
    "status": "paid",
    "name": "1시간 시범수업",
    "pg_provider": "html5_inicis",
    "pg_tid": "INIMX_CULT3423424234",
    "buyer_name": "aaaa ",
    "buyer_email": "bbbbb@ddcc",
    "buyer_tel": "12313123",
    "buyer_addr": null,
    "buyer_postcode": null,
    "custom_data": null,
    "paid_at": 1487228004,
    "receipt_url": "https://iniweb.inicis.com/DefaultWebApp/mall/cr/cm/mCmReceipt_head.jsp?noTid=INIMX_CULT1231123123&noMethod=1",
    "failed_at": null,
    "cancelled_at": null,
    "fail_reason": null,
    "cancel_reason": null,
    "apply_num": "",
    "card_name": null,
    "card_quota": 0,
    "vbank_name": null,
    "vbank_num": null,
    "vbank_holder": null,
    "vbank_date": null,
    "cancel_amount": 0,
    "user_agent": "sorry_not_supported_anymore"
}

payment-api 모델 (결과는 response에 포함됨)

{
    "amount": 1004,
    "apply_num": "30050837",
    "buyer_addr": null,
    "buyer_email": null,
    "buyer_name": null,
    "buyer_postcode": null,
    "buyer_tel": null,
    "cancel_amount": 0,
    "cancel_reason": null,
    "cancel_receipt_urls": [],
    "cancelled_at": 0,
    "card_name": "국민KB카드",
    "card_quota": 0,
    "currency": "KRW",
    "custom_data": null,
    "escrow": false,
    "fail_reason": null,
    "failed_at": 0,
    "imp_uid": "imps_342323424",
    "merchant_uid": "3423424-1",
    "name": null,
    "paid_at": 1487232509,
    "pay_method": "card",
    "pg_provider": "nice",
    "pg_tid": "342342432423",
    "receipt_url": "https://pg.nicepay.co.kr/issue/IssueLoader.jsp?TID=3424234234243&type=0",
    "status": "paid",
    "user_agent": "sorry_not_supported_anymore",
    "vbank_date": 0,
    "vbank_holder": null,
    "vbank_name": null,
    "vbank_num": null
}

차이점 비교

Payment에만 있는 것
- amount
- cancel_receipt_urls
- currency
- escrow

Callback에만 있는 것
- success
- error_code
- error_msg
- user_agent

공통 속성
apply_num,
buyer_addr,
buyer_email,
buyer_name,
buyer_postcode,
buyer_tel,
cancel_amount,
cancel_reason,
cancelled_at,
card_name,
card_quota,
custom_data,
fail_reason,
failed_at,
imp_uid,
merchant_uid,
name,
paid_at,
pay_method,
pg_provider,
pg_tid,
receipt_url,
status,
user_agent,
vbank_date,
vbank_holder,
vbank_name,
vbank_num

결론

notification 을 받으면 그 값을 그대로 쓰지 않고 곧바로 payement-api로 조회한 후 그 값을 쓰는게 안전하게 처리할 수 있겠음.

IamportHttpClient testability 문제

IamportHttpClient가 내부적으로 사용하는 HttpClientAuthorize호출 후 DefaultHeaders에 토큰 헤더를 갖는지 여부를 유닛 테스트할 수 없습니다.

Dummy-server 또는 E2E로 테스트할 수 있지만 구조를 적절히 변경하여 E2E 없이 테스트할 수 있도록 하는게 적당하지 않을지 검토가 필요합니다.

Microsoft.Extensions 의존성 제거

초기 개발시 ASP.NET Core를 과도하게 의식하여 불필요한 의존성이 있습니다.
ASP.NET Core를 위한 헬퍼는 별도의 프로젝트로 작성합니다.

UnixDateTimeJsonConverter null 처리 추가

UnixDateTimeJsonConverter 사용시 null token을 파싱하지 못하는 문제 수정.

  • 대상 타입이 DateTime일 경우 UNIX epoch(1970-01-01 00:00:00)을 반환.
  • 대상 타입이 DateTime?일 경우 null을 반환.
  • EPOCH 0은 실제 값이 아닌 null의 표현이라고 간주함.

Refine CI process

A hard-coded versioning and multiple branch management is so painful and inefficient.
The CI process should be refined as bellow.

  • single master branch strategy
    • everybody just can PR to master branch without versioning concern
    • master should be protected from force push, only be merged from PR
  • commits don't trigger deploy, tags do
    • PR triggers checks(build, test) only
    • version tag triggers actual deployment to NuGet
  • valid version tag regex: ^v\d+\.\d+\.\d+(-[a-zA-Z0-9]+)*$
    • PR assembly will have version 0.0.0-pr{pr-number}-{build-number}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.