차세대 플랫폼

지불 캡처

상점 직원으로서 오더를 확정하기 전에 오더에 대한 지불을 캡처할 수 있습니다. 단일 또는 복수 지불 방법으로 지불하여 지불 방법을 선택하고 오더를 확정할 수 있습니다. 이 절에서는 지불 캡처를 구현하는 데 사용되는 API, 서비스, UE및 기타 구성품목에 대해 설명합니다.

지불 확인은 주문 캡처의 마지막 단계입니다. 기본적으로 Sterling Store Engagement 현금, 상품권, 신용 카드 등의 결제 방법을 지원합니다. 더미 UE 구현은 신용 카드 및 기프트 카드 지불 방법에 대한 지불 승인 및 정산을 지원하는 데 사용됩니다. 추가 지불 유형은 사용자 정의를 통해 지불 캡처 페이지에서 지원됩니다.

지불 캡처 페이지에서 다음 API가 호출됩니다.
  • 고객이 오더를 제출하기 위해 지불해야 하는 금액과 지불이 이미 완료된 경우 사용된 지불 방법을 검색하기 위해 getCompleteOrderDetails API가 호출됩니다.
  • 엔터프라이즈에서 허용되는 지불 방법을 검색하기 위해 getPaymentTypeList API가 호출됩니다. 이 목록에서 주문에 추가할 지불 방법을 선택할 수 있습니다.
    주: 사용자 정의를 통해 지원되는 지불 유형만 이 페이지에 표시됩니다.
  • 지불에 대한 신용 카드 정보를 캡처하는 동안 주소 캡처가 필요한지 여부를 확인하기 위해 RuleSetFieldName="ISF_STORE_ALLOW_ADDR_CAP_FOR_CC" 와 함께 getRuleDetails API가 호출됩니다.
  • 전달되는 지불 방법 정보의 유형에 따라 오더에 지불 방법을 추가하기 위해 capturePayment API가 호출됩니다.
  • processOrderPayments API는 단일 API내에서 requestCollection()executeCollection() API를 호출하기 위해 호출됩니다. 이는 모든 성공적인 capturePayment API 호출 후에 호출됩니다.
  • confirmDraftOrder API는 초안오더 완료를 확인하고 이를 생성됨 상태로 이동합니다. 이는 첫 번째 성공적인 processOrderPayments API 호출 후에만 호출됩니다.
  • changeOrderStatus API가 마지막에 호출되어 운반 오더 라인의 상태를 생성됨에서 운반됨으로 변경합니다.

가정/제한사항

  • 주문에 대한 부분 지불이 완료되면 현재 장바구니 보기 페이지로 돌아갈 수 없습니다.
  • 주문에 대한 지불이 완료되는 즉시 초안오더가 확정됩니다. 오더 금액이 완전히 지불되면 이월 오더 라인이 운송됨 상태로 이동됩니다.

주문에 지불 방법 추가

getPaymentTypeList API는 엔터프라이즈에서 허용되는 지불 방법을 검색합니다.

지불 방법 옆에 있는 + 아이콘을 클릭하여 지불 방법을 선택할 수 있습니다. 고객은 하나 이상의 지불 방법을 사용하여 지불할 수 있습니다. 지불 방법을 선택한 후 선택한 지불 방법을 사용하여 지불할 금액을 추가할 수 있습니다.

capturePayment API는 오더에 지불 방법을 저장하고 외부 지불 유형을 처리합니다. processOrderPayment API는 capturePayment API 바로 다음에 호출되어 선택된 지불 방법을 사용하여 지불된 금액의 승인 및 콜렉션을 처리합니다.

초안오더에 대해 부분 지불이 수행되면 오더를 확정하기 위해 confirmDraftOrder API가 호출됩니다. 그러나 전체 주문 금액이 지불될 때까지 주문 캡처 프로세스가 완료되지 않습니다. 주문에 대해 수집할 잔고를 알리는 정보 배너 메시지가 표시됩니다.

고객은 여러 지불 방법을 사용하여 지불하도록 선택하고 신용 카드, 현금 또는 기프트 카드에 비용을 분배할 수 있습니다. 주문에 대해 부분 또는 전체 지불을 수행한 후에는 주문에 대한 보류 중인 금액이 계산됩니다. 오더에 수집할 계류 중 금액이 있는 경우 상점 직원이 동일한 금액을 수집하도록 지원하는 정보 배너가 표시됩니다.

