gongdo / iamport-rest-client-net Goto Github PK
View Code? Open in Web Editor NEW아임포트 REST API 클라이언트의 닷넷 구현입니다.
License: Apache License 2.0
아임포트 REST API 클라이언트의 닷넷 구현입니다.
License: Apache License 2.0
비인증 신용카드 직접 결제시 AMEX와 같이 15자리 신용카드 번호를 지원해야 합니다.
I'mport REST API 에서 제공하는 은행코드표는 표준 코드를 사용하는 것이 아니라 PG사 별로 최소 2자리~최대 4자리의 코드를 사용하는데요, 현재 PaymentCancellation
의 RefundAccountBank
속성의 경우 MaxLength
특성을 받아 최대 길이가 2자로 제한 됩니다. (소스)
따라서 2자리 은행코드를 쓰는 KG이니시스 이외에는 결제 취소 처리 시 은행 코드가 맞지 않아 오류가 발생합니다
해당 부분을 StringLength(4, MinimumLength = 2)
정로도 수정하거나 MaxLegnth(4)
가 되어야 하는 게 맞지 않을까 싶습니다
Adieu, Bapul T_T
USD를 지원하면서 통화 형식(number)를 지원해야 함.
현재 제공중인 3 종류의 end-point에 대응하고 이후로도 API가 확장되는 것에 대응할 수 있도록 클라이언트의 구조를 설계하고 구성.
See PR #51 further information
customer_uid
에 /
, #
, ?
등 URL path 문자열이 있을 가능성이 있으므로 URL Encode해야 합니다.
ASP.NET과 IIS에 의존하지 않는 dnx 샘플.
kestrel과 OWIN만으로 구현하여 Linux와 MAC OSX에서도 동작하도록 할 것.
Microsoft.AspNetCore.All
should be 2.0.9 or later.
see https://github.com/OpenBapul/iamport-rest-client-net/network/alerts
이 프로젝트는 제가 근무하던 회사에서 아임포트를 도입하면서 닷넷 애플리케이션에 적용하려고 만들었습니다. 이 과정에서 회사의 네이밍 정책과 닷넷의 일반적인 네이밍을 따르려고 원래 API를 그대로 쓰지 않고 많은 부분을 고쳤습니다.
하지만 상당히 자주, 새로운 API가 추가되는 아임포트를 매번 네이밍을 새로 정하는건 어렵기도 하고 여러 언어를 사용할 경우 일관성이 없다는 단점이 있습니다.
게다가 아임포트 API는 swagger 문서를 제공하므로 코드 제네레이팅을 활용할 수도 있습니다.
차기 아임포트 API의 닷넷 클라이언트(아마도 3.0)는 기존 네이밍 정책을 버리고 최대한 원래 아임포트 API의 네이밍을 적용하는게 어떨지 생각중입니다.
혹시 여기에 대해 아이디어나 의견이 있으신 분은 댓글을 남겨주세요.
혹시 사용하는 분이 있다면요;;;
늦었지만 ASP.NET Core 1.0으로 프로젝트 마이그레이션 및 활동 재개.
개별 API별로 생성/주입하여 사용하는 것이 더 편리합니다.
아임포트처럼 단순한 API에 API를 중앙관리하는 Factory를 만들 필요가 없습니다.
종속성 'Newtonsoft.Json (≥ 10.0.2)'을(를) 확인 중입니다.
Install-Package : 'Newtonsoft.Json'에 이미 'Microsoft.CSharp'에 대한 종속성이 정의되어 있습니다.
위치 줄:1 문자:1
+ 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.cs 가 Notification
으로 받는 모델과 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로 조회한 후 그 값을 쓰는게 안전하게 처리할 수 있겠음.
이 두 enum은 추후 확장의 가능성이 크므로 enum이 아닌 string으로 다룰 필요가 있습니다.
@section scripts
가 중복으로 정의되었습니다.
현재 클라이언트가 인증된 token을 확보하고 있는지 여부를 반환하는 속성.
#13 참고.
IamportHttpClient
가 내부적으로 사용하는 HttpClient
가 Authorize
호출 후 DefaultHeaders
에 토큰 헤더를 갖는지 여부를 유닛 테스트할 수 없습니다.
Dummy-server 또는 E2E로 테스트할 수 있지만 구조를 적절히 변경하여 E2E 없이 테스트할 수 있도록 하는게 적당하지 않을지 검토가 필요합니다.
API 문서와 달리 again
API는 customer_uid
만 포함해야 하는 것 같습니다.
다른 사용자 옵셔널 필드가 들어가 있으면 오류가 발생합니다.
초기 개발시 ASP.NET Core를 과도하게 의식하여 불필요한 의존성이 있습니다.
ASP.NET Core를 위한 헬퍼는 별도의 프로젝트로 작성합니다.
UsersApi는 IamportHttpClient의 구현이 아닌 인터페이스에 의존합니다.
따라서 테스트 코드에서도 불필요한 의존성을 추가하지 않습니다.
UnixDateTimeJsonConverter
사용시 null token을 파싱하지 못하는 문제 수정.
DateTime
일 경우 UNIX epoch(1970-01-01 00:00:00)을 반환.DateTime?
일 경우 null을 반환.A hard-coded versioning and multiple branch management is so painful and inefficient.
The CI process should be refined as bellow.
^v\d+\.\d+\.\d+(-[a-zA-Z0-9]+)*$
0.0.0-pr{pr-number}-{build-number}
마이그레이션이 필요합니다.
눈치봐서 .NET Core는 2.0으로 건너뛸 수도 있습니다.
.NET Standard 2.0에 대응하여 프로젝트를 마이그레이션 합니다.
솔루션을 만들고 프로젝트의 뼈대를 구성합니다.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.