DB의 주문번호와 나이스페이의 실제 주문번호가 다르게 적용됩니다.
본문
신용카드 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 전송
!-->
답변을 작성하시기 전에 로그인 해주세요.