오더의 총 지불 금액이 지불되면 이월 오더 라인의 상태를 CREATED 에서 CARRIED 상태로 변경하기 위해 changeOrderStatus API가 호출됩니다. 이 API는 오더에 운반 라인이 포함된 경우에만 호출됩니다. changeOrderStatus API는 상태 재고 유형 구성을 검색하고 운반 라인에 맞게 재고 공급을 조정합니다.

또한 커밋 리스너(OMPSIMChangeOrderStatusRestCommitListener)를 changeOrderStatus API에 등록하여 스토어 인벤토리 관리 서비스에 인벤토리 업데이트를 게시합니다. 그만큼 OMPSIMChangeOrderStatusRestCommitListener 클래스는 Store Inventory Management에 동기적으로 remove inventory API를 호출하여 Store Inventory Management 에 재고 업데이트를 게시하는 역할을 합니다.

changeOrderStatus API는 휴대 주문 라인(있는 경우)에서 ShipNode 을 읽고 노드가 스토어 재고 관리 (SIM)가 활성화되어 있는지 확인합니다. 그렇다면 OMPSIMChangeOrderStatusRestCommitListener 에 등록되어 스토어 재고 관리에 재고 업데이트를 게시합니다. 스토어 재고 관리의 재고 조정은 실시간으로 이루어집니다. 스토어 재고 관리에서 재고를 조정하는 동안 오류가 발생하면 주문 캡처 프로세스에 실패하게 됩니다.

스털링 비즈니스 센터에 구성된 충전 순서가 우선합니다. capturePayment API의 시퀀스는 동률인 시퀀스 번호가 있는 경우 고려됩니다. 예를 들면, 동일한 유형의 여러 지불 방법이 있거나 여러 지불 방법의 시퀀스 번호가 같은 경우가 있습니다. capturePayment API는 지불 방법의 최대 청구 한계를 계산하는 데 fundsAvailable, RemainingAmountToAuth 및 기타 변수를 고려합니다.

고객이 기존 지불 방법에 대해 청구되는 금액을 변경하려는 경우 RequestedAmount 속성이 자동으로 업데이트됩니다. capturePayment API는 정정을 고려하여 MaxChargeLimitsRemainingAmountToAuth 속성을 적절히 업데이트하도록 호출됩니다.

주문에 대한 부분 지불을 수행한 후 고객은 주문을 취소하도록 선택할 수 있습니다. 이 경우 상점 직원으로서 적절한 취소 사유를 선택하여 오더를 취소할 수 있습니다. 오더를 취소하기 위해 changeOrder API가 호출되고 부분 지불의 환불을 처리하기 위해 processOrderPayments API가 호출됩니다. 오더 취소에 성공한 후 환불 요약정보를 조회할 수 있습니다. 환불 요약정보는 오더에 대해 지불하는 데 사용된 지불 방법 목록을 제공하고 환불 설정내역에 따라 환불에 사용되는 지불 방법도 나열합니다. 현금으로 환불하는 경우에는 환불 요약정보에 지정된 금액을 고객에게 현금으로 전달해야 합니다.

현금

상점 직원은 금액 필드에서 현금 지불 방법을 사용하여 고객이 지불하려는 금액을 추가하고 지불을 확인할 수 있습니다. capturePayment API는 다음 예제에 표시된 대로 입력을 사용하여 호출됩니다.
{
   "Order":{
      "OrderHeaderKey":"order_id",
      "EnterpriseCode":"enterprise_code",
      "PaymentMethods":{
         "PaymentMethod":[
            {
               "PaymentType":"CASH",
               "PaymentTypeGroup":"OTHER",
               "RequestedAmount":"100.00",
               "PaymentReference1":"Cash for Charge",
               "Operation":"Collect"
            }
         ]
      }
   }
}
  • 수령된 금액이 오더 총계와 동일하면 오더가 확정되고 오더 요약정보 페이지가 열립니다.
  • 수령된 금액이 오더 총계보다 작은 경우 잔고 금액을 표시하도록 예정된 금액이 업데이트됩니다. 만기 금액을 표시하는 경고 메시지가 표시됩니다. 이제 새 지불 방법을 선택하여 지불해야 하는 금액을 지불할 수 있습니다.
  • 오더 총계보다 큰 금액을 입력할 수 없습니다.
  • 수령된 금액이 청구되고 승인되는 경우, 즉 이월 및 운송 또는 픽업 오더 라인 둘 다에 대해 지불하는 데 사용되는 경우 지불이 두 개의 오브젝트로 분할되고 다음 항목이 Payment method 배열에 추가됩니다.
    {               
    "PaymentType":"CASH",               
    "PaymentTypeGroup":"OTHER",               
    "RequestedAmount":"100.00",               
    "PaymentReference1":"Cash for Charge",               
    "Operation":"Collect"            
    }

