iamport / iamport-manual Goto Github PK
View Code? Open in Web Editor NEW아임포트(iamport) 결제연동을 위한 매뉴얼입니다.
아임포트(iamport) 결제연동을 위한 매뉴얼입니다.
@jangbora 님과 메일로 주고 받은 내용이나 진행상황 확인 및 다른 개발자분들과 의견 교류 목적으로 이슈를 발급합니다.
모바일에서 m_redirect_url이 호출되지 않는 경우가 있습니다.
해당 경우는 이미 결제가 된 사항을 다시 요청했을 때 입니다.
이런 경우 m_redirect_url 리다이렉트 되면서 결과가 전달되는 것이 아니라 callback으로만 전달 됩니다.
{"{\"success\":false,\"request_id\":\"req_xxxxxxxx\",\"error_code\":\"F1002\",\"error_msg\":\"이미 결제가 이루어진 거래건입니다.\"}":""}
모바일 결제(PC결제 제외)에서 IMP.request_pay(param, callback) 시 callback이 선언되어있지 않다면 강제로 m_redirect_url로 동일하게 받으실 수 있도록 인터페이스를 변경하면 어떨까요?
이에 동의 합니다.
nhappvardansimclick
농협카드 앱카드의 앱스킴이 위 값이 맞는건가요??
의미상 vard -> card 가 되야 할것 같은데 확인한번 부탁드립니다~
whenever i tried to make payment in sandbox mode, iamport JavaScript sdk opens and ask for select and write detail of cards. Is it necessary to write card(VISA/Master) information for a non-korean person for making any transaction, even in sandbox mode?
현재 합병된 회사들이 많아 업데이트가 필요한듯 싶은데
코드표는 너무 오래되었네요
안녕하세요? 웹뷰로 구현시 순서 질문입니다.
IMP.request_pay({
/**/
m_redirect_url : 'https://www.yourdomain.com/payments/complete',
app_scheme : 'iamportapp'
}, function(rsp) {
/*콜백함수 동작 */
});
request_pay() 실행이후
Android WebView 53버전에서 WebView(Google)버그로 인해 symantec계열의 SSL인증서의 경우 handshake과정에서 오류가 발생하고 있습니다.
아임포트 도메인을 포함하여, 삼성카드, 신한카드 등 에서 symantec계열의 SSL인증서를 사용하고 있어 결제가 이뤄지지 않고 있는 증상이오니, 번거로우시겠지만 WebView 54버전으로 업데이트를 부탁드립니다.
var IMP = window.IMP;
IMP.init('imp number');
호출 후에 발생하는 문제 같은데요.
아래와 같은 로그가 계속 찍힙니다.
kakaopay:36 Uncaught TypeError: Cannot read property 'request_id' of undefined
paypal:36 Uncaught TypeError: Cannot read property 'request_id' of undefined
안녕하세요, 전부터 아임포트 잘 사용하고 있는 개발자입니다.
아래 두 내용과 관련해서 이슈 남깁니다.
iamport-manual/인증결제/javascript-version.md 파일 에서 iamport.payment-x.y.z.js
파일이 제가 확인해봤을 땐 iamport.payment-1.2.0.js
파일까지 cdn에 올라온 걸로 확인되는데 1.1.5 버전 이후로 업데이트가 갱신이 안 돼서, 개인적인 생각으로는 1.1.5 버전 이후 로직 개선과 퍼포먼스 외에 큰 변화가 없는 것인지 궁금합니다.
iamport-manual/SMS본인인증/README.md 파일에도 마찬가지로 내용에 iamport.payment-1.1.4.js
1.1.4 버전에 머물러 있어서, 해당 내용 바로 아래에 iamport-manual/인증결제/README.md 내용을 차용해서
1.2 아임포트 javascript 설치
<script type="text/javascript" src="https://cdn.iamport.kr/js/iamport.payment-x.y.z.js"></script>iamport.payment.js 버전별 차이점
단, SMS 본인인증 기능은 iamport-payment.js 1.1.4 버전부터 SMS본인인증기능이 제공됩니다.
으로 내용을 변경하는 건 어떨까요?
SMS본인인증 README는 내용 동의하시고 바쁘시다면 제가 PR 올려도 괜찮을까요?
감사합니다 :)
메뉴얼에 보면 아래처럼 되어있는데요.
vbank_due | string | 가상계좌 입금기한 | undefined | (선택항목) YYYYMMDDhhmm 형식 | 1.0.0부터 |
---|
현재 통합인증 및 본인인증 서비스를 JavaScript SDK를 활용해 사용 중입니다.
오류 및 여러 변수로 인한 처리를 하고자 합니다. 아임포트 docs에 아래와 같이 기재 돼 있는데, 상세 내용을 알 수 있을까요?
가령, 에러코드의 종류라던지, 인증을 취소하거나 기타 오류등으로 인한 경우, 어떤 내용으로 전달되는지 궁금합니다.
속성* 필수항목 | 타입 | 설명 |
---|---|---|
success* | boolean | 본인인증의 성공여부true/false |
error_code* | string | 본인인증이 실패한 경우 단축 메세지(현재 코드체계는 없음) |
error_msg* | string | 본인인증이 실패한 경우 상세 메세지 |
imp_uid* | string | 아임포트 고유 본인인증 번호 |
merchant_uid* | string | 가맹점에서 생성/관리하는 고유 주문번호 |
Environment
https://cdn.iamport.kr/js/iamport.payment-1.1.8.js
)Description
When trying to make payments in test mode our code calls iamport method (IMP.request_pay()
) but if we cancel the payment window (or close it), the iamport iframe
does not disappear and the callback is not called.
Here is how we call it:
const params = {
pg: 'uplus.testmuid',
pay_method: 'card',
merchant_uid: "order001",
name: `test product`,
amount: 10000,
currency: 'krw',
buyer_email: "[email protected]",
buyer_name: "John Doe",
language: 'ko',
company: "Super store"
};
IMP.request_pay(params, (rsp) => {
console.log("callback is called!");
});
When we use nicepay
PG in the test mode, we don't have this issue. The iframe
is removed and the callback is properly called.
Actual behaviour
The payment window iframe does not disappear when the payment window is closed/cancelled. It leaves semi-transparent overlay over the entire browser viewport.
The callback is not called to notify our app that the payment was cancelled.
** Expected behaviour**
Closing payment window should remove the iframe
and the callback should be called.
네이버페이(주문형) 네이티브앱은 어떤식으로 연동하면 될까요?
$dialog=jQuery('<div class="imp-dialog customizable"></div>');
에서 $dialog
가 선언되지 않았다고 에러가 나서
var $dialog
로 수정해서 사용중입니다.
이상해서 문의겸 남깁니다.
https://api.iamport.kr/ 에서 RestApi 예제
swagger 쓰신건가요?
샘플코드대로 입력했는데 아래와 같은 에러가 발생합니다.
"F0004:PG사 결제요청에 실패하여 중단합니다.(imp_741185732086) [코드: V023] 파라미터의 데이터 설정이 잘못되었습니다.[신용카드 본인인증은 계약되지 않은 인증방법입니다.상점에 문의해 주세요.]"
IMP.request_pay({
pg : "html5_inicis.INIBillTst", // 실제 계약 후에는 실제 상점아이디로 변경
pay_method : 'card', // 'card'만 지원됩니다.
merchant_uid : 'merchant_' + new Date().getTime(),
name : '최초인증결제',
amount : 0, // 결제창에 표시될 금액. 실제 승인이 이뤄지지는 않습니다. (모바일에서는 가격이 표시되지 않음)
customer_uid : 'your-customer-unique-id', //customer_uid 파라메터가 있어야 빌링키 발급을 시도합니다.
buyer_email : '[email protected]',
buyer_name : '아임포트',
buyer_tel : '02-1234-1234'
}, function(rsp) {
console.log(rsp)
if ( rsp.success ) {
alert('빌링키 발급 성공');
} else {
alert('빌링키 발급 실패');
}
});
안녕하세요.
현재 토스 페이먼츠에선 PG 정기 결제가 지원되지 않는것 같아 도입 계획이 있는지 궁금합니다.
도입 계획이 있으시다면 언제 도입 되는지 궁금합니다.
도입 시 현재 타 PG 사와 동일한 추상화 레벨을 가지고 있을지 궁금합니다.
감사합니다.
certifications/imp_uid 정보에도 없는거 같은데 어디서 핸드폰 실제 번호는 얻을 수 잇나요?
danal측으로 불려지는 dom값을 얻어온다던가, 이쪽 form에서 입력받은 핸드폰 번호를 넘겨준다던가
하는 방식은 없나요?
도입하기전이고 반응형 웹으로 구현할생각인데 pc화면에서 m_redirect_url을 준다면 동작이 어떻게 되나요?
IMP.request_pay({
m_redirect_url : 'https://www.yourdomain.com/payments/complete',
}, function(rsp) {
});
기대하는 동작은 m_redirect_url을 무시하고 결제화면 띄워진후에 성공하면 콜백실행하기를 원하는건데
만약 m_redirect_url을 pc화면에서준다면 예외없이 redirect_url로 이동하나요?
in sand box mode code is working fine while in real time providing CPID ,CPPWD its generating the error
let pay={
pg: "danal_tpay",
pay_method: "card",
escrow: false,
custom_data:[],
merchant_uid: this.params.merchant_uid,
name: this.params.request_count+" inspections on "+ this.params.created_at,
amount: this.params.total_paid,
buyer_email: this.params.user.contact_person_email,
buyer_name: this.params.user.contact_person_name,
buyer_tel: this.params.user.contact_person_phone_number,
PARAM:this.params,
currency:"KRW",
language:"ko",
};
IMP.request_pay(pay, function (rsp) {
its giving Error .1114 Encryption/decryption failed.
이슈 : iOS 웹뷰에서 다날 본인인증 팝업모드(popup:true) 이용시 사파리의 팝업차단 여부와 관계 없이
웹뷰에서 팝업차단을 해제해주셔야 인증창이 나타납니다.
alert 과 함께 redirect 모드
로 동작함
팝업 모드 사용시 웹뷰에서 새탭을 열 수 있는 별도 처리를 해야 정상 동작이 가능함.
해결 : 가맹점 구현에 아래 내용 추가하고 본 가이드
에 작성
var popupWebView: WKWebView?
extension WebViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
let frame = UIScreen.main.bounds
popupWebView = WKWebView(frame: frame, configuration: configuration)
if let popup = popupWebView {
popup.autoresizingMask = [.flexibleWidth, .flexibleHeight]
popup.navigationDelegate = self
popup.uiDelegate = self
view.addSubview(popup)
return popup
}
return nil
}
func webViewDidClose(_ webView: WKWebView) {
if webView == popupWebView {
popupWebView?.removeFromSuperview()
popupWebView = nil
}
}
....
point 가 아닌 kakaopay 로 확인 가능한 방법은 없는지 확인 필요
"F0005:결제가 중단되었습니다(imp_****************).01 | 정상적 인증 처리가 되지 않았습니다."라는 에러메세지를 받았습니다. 상세한 테스트 케이스는 알아내지 못했으며, 단지 특정할 수 있는 케이스는 모바일 디바이스(안드로이드로 추정)에서 카드결제를 이용할때, 발생한다는 것입니다. 카드사와 카드정보는 매번 달라지지만, 모바일 디바이스에서 간헐적으로 같은 에러가 납니다. 모바일 디바이스라는 것을 특정한 이유는 같은 결제정보(결제카드정보)로 Desktop browser에서 실행할 시, 문제없이 정상적으로 이루어지기 때문입니다. 에러 케이스를 특정 할 수가 없으니 대처가 힘듭니다. 예상가능한 에러 케이스를 모두 알려주셨으면 합니다.
pay_method : card, trans 와 같이 둘 다 들어오게 할 수 있는 방법이 있나요??
M1Pro 환경에서 프로젝트를 켜니까 다음과 같이 에러가 발생했습니다.
구현부:
import android.app.Application
import com.iamport.sdk.domain.core.Iamport
class MyApplication:Application() {
override fun onCreate() {
super.onCreate()
Iamport.create(this)
}
}
발생한 에러:
java.lang.NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)D in class Lkotlin/time/Duration; or its super classes (declaration of 'kotlin.time.Duration' appears in /data/app/com.example-WGmxxg2pcjuM-HxQu-f9_Q==/base.apk!classes14.dex)
at org.koin.core.time.MeasureKt.measureDuration(Measure.kt:32)
at org.koin.core.KoinApplication.modules(KoinApplication.kt:59)
at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:109)
at com.iamport.sdk.domain.core.Iamport$createWithKoin$1.invoke(Iamport.kt:106)
at org.koin.core.context.GlobalContext.startKoin(GlobalContext.kt:64)
at org.koin.core.context.DefaultContextExtKt.startKoin(DefaultContextExt.kt:31)
at com.iamport.sdk.domain.core.Iamport.createWithKoin(Iamport.kt:106)
at com.iamport.sdk.domain.core.Iamport.createWithKoin$default(Iamport.kt:101)
at com.iamport.sdk.domain.core.Iamport.create(Iamport.kt:94)
at com.example.MyApplication.onCreate(MyApplication.kt:10)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1182)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6460)
at android.app.ActivityThread.access$1300(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
어떡하죠...??
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<% response.setContentType("text/html; charset=UTF-8"); %>
<title>Insert title here</title><%
String member_id = request.getParameter("member_id");
int cost = Integer.parseInt(request.getParameter("cost"));
String product = request.getParameter("product");
%>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js" ></script> <script type="text/javascript" src="https://cdn.iamport.kr/js/iamport.payment-1.1.5.js"></script><script type="text/javascript">
`$(function(){
var IMP = window.IMP; // 생략가능
IMP.init('TC0ONETIME'); // 'iamport' 대신 부여받은 "가맹점 식별코드"를 사용
var msg;
IMP.request_pay({
pg : 'kakaopay',
pay_method : 'card',
merchant_uid : 'merchant_' + new Date().getTime(),
name : '<%=product%>',
amount : 100,
buyer_name : '<%=member_id%>',
}, function(rsp) {
if ( rsp.success ) {
jQuery.ajax({
url: "/payments/complete",
type: 'POST',
dataType: 'json',
data: {
imp_uid : rsp.imp_uid
}
}).done(function(data) {
if ( everythings_fine ) {
msg = '결제가 완료되었습니다.';
msg += '\n고유ID : ' + rsp.imp_uid;
msg += '\n상점 거래ID : ' + rsp.merchant_uid;
msg += '\결제 금액 : ' + rsp.paid_amount;
msg += '카드 승인번호 : ' + rsp.apply_num;
alert("결제 성공");
location.href='kakao.do?command=premiumProduct';
} else {
}
});
} else {
msg = '결제에 실패하였습니다.';
msg += '에러내용 : ' + rsp.error_msg;
alert(msg);
}
});
});`
코드는 이와 같이 작성을 했는데 실행했을 때 PG사에 등록되지 않은 가맹점 코드라는 식의 오류가 뜹니다.
ㅠㅠ
환경은 vue + iamport 이구요.
휴대폰 본인인증(certification, popup: false)인 상황에서 뒤로가기시 iframe 태그가 애매하게 남아서 화면을 가리는 문제입니다.
혹시 해결이 가능할까요?
관련된 이슈: (iamport/iamport-react-example#2)
SMS본인인증에서 CI, DI값이 응답 json에 포함되어 있지 않는 것으로 확인됩니다.
CI, DI값을 별도로 제공하지 않는것인가요?
IMP.request_pay({
pg : 'html5_inicis',
pay_method : 'card',
merchant_uid : 'merchant_' + new Date().getTime(),
name : '주문명:결제테스트',
amount : 14000,
buyer_email : '[email protected]',
buyer_name : '구매자이름',
buyer_tel : '010-1234-5678',
buyer_addr : '서울특별시 강남구 삼성동',
buyer_postcode : '123-456'
}, function(rsp) {
if ( rsp.success ) {
var msg = '결제가 완료되었습니다.';
msg += '고유ID : ' + rsp.imp_uid;
msg += '상점 거래ID : ' + rsp.merchant_uid;
msg += '결제 금액 : ' + rsp.paid_amount;
msg += '카드 승인번호 : ' + rsp.apply_num;
} else {
var msg = '결제에 실패하였습니다.';
msg += '에러내용 : ' + rsp.error_msg;
}
alert(msg);
});
안녕하세요 현재 아임포트 이용해서 인증결제 사용중인데요
아임포트에서 제공하는 문서들을 보면 rsp.success === true
시 결제 성공으로 판단하는 주석 처리들이 보입니다.
//예시
rsp.success === true
rsp.status === 'failed'
// 위 예시의 경우는 결제 실패로 간주하고 있습니다.
rsp.status
가 paid
인 경우만 결제를 성공적으로 완료했다고 판단 기준을 세우고 개발중입니다.
문서 내용에 더 정확한 결제 성공에 대한 기준이 들어가면 좋을것 같습니다.
감사합니다.
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.