DB의 주문번호와 나이스페이의 실제 주문번호가 다르게 적용됩니다.

DB의 주문번호와 나이스페이의 실제 주문번호가 다르게 적용됩니다.

QA

DB의 주문번호와 나이스페이의 실제 주문번호가 다르게 적용됩니다.

답변 2

본문

신용카드 PG 결제사로 나이스페이를 사용하고 있습니다.

신용카드 결제 시 주문번호가 g5_shop_order와 g5_shop_cart에 잘저장됩니다.

그리고 영카트의 신용카드 취소 기능을 통해 결제취소를 하려고 할 때 부분취소가 아닌 전체 취소를 하라는 오류 메시지가 나옵니다.

그리고 나이스페이 결제사에서 직접 결제내역을 확인해보니 DB에 저장한 주문번호(od_id_와 결제사에 등록되어있는 주문번호가 다르다는것을 확인했습니다.

(DB 주문번호: 2024111810012865, 실제 주문번호: 2024111810002673)

 

제가 예전에 결제 관련 코드를 수정을 했었는데 당시에는 테스트에 문제가 없었습니다.

아래는 제가 수정했던 소스코드의 일부입니다. (여러 종류의 상품 주문 시 개별 주문건으로 분리하는 코드)

 


// orderformupdate.php
// 각각의 상품별로 주문서를 따로 저장해야함
// shop_cart 테이블의 담긴 상품정보들을 가져오기
$sql = "SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id='$tmp_cart_id'";
$result = sql_query($sql);
 
// 장바구니에 담긴 각 상품에 대해 개별 주문을 생성
for ($i = 0; $row = sql_fetch_array($result); $i++) {
    // 각각의 상품마다 주문 번호를 생성
    $od_id = get_uniqid();
 
    // 초기화하여 각 상품마다 적절히 처리되도록 함
    $current_dday = $dday;
 
    // 주문서에 입력
   $sql = "INSERT INTO {$g5['g5_shop_order_table']}
            SET od_id             = '$od_id',
                mb_id             = '{$member['mb_id']}',
                od_pwd            = '$od_pwd',
                od_name           = '$od_name',
                od_email          = '$od_email',
                od_tel            = '$od_tel',
                od_hp             = '$od_hp',
                od_zip1           = '$od_zip1',
                od_zip2           = '$od_zip2',
                od_addr1          = '$od_addr1',
                od_addr2          = '$od_addr2',
                od_addr3          = '$od_addr3',
                od_addr_jibeon    = '$od_addr_jibeon',
                od_b_name         = '$od_b_name',
                od_b_tel          = '$od_b_tel',
                od_b_hp           = '$od_b_hp',
                od_b_zip1         = '$od_b_zip1',
                od_b_zip2         = '$od_b_zip2',
                od_b_addr1        = '$od_b_addr1',
                od_b_addr2        = '$od_b_addr2',
                od_b_addr3        = '$od_b_addr3',
                od_b_addr_jibeon  = '$od_b_addr_jibeon',
                od_deposit_name   = '$od_deposit_name',
                od_memo           = '$od_memo',
                od_cart_count     = 1,  
                od_cart_price     = '" . ($row['ct_price'] * $row['ct_qty']) . "',  
                od_cart_coupon    = '{$row['ct_coupon']}',  
                od_send_cost      = '$i_send_cost',
                od_send_coupon    = '$tot_sc_cp_price',
                od_send_cost2     = '$i_send_cost2',
                od_coupon         = '$tot_od_cp_price',
                od_receipt_price  = '" . ($row['ct_price'] * $row['ct_qty']) . "',  
                od_receipt_point  = '$od_receipt_point',
                od_bank_account   = '$od_bank_account',
                od_receipt_time   = '$od_receipt_time',
                od_misu           = '$od_misu',
                od_pg             = '$od_pg',
                od_tno            = '$od_tno',
                od_app_no         = '$od_app_no',
                od_escrow         = '$od_escrow',
                od_tax_flag       = '$od_tax_flag',
                od_tax_mny        = '$od_tax_mny',
                od_vat_mny        = '$od_vat_mny',
                od_free_mny       = '$od_free_mny',
                od_status         = '$od_status',
                od_shop_memo      = '',
                od_hope_date      = '$od_hope_date',
                od_time           = '".G5_TIME_YMDHIS."',
                od_ip             = '$REMOTE_ADDR',
                od_settle_case    = '$od_settle_case',
                od_other_pay_type = '$od_other_pay_type',
                od_test           = '{$default['de_card_test']}',
                it_names          = '{$row['it_name']}',
                dday              = '$current_dday'";
 
    // 각 상품에 대해 개별적으로 insert
    sql_query($sql, false);
 
    // 장바구니에 주문 번호 업데이트
    $update_sql = "UPDATE {$g5['g5_shop_cart_table']}
                   SET od_id = '$od_id',
                          ct_status = '주문'
                   WHERE ct_id = '{$row['ct_id']}'";
    sql_query($update_sql);
}
 

 

혹시 위 코드에서 각 상품에 대한 주문번호(od_id)를 새로 생성하는 부분때문에 이러한 문제가 생기는 걸까요?

그렇다면 어떤 식으로 수정하면 괜찮을지 알려주시면 감사하겠습니다!

 

이 질문에 댓글 쓰기 :

답변 2

// 각각의 상품마다 주문 번호를 생성
    $od_id = get_uniqid();

새로 생성을 하시네요. 그러니 달라질수 밖에 없을거 같습니다. 해당을 하기 전에 기존값을 다른 필드에 저장을 하시면 될 거 같습니다.


// orderformupdate.php
// 각각의 상품별로 주문서를 따로 저장해야함
// shop_cart 테이블의 담긴 상품정보들을 가져오기
$sql = "SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id='$tmp_cart_id'";
$result = sql_query($sql);
 
$tmp_id_for_pg = array(); //초기화
 
// 장바구니에 담긴 각 상품에 대해 개별 주문을 생성
for ($i = 0; $row = sql_fetch_array($result); $i++) {
    // 각각의 상품마다 주문 번호를 생성
    $od_id = get_uniqid();
 
    $tmp_id_for_pg[$i]  = $od_id; //배열저장
 
    // 초기화하여 각 상품마다 적절히 처리되도록 함
    $current_dday = $dday;
 
    // 주문서에 입력
   $sql = "INSERT INTO {$g5['g5_shop_order_table']}
            SET od_id             = '$od_id',
                mb_id             = '{$member['mb_id']}',
                od_pwd            = '$od_pwd',
                od_name           = '$od_name',
                od_email          = '$od_email',
                od_tel            = '$od_tel',
                od_hp             = '$od_hp',
                od_zip1           = '$od_zip1',
                od_zip2           = '$od_zip2',
                od_addr1          = '$od_addr1',
                od_addr2          = '$od_addr2',
                od_addr3          = '$od_addr3',
                od_addr_jibeon    = '$od_addr_jibeon',
                od_b_name         = '$od_b_name',
                od_b_tel          = '$od_b_tel',
                od_b_hp           = '$od_b_hp',
                od_b_zip1         = '$od_b_zip1',
                od_b_zip2         = '$od_b_zip2',
                od_b_addr1        = '$od_b_addr1',
                od_b_addr2        = '$od_b_addr2',
                od_b_addr3        = '$od_b_addr3',
                od_b_addr_jibeon  = '$od_b_addr_jibeon',
                od_deposit_name   = '$od_deposit_name',
                od_memo           = '$od_memo',
                od_cart_count     = 1,  
                od_cart_price     = '" . ($row['ct_price'] * $row['ct_qty']) . "',  
                od_cart_coupon    = '{$row['ct_coupon']}',  
                od_send_cost      = '$i_send_cost',
                od_send_coupon    = '$tot_sc_cp_price',
                od_send_cost2     = '$i_send_cost2',
                od_coupon         = '$tot_od_cp_price',
                od_receipt_price  = '" . ($row['ct_price'] * $row['ct_qty']) . "',  
                od_receipt_point  = '$od_receipt_point',
                od_bank_account   = '$od_bank_account',
                od_receipt_time   = '$od_receipt_time',
                od_misu           = '$od_misu',
                od_pg             = '$od_pg',
                od_tno            = '$od_tno',
                od_app_no         = '$od_app_no',
                od_escrow         = '$od_escrow',
                od_tax_flag       = '$od_tax_flag',
                od_tax_mny        = '$od_tax_mny',
                od_vat_mny        = '$od_vat_mny',
                od_free_mny       = '$od_free_mny',
                od_status         = '$od_status',
                od_shop_memo      = '',
                od_hope_date      = '$od_hope_date',
                od_time           = '".G5_TIME_YMDHIS."',
                od_ip             = '$REMOTE_ADDR',
                od_settle_case    = '$od_settle_case',
                od_other_pay_type = '$od_other_pay_type',
                od_test           = '{$default['de_card_test']}',
                it_names          = '{$row['it_name']}',
                dday              = '$current_dday'";
 
    // 각 상품에 대해 개별적으로 insert
    sql_query($sql, false);
 
    // 장바구니에 주문 번호 업데이트
    $update_sql = "UPDATE {$g5['g5_shop_cart_table']}
                   SET od_id = '$od_id',
                          ct_status = '주문'
                   WHERE ct_id = '{$row['ct_id']}'";
    sql_query($update_sql);
}

PG 측에 실결제 시에 $tmp_id_for_pg 배열 사용, 원하는 order id 전송

 

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 604
© SIRSOFT
현재 페이지 제일 처음으로