기프트 카드

상점 직원은 기프트 카드 번호를 입력하여 기프트 카드 잔고를 확인해야 합니다. 이는 YFSGetFundsAvailableUE 사용자 엑시트와 함께 invokeUE API를 사용합니다. 수신된 응답을 기반으로 다음 조치가 수행됩니다.
  • 선물 카드에서 사용 가능한 잔고가 0보다 큰 경우 금액 필드 및 확인 버튼이 사용 가능합니다.
  • 선물 카드에서 사용 가능한 잔고가 0이면 적절한 오류 메시지가 표시됩니다.
  • 선물 카드에서 사용 가능한 잔액 금액이 지불 금액보다 적은 경우, 선물 카드에서 사용 가능한 금액과 동일한 금액이 금액 필드에서 자동 업데이트되며 지불을 확인할 수 있습니다.
  • 기프트 카드에서 사용 가능한 금액 또는 기한 금액보다 큰 금액 중 더 작은 금액을 입력하면 오류 메시지가 표시됩니다.
  • 수령된 금액이 청구되고 승인되는 경우 즉, 이월 및 운송 또는 픽업 오더 라인 둘 다에 대해 지불하는 데 사용되는 경우 지불은 두 개의 오브젝트로 분할되고 다음 항목이 Payment method 배열에 추가됩니다.
    {  
    "Order":{  
    "OrderHeaderKey":"order_id",      
    "EnterpriseCode":"enterprise_code",      
    "PaymentMethods":{         
    "PaymentMethod":[            
    {               
    "PaymentType":"GIFT_CARD",               
    "PaymentTypeGroup":"OTHER",              
     "RequestedAmount":"100.00",               
     "PaymentReference1": giftCardNumber + 'ForCharge',
     "PrimaryAccountNo": giftCardNumber,
     "Operation":"Collect"            
    },
    {               
    "PaymentType":"GIFT_CARD",               
    "PaymentTypeGroup":"OTHER",              
     "RequestedAmount":"100.00",               
     "PaymentReference1": giftCardNumber + 'ForAuth',
     "PrimaryAccountNo": giftCardNumber,
     "Operation":"Manage"            
    }
     ]     
    }   
    }
    }

신용 카드

상점 직원으로서 신용 카드를 지불 방법으로 선택하고 지불할 금액을 추가한 후 확인을 클릭할 수 있습니다. 신용카드를 쓸어넘기라는 메시지가 표시됩니다. 확인을 클릭하면 쓸어넘기기 카드 세부사항이 페치되고 다음 예에 표시된 대로 지불 방법을 확인하기 위한 요청이 작성됩니다.
{
        PaymentType: 'CREDIT_CARD',
 Operation: (this.orderDetails.RemainingFinancialTotals.RemainingToCharge > 0) ? 'Collect' : 'Manage'
        RequestedAmount: 100,
        CreditCardExpDate: '',
        CreditCardNo: '1234', (random 4 digits)
        CreditCardType: '',
        FirstName: '',
 MiddleName: '',
        LastName: '',
        SecureAuthenticationCode: '',
        PaymentReference1: '',
        PaymentReference2: '',
        PaymentReference3: '',
 PaymentReference4: '',
 PaymentReference5: '',
 PaymentReference6: '',
 PaymentReference7: '',
 PaymentReference8: '',
 PaymentReference9: '',
 DisplayPaymentReference1: ''
 };
  • 수령된 금액이 청구되고 승인되는 경우 즉, 운송 및 운송 또는 픽업 라인 둘 다에 대해 지불하는 데 사용되는 경우 RequestedAmount = charged amountSecondaryAmount = (RequestedAmount - RemainingToCharge) 가 추가됩니다.
  • credit-card-data.service.ts 서비스가 신용 카드 구성요소에 추가됩니다. 이 서비스는 기본 신용카드 구성요소에 신용카드 세부사항을 전달하는 데 사용됩니다. 기본적으로 더미 데이터는 해당 서비스에서 전달됩니다. 그러나 이는 API에서 데이터를 리턴하도록 확장될 수 있으며 리턴된 데이터는 PaymentMethod 오브젝트에 추가됩니다.
