iOS SwiftUI 샘플 코드 문의
안녕하세요. ios swiftUI spm을 사용해서 결제 모듈을 붙이고 있습니다.
샘플코드를 이용해서 실행을 해봤지만 결제하기 버튼이 나오지 않습니다.
#if !os(macOS) && canImport(SwiftUI)
import SwiftUI
import TossPayments
struct TossPaymentsView: View {
@State private var showingSuccess: Bool = false
@State private var showingFail: Bool = false
@StateObject var viewModel = TossPaymentsViewModel()
var body: some View { ScrollView { VStack(spacing: 0) { PaymentMethodWidgetView(widget: viewModel.widget, amount: PaymentMethodWidget.Amount(value: 1000)) AgreementWidgetView(widget: viewModel.widget) } } Button("결제하기") { viewModel.requestPayment(info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "김토스")) } .alert(isPresented: $showingSuccess, content: { Alert(title: Text(verbatim: "Success"), message: Text(verbatim: viewModel.onSuccess?.orderId ?? "")) }) .alert(isPresented: $showingFail, content: { Alert(title: Text(verbatim: "Fail"), message: Text(verbatim: viewModel.onFail?.orderId ?? "")) }) .onReceive(viewModel.$onSuccess.compactMap { $0 }) { success in showingSuccess = true } .onReceive(viewModel.$onFail.compactMap { $0 }) { fail in showingFail = true } } } #endif
@StateObject var viewModel = TossPaymentsViewModel()
var body: some View { ScrollView { VStack(spacing: 0) { PaymentMethodWidgetView(widget: viewModel.widget, amount: PaymentMethodWidget.Amount(value: 1000)) AgreementWidgetView(widget: viewModel.widget) } } Button("결제하기") { viewModel.requestPayment(info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "김토스")) } .alert(isPresented: $showingSuccess, content: { Alert(title: Text(verbatim: "Success"), message: Text(verbatim: viewModel.onSuccess?.orderId ?? "")) }) .alert(isPresented: $showingFail, content: { Alert(title: Text(verbatim: "Fail"), message: Text(verbatim: viewModel.onFail?.orderId ?? "")) }) .onReceive(viewModel.$onSuccess.compactMap { $0 }) { success in showingSuccess = true } .onReceive(viewModel.$onFail.compactMap { $0 }) { fail in showingFail = true } } } #endif
17 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
결제하기 버튼은 직접만들어주시는거에요.
저희가 그려드리지 않습니다.
그럼 샘플코드의 Button은 어떤 건가요?
질문을 이해못했어요
어떤 버튼을 말씀하시는건가요
Button("결제하기") {
viewModel.requestPayment(info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "김토스"))
요 버튼이요~
일단 버튼이 동작안하는게 문제가 아니라
버튼이 안보이시는거죠?
네 맞습니다
버튼이 왜 안보이는지는 우선 디버깅해보셔야할 것 같아요
버튼 자체는 샘플이랑 동일할 필요없이 view 내부에 어떻게든 만들어주시면 됩니다.
이후 버튼 클릭했을 때 requestPayment를 실행해주시면 되고요
네 방금 만들어서 테스트해봤는데 반응이 없습니다.
디버깅으로 requestPayment 이 함수까지 오는건 확인했습니다
class TossPaymentsViewModel: ObservableObject {
let widget = PaymentWidget(clientKey: TossPaymentsConstants.clientKey, customerKey: "Test")
@Published
var isShowing: Bool = false
@Published var onSuccess: TossPaymentsResult.Success? @Published var onFail: TossPaymentsResult.Fail?
init() { widget.delegate = self } func requestPayment(info: WidgetPaymentInfo) { widget.requestPayment( info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "김토스") ) } } 혹시 결제위젯 연동 키 클라이언트 키가 없으면 안되는건가요? 전자결제 신청하고 확인할 수 있어요
@Published var onSuccess: TossPaymentsResult.Success? @Published var onFail: TossPaymentsResult.Fail?
init() { widget.delegate = self } func requestPayment(info: WidgetPaymentInfo) { widget.requestPayment( info: DefaultWidgetPaymentInfo(orderId: "123", orderName: "김토스") ) } } 혹시 결제위젯 연동 키 클라이언트 키가 없으면 안되는건가요? 전자결제 신청하고 확인할 수 있어요
네 문서에 있는 키를 사용하셔야 합니다
연동하기 | 토스페이먼츠 개발자센터
토스페이먼츠의 간편한 결제 연동 과정을 한눈에 볼 수 있습니다. 각 단계별 설명과 함께 달라지는 UI와 코드를 확인해보세요.
요 페이지에 있는 키를 이용해주세요
test_gck -> 클라이언트키
test_gsk -> 시크릿 키입니다.
아네 감사합니다 키를 바꾸니깐 잘 나옵니다
여기서 결제 클릭하면 빈 화면이 나옵니다.
아래 함수가 실행되는 거 같은데 설정 문제일까요?
func requestPaymentTest(info: WidgetPaymentInfo) {
widget.requestPayment(
info: info
)
}


우선 web console에 어떤 에러메세지가 뜨는지 확인해보셔야할 것 같아요
orderId가 중복되었거나 하지는 않는지 확인해보시고요
orderId 문제였습니다. 덕분에 해결 잘 됐습니다 감사합니다.
🙂
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.