DB의 주문번호와 나이스페이의 실제 주문번호가 다르게 적용됩니다. 채택완료
신용카드 PG 결제사로 나이스페이를 사용하고 있습니다.
신용카드 결제 시 주문번호가 g5_shop_order와 g5_shop_cart에 잘저장됩니다.
그리고 영카트의 신용카드 취소 기능을 통해 결제취소를 하려고 할 때 부분취소가 아닌 전체 취소를 하라는 오류 메시지가 나옵니다.
그리고 나이스페이 결제사에서 직접 결제내역을 확인해보니 DB에 저장한 주문번호(od_id_와 결제사에 등록되어있는 주문번호가 다르다는것을 확인했습니다.
(DB 주문번호: 2024111810012865, 실제 주문번호: 2024111810002673)
제가 예전에 결제 관련 코드를 수정을 했었는데 당시에는 테스트에 문제가 없었습니다.
아래는 제가 수정했던 소스코드의 일부입니다. (여러 종류의 상품 주문 시 개별 주문건으로 분리하는 코드)
</p>
<p>// orderformupdate.php</p>
<p>// 각각의 상품별로 주문서를 따로 저장해야함</p>
<p>// shop_cart 테이블의 담긴 상품정보들을 가져오기</p>
<p>$sql = "SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id='$tmp_cart_id'";</p>
<p>$result = sql_query($sql);</p>
<p> </p>
<p>// 장바구니에 담긴 각 상품에 대해 개별 주문을 생성</p>
<p>for ($i = 0; $row = sql_fetch_array($result); $i++) {</p>
<p> // 각각의 상품마다 주문 번호를 생성</p>
<p> $od_id = get_uniqid();</p>
<p> </p>
<p> // 초기화하여 각 상품마다 적절히 처리되도록 함</p>
<p> $current_dday = $dday;</p>
<p> </p>
<p> // 주문서에 입력</p>
<p> $sql = "INSERT INTO {$g5['g5_shop_order_table']}</p>
<p> SET od_id = '$od_id',</p>
<p> mb_id = '{$member['mb_id']}',</p>
<p> od_pwd = '$od_pwd',</p>
<p> od_name = '$od_name',</p>
<p> od_email = '$od_email',</p>
<p> od_tel = '$od_tel',</p>
<p> od_hp = '$od_hp',</p>
<p> od_zip1 = '$od_zip1',</p>
<p> od_zip2 = '$od_zip2',</p>
<p> od_addr1 = '$od_addr1',</p>
<p> od_addr2 = '$od_addr2',</p>
<p> od_addr3 = '$od_addr3',</p>
<p> od_addr_jibeon = '$od_addr_jibeon',</p>
<p> od_b_name = '$od_b_name',</p>
<p> od_b_tel = '$od_b_tel',</p>
<p> od_b_hp = '$od_b_hp',</p>
<p> od_b_zip1 = '$od_b_zip1',</p>
<p> od_b_zip2 = '$od_b_zip2',</p>
<p> od_b_addr1 = '$od_b_addr1',</p>
<p> od_b_addr2 = '$od_b_addr2',</p>
<p> od_b_addr3 = '$od_b_addr3',</p>
<p> od_b_addr_jibeon = '$od_b_addr_jibeon',</p>
<p> od_deposit_name = '$od_deposit_name',</p>
<p> od_memo = '$od_memo',</p>
<p> od_cart_count = 1, </p>
<p> od_cart_price = '" . ($row['ct_price'] * $row['ct_qty']) . "', </p>
<p> od_cart_coupon = '{$row['ct_coupon']}', </p>
<p> od_send_cost = '$i_send_cost',</p>
<p> od_send_coupon = '$tot_sc_cp_price',</p>
<p> od_send_cost2 = '$i_send_cost2',</p>
<p> od_coupon = '$tot_od_cp_price',</p>
<p> od_receipt_price = '" . ($row['ct_price'] * $row['ct_qty']) . "', </p>
<p> od_receipt_point = '$od_receipt_point',</p>
<p> od_bank_account = '$od_bank_account',</p>
<p> od_receipt_time = '$od_receipt_time',</p>
<p> od_misu = '$od_misu',</p>
<p> od_pg = '$od_pg',</p>
<p> od_tno = '$od_tno',</p>
<p> od_app_no = '$od_app_no',</p>
<p> od_escrow = '$od_escrow',</p>
<p> od_tax_flag = '$od_tax_flag',</p>
<p> od_tax_mny = '$od_tax_mny',</p>
<p> od_vat_mny = '$od_vat_mny',</p>
<p> od_free_mny = '$od_free_mny',</p>
<p> od_status = '$od_status',</p>
<p> od_shop_memo = '',</p>
<p> od_hope_date = '$od_hope_date',</p>
<p> od_time = '".G5_TIME_YMDHIS."',</p>
<p> od_ip = '$REMOTE_ADDR',</p>
<p> od_settle_case = '$od_settle_case',</p>
<p> od_other_pay_type = '$od_other_pay_type',</p>
<p> od_test = '{$default['de_card_test']}',</p>
<p> it_names = '{$row['it_name']}',</p>
<p> dday = '$current_dday'";</p>
<p> </p>
<p> // 각 상품에 대해 개별적으로 insert</p>
<p> sql_query($sql, false);</p>
<p> </p>
<p> // 장바구니에 주문 번호 업데이트</p>
<p> $update_sql = "UPDATE {$g5['g5_shop_cart_table']}</p>
<p> SET od_id = '$od_id',</p>
<p> ct_status = '주문'</p>
<p> WHERE ct_id = '{$row['ct_id']}'";</p>
<p> sql_query($update_sql);</p>
<p>}</p>
<p> </p>
<p>
혹시 위 코드에서 각 상품에 대한 주문번호(od_id)를 새로 생성하는 부분때문에 이러한 문제가 생기는 걸까요?
그렇다면 어떤 식으로 수정하면 괜찮을지 알려주시면 감사하겠습니다!
답변 2개
// 각각의 상품마다 주문 번호를 생성
$od_id = get_uniqid();
새로 생성을 하시네요. 그러니 달라질수 밖에 없을거 같습니다. 해당을 하기 전에 기존값을 다른 필드에 저장을 하시면 될 거 같습니다.
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>// orderformupdate.php</p>
<p>// 각각의 상품별로 주문서를 따로 저장해야함</p>
<p>// shop_cart 테이블의 담긴 상품정보들을 가져오기</p>
<p>$sql = "SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id='$tmp_cart_id'";</p>
<p>$result = sql_query($sql);</p>
<p> </p>
<p>$tmp_id_for_pg = array(); //초기화</p>
<p> </p>
<p>// 장바구니에 담긴 각 상품에 대해 개별 주문을 생성</p>
<p>for ($i = 0; $row = sql_fetch_array($result); $i++) {</p>
<p> // 각각의 상품마다 주문 번호를 생성</p>
<p> $od_id = get_uniqid();</p>
<p> </p>
<p> $tmp_id_for_pg[$i] = $od_id; //배열저장</p>
<p> </p>
<p> // 초기화하여 각 상품마다 적절히 처리되도록 함</p>
<p> $current_dday = $dday;</p>
<p> </p>
<p> // 주문서에 입력</p>
<p> $sql = "INSERT INTO {$g5['g5_shop_order_table']}</p>
<p> SET od_id = '$od_id',</p>
<p> mb_id = '{$member['mb_id']}',</p>
<p> od_pwd = '$od_pwd',</p>
<p> od_name = '$od_name',</p>
<p> od_email = '$od_email',</p>
<p> od_tel = '$od_tel',</p>
<p> od_hp = '$od_hp',</p>
<p> od_zip1 = '$od_zip1',</p>
<p> od_zip2 = '$od_zip2',</p>
<p> od_addr1 = '$od_addr1',</p>
<p> od_addr2 = '$od_addr2',</p>
<p> od_addr3 = '$od_addr3',</p>
<p> od_addr_jibeon = '$od_addr_jibeon',</p>
<p> od_b_name = '$od_b_name',</p>
<p> od_b_tel = '$od_b_tel',</p>
<p> od_b_hp = '$od_b_hp',</p>
<p> od_b_zip1 = '$od_b_zip1',</p>
<p> od_b_zip2 = '$od_b_zip2',</p>
<p> od_b_addr1 = '$od_b_addr1',</p>
<p> od_b_addr2 = '$od_b_addr2',</p>
<p> od_b_addr3 = '$od_b_addr3',</p>
<p> od_b_addr_jibeon = '$od_b_addr_jibeon',</p>
<p> od_deposit_name = '$od_deposit_name',</p>
<p> od_memo = '$od_memo',</p>
<p> od_cart_count = 1, </p>
<p> od_cart_price = '" . ($row['ct_price'] * $row['ct_qty']) . "', </p>
<p> od_cart_coupon = '{$row['ct_coupon']}', </p>
<p> od_send_cost = '$i_send_cost',</p>
<p> od_send_coupon = '$tot_sc_cp_price',</p>
<p> od_send_cost2 = '$i_send_cost2',</p>
<p> od_coupon = '$tot_od_cp_price',</p>
<p> od_receipt_price = '" . ($row['ct_price'] * $row['ct_qty']) . "', </p>
<p> od_receipt_point = '$od_receipt_point',</p>
<p> od_bank_account = '$od_bank_account',</p>
<p> od_receipt_time = '$od_receipt_time',</p>
<p> od_misu = '$od_misu',</p>
<p> od_pg = '$od_pg',</p>
<p> od_tno = '$od_tno',</p>
<p> od_app_no = '$od_app_no',</p>
<p> od_escrow = '$od_escrow',</p>
<p> od_tax_flag = '$od_tax_flag',</p>
<p> od_tax_mny = '$od_tax_mny',</p>
<p> od_vat_mny = '$od_vat_mny',</p>
<p> od_free_mny = '$od_free_mny',</p>
<p> od_status = '$od_status',</p>
<p> od_shop_memo = '',</p>
<p> od_hope_date = '$od_hope_date',</p>
<p> od_time = '".G5_TIME_YMDHIS."',</p>
<p> od_ip = '$REMOTE_ADDR',</p>
<p> od_settle_case = '$od_settle_case',</p>
<p> od_other_pay_type = '$od_other_pay_type',</p>
<p> od_test = '{$default['de_card_test']}',</p>
<p> it_names = '{$row['it_name']}',</p>
<p> dday = '$current_dday'";</p>
<p> </p>
<p> // 각 상품에 대해 개별적으로 insert</p>
<p> sql_query($sql, false);</p>
<p> </p>
<p> // 장바구니에 주문 번호 업데이트</p>
<p> $update_sql = "UPDATE {$g5['g5_shop_cart_table']}</p>
<p> SET od_id = '$od_id',</p>
<p> ct_status = '주문'</p>
<p> WHERE ct_id = '{$row['ct_id']}'";</p>
<p> sql_query($update_sql);</p>
<p>}</p>
<p>
PG 측에 실결제 시에 $tmp_id_for_pg 배열 사용, 원하는 order id 전송
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인