WSC_STORE_ALLOW_ADDR_CAP_FOR_CC 규칙이 true로 설정된 경우 주소 캡처는 신용카드 지불에 필수입니다.
  • 지불 청구 주소 (PersonInfoBillTo) 가 주문에서 사용 가능한 경우 지불 청구 주소가 사용됩니다.
  • 고객이 식별되고 지불 청구 주소가 기본값 (isDefaultBillTo=true) 으로 설정된 경우 이 주소가 지불 청구 주소로 사용됩니다. 즉, 주문에 PersonInfoBillTo가 포함된 경우 이 정보가 사용됩니다.
  • 주문에 대해 운송 주소 (PersonInfoShipTo) 를 사용할 수 있는 경우, billToSameAsShipTo 가 선택되면 이 주소가 지불 청구 주소로 사용됩니다.

    billToSameAsShipTo 를 선택하지 않으면 지불 청구 주소를 추가하는 옵션이 표시되고 지불 방법에 대한 새 지불 청구 주소가 캡처됩니다.

지불 처리

processOrderPayments API는 모든 승인을 처리하며 오더를 처리하는 동안 특정 시점에서 수금되는 실제 금액을 계산합니다. 승인된 모든 지불 방법은 지불에 대해 즉시 고려됩니다.

지불 방법이 승인에 실패하면 지불 방법을 수정하거나 다른 지불 방법을 사용하도록 프롬프트가 표시됩니다. 지불 검증 시스템이 가동 중지된 경우 해당 지불 방법은 계속해서 고려됩니다. 그러나 승인은 지불 처리 에이전트를 통해 나중에 발생합니다.

processOrderPayments API의 결과에 따라 모든 지불 방법이 성공적으로 처리되면 PaymentTransactionSuccessful 속성의 값이 Y 로 설정되고 오더가 확정됩니다.

지불 방법 중 하나가 실패하면 PaymentTransactionSuccessful 속성의 값이 N로 설정됩니다. 지불이 성공적으로 처리되지 않았음을 나타내는 적절한 메시지가 표시됩니다. 지불 방법이 취소된 이유를 나타내기 위해 PaymentTransactionError 요소에 리턴되는 메시지가 표시됩니다. 이유에 따라 관련 정보 (예: 카드 만기 날짜, 지불 청구 주소 또는 지불 참조) 를 수정할 수 있습니다.

고유 ID는 수정할 수 없습니다. 예를 들어, 신용 카드 번호를 잘못 입력하면 지불 방법이 제거되거나 보류되고 새 지불 방법을 추가해야 합니다.

executeCollection API가 지불 방법의 PaymentTypeGroup 속성을 기반으로 하는 오더에서 각 지불 방법에 대해 다음 UE 중 하나를 호출합니다.
  • YFSCollectionCreditCardUE
  • YFSCollectionCustomerAccountUE
  • YFSCollectionOthersUE
  • YFSCollectionStoredValueCardUE
이러한 UE는 지불 권한을 부여하고 비용을 부과하기 위한 사용자 정의 로직을 추가하는 옵션을 제공합니다. 사용자 종료에 대한 자세한 내용은 IBM® Sterling Order Management System: Javadoc™을 참조하세요.

지불 오류 처리

오더에 대해 처음으로 지불이 확정되면 processOrderPayments API가 모든 승인을 처리하고 오더를 처리하는 동안 임의의 지점에서 수금할 실제 금액을 계산합니다. 그런 다음 API는 지불 방법을 유효성 검증하는 UE를 호출하고 지불이 유효성 검증에 실패하는 경우 에러를 리턴합니다.

API의 출력에 있는 PaymentTransactionError 요소에 에러가 포함되어 있습니다. 승인된 모든 지불 방법은 지불에 대해 즉시 고려됩니다. 지불 방법이 승인에 실패하면 지불 방법을 수정하거나 다른 지불 방법을 사용하도록 프롬프트가 표시됩니다.

지불 검증 시스템이 가동 중지된 경우 해당 지불 방법은 계속해서 고려됩니다. 그러나 승인은 지불 처리 에이전트를 통해 나중에 발생합니다. 지불 캡처 페이지가 다시 로드되면 각 지불 방법에 대해 설정된 상태를 기반으로 이전 트랜잭션에서 에러를 리턴한 지불 방법이 검색됩니다.

오더에 있는 지불 방법을 유효성 검증하기 위해 processOrderPayments API가 다시 호출되지 않습니다. 그러나 잘못된 지불 방법을 수정하고 변경사항을 적용하면 지불의 유효성을 검증하기 위해 processOrderPayments API가 호출됩니다.

다양한 시나리오에서 지불 캡처 및 처리

운반 오더 라인만 있는 오더

