nicepay연동 관련 질문입니다

조회수 843회

PG 사의 샘플에 있는 결제요청 jsp에 있는 결제요청 파라미터와 암호화 메소드, 로직을 공통으로 빼고 싶은데 컨트롤러에 넣어서 할려고 해도 추상메서드 관련 에러가 나고 Util class로 하려고 해도 에러가 납니다. 원래 샘플은 공통 결제요청페이지가 있어서 거기로 url 타서 값을 보내면 되는데 현재 각자 다른 결제페이지 jsp에서 버튼을 누르면 결제 팝업이 떠야 해야해서 어떻게 해야할지 모르겠습니다.
첫 질문이라 이렇게 질문해도 되는지 모르겠네요. 도와주세요

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 저는 KCP랑 이니시스 모듈을 PHP 소스에 띄워본 경험밖에 없지만 하필 저도 그때 공통클래스 만들어서 해결봤기 때문에 그 경험 가지고만 한말씀 올려드리자면...


    1. PG서비스라는 건 결국은 딱 2가지를 해주는 서비스입니다.

    1. 결제수단을 확인. 신용카드 번호가 유효한지, 실제 존재하는 계좌번호인지 등등을 체크하고, 전체 거래내역을 추적 가능한 코드를 제공
    2. 결제수단에 접근. 신용카드 사용내역 생성, 계좌 인출, 사용내역 취소 등을 시도하고 그 결과를 제공하며, 돈이 들어오면 정산해서 등록된 계좌에 입금

    그리고 이 앞뒤로 보안, 쇼핑몰이 해야 할 전후 작업, 문제 발생시 취소 처리 등등이 묶여 있는 것뿐입니다. 그런 큰 그림을 가지고 데모 소스와 매뉴얼을 침착하게 다시 뜯어보세요. 뭘 살리고 뭘 빼야 하는지 보일 겁니다.


    2. 어느 PG사건 각 PG사별로 정해진 통신규약이 있고, 결제승인이든 취소든 모두 그 규약의 변수값만 바꾸는 방식으로 처리됩니다. "각자 다른 페이지"에서 결제를 한다고 해도, 어차피 상점이 같고 사용하는 PG사가 같으므로, 그 통신규약 위에서 뭔가 변수값만 바꿔서 작업을 수행하게 될 겁니다. 그런 관점으로 추상화 개발 작업을 접근해 보시면 어떨까요.

    예컨대 KCP의 경우에는, 지금 사용자가 모바일로 결제하느냐 PC로 결제하느냐에 따라서 뭔가 처리가 많이 다릅니다. 사용해야 할 자바스크립트 파일도 다르고 호출하는 함수도 다르고 심지어 그때 쓰이는 폼의 형식도 달라요. 그래서 저의 경우에는 class KCPpublic $isMobile; 클래스변수를 선언해놓고 활용하고 있습니다.

    좀더 구체적으로 예를 들자면...

    /**
     * 개념적으로만 보세요.
     */
    class KCP
    {
        // 어차피 KCP 모듈 쓰려면 이런 것들이 필요하다.
        protected $isMobile;
        protected $amount;
        protected $method;
    
        // 그렇다면 초기화 시점에서 받아놓고 쓰자.
        public function __construct(bool $isMobile, int $amount, string $method)
        {
            $this->isMobile = $isMobile;
            $this->amount = $amount;
            $this->method = $method;
        }
    
        // 그리고 받아놓은 값에만 근거하여 프론트 요소를 형성하거나 ...
        public function getKCPConfigInputs()
        {
            return
            '<input type="hidden" name="__isMobile" value="'.((int) $this->isMobile).'" />
            <input type="hidden" name="__amount" value="'.$this->amount.'" />
            <input type="hidden" name="__method" value="'.$this->method.'" />';
        }
    
        // ... 백엔드 로직을 구현하자.
        public function authorizeTransaction($txid)
        {
            return exec_shell(KCP_BINARY.' --txid='.$txid.' --money='.$this->amount.' --method='.$this->method);
        }
    }
    
    // 그러면 이후 딱 한번만 제대로 된 인스턴스를 생성해두면 ...
    $kcpBefore = new KCP(true, 12900, 'BANK');
    echo $kcpBefore->getKCPConfigInputs();
    
    // ... 두고두고 걱정없다.
    $kcpAfter = new KCP((bool) $_POST['__isMobile'], (int) $_POST['__amount'], (string) $_POST['__method']);
    echo $kcpAfter->authorizeTransaction($_POST['txid']);
    

    PG 결제는 실무 웹개발자라면 한번쯤 넘어야 하는 고비인 거 같습니다. 기회가 왔을 때 성공하세요. 하실 수 있어요.

    • 답변 감사합니다. 노력해 보고는 있는데 아직 초보라 감이 안 잡히네여 알 수 없는 사용자 2020.7.29 16:15
    • 또 현재 하고 있는 프로젝트가 통합사이트라서 상점키라던지 id가 각각 다릅니다. 그래서 머리가 아프네요 알 수 없는 사용자 2020.7.29 16:16

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)