이월 주문에서 고객은 상점에서 항목을 주문하고 항목과 함께 상점을 나갑니다. 이 경우 오더 라인에 대한 즉각적인 정산이 있습니다. 운반 오더 라인에 대해 지불 가능한 금액은 구매 시에 청구됩니다. 고객은 사용 가능한 지불 방법을 사용하여 운반 오더 라인에 대한 지불을 완료할 수 있습니다.

  • 주문을 확인하려면 주문 총계를 결산, 수집 또는 청구해야 합니다.
    • RemainingFinancialTotals.RemainingToCharge 속성은 청구될 금액에 사용됩니다.
    • 사용된 지불 방법에 관계없이 지불을 캡처하는 동안 Operation=Collect 가 전달됩니다.
    • 지불 캡처는 지불 오류의 경우 실패로 표시됩니다.
  • 이월 주문 라인 금액은 여러 지불 방법으로 분할할 수 있으며 각 지불 방법은 비용이 청구됩니다.
  • 오더 라인 비용, 할인 및 세금은 자동으로 라인 소계에 맞게 조정됩니다. 이월 주문 라인 총계는 RemainingFinancialTotalsInPerson=Y 버킷의 일부이며 금액은 RemainingToCharge 속성에서 채워집니다.
  • 오더에 적용되는 오더 헤더 비용은 RemainingFinancialTotalsInPerson=N 버킷의 일부로 사용되며 금액은 RemainingToAuthorize 속성에서 채워집니다. 이 금액은 운송 라인만 있는 오더의 경우 선택된 지불 방법에 대해서도 청구됩니다.
혼합 오더 라인이 있는 오더
  • 혼합 라인의 경우, 운송 라인 금액은 조작을 Collect으로 전달하여 선택된 지불 방법에 대한 구매 시에 청구, 수집 또는 정산됩니다.
  • 나머지 오더 라인 (피킹 및 선적) 의 경우 RemainingFinancialTotals.RemainingToAuthroize 속성에서 제공하는 해당 금액이 Manage로 오퍼레이션을 전달하여 승인에 사용됩니다.
  • 지불 유형 구성에 따라 이 금액을 청구하거나 승인 용도로 사용할 수 있습니다. 지불 유형 구성을 기반으로 지불을 처리하기 위해 capturePayment API및 processOrderPayments API가 호출됩니다.
  • 오더 라인 비용, 할인 및 세금은 자동으로 오더 라인 소계에 맞게 조정됩니다. 오더피킹 및 선적 오더 라인의 경우 라인 총계는 RemainingFinancialTotalsInPerson=N 버킷의 일부이며 금액은 RemainingToAuthrorize 속성에서 채워집니다.
  • 오더에 적용된 오더 헤더 비용은 RemainingFinancialTotalsInPerson=N 버킷의 일부이며 금액은 RemainingToAuthorize 속성에서 채워집니다.
부분 지불 후 주문 취소
  • 주문에 대한 부분 지불을 수행한 후 고객은 주문을 취소하도록 선택할 수 있습니다.
  • 지불 캡처 페이지를 닫으면 메시지가 표시됩니다. 고객은 지불을 계속 완료하거나 주문을 취소할 수 있습니다.
  • 취소 옵션을 선택하면 CommonCodeList API가 CodeType="YCD_CANCEL_REASON" 와 함께 사용되어 취소 이유를 페치합니다.
  • 옵션을 선택하면 changeOrder API를 사용하여 오더를 취소하고 processOrderPayments API를 호출하여 환불을 처리하고 환불 요약정보를 표시합니다.
  • 상점 직원은 환불을 현금으로 고객에게 전달할 수 있습니다.
부분 지불이 있는 주문 포기된 주문에 대한 주문 캡처 완료
주문에 대한 부분 지불이 이루어진 후 브라우저를 닫거나 시스템 장애와 같은 다양한 이유로 인해 주문 캡처 플로우를 종료한 경우 주문이 포기된 것으로 간주됩니다. 부분 지불이 수행되기 때문에 오더가 이미 확정되었습니다. 그러나 일부 지불은 여전히 보류 중입니다.

이러한 경우, 주문 번호 또는 기타 검색 기준을 사용하여 주문 찾기 포틀렛에서 이 주문을 검색할 수 있습니다. 또는 고객이 주문에 대해 식별되는 경우 고객 프로파일 페이지에서 주문 히스토리를 볼 수 있습니다. 관련 주문을 클릭하면 주문 정보 요약 페이지가 열립니다. 여기서 지불을 완료하기 위한 알림 배너가 표시됩니다. 지불 캡처가 열리고 고객이 나머지 금액을 지불하고 주문 캡처 프로세스를 완료하도록 지원할 수 있습니다.