KCP 신용카드 부분취소 모듈의 8078 포맷에러 해결방법
참.. 이런 경우는 또 처음이라 뭐라 할 말이 없다. 이것때문에 기술지원팀과 몇번에 걸쳐 통화를 했지만 해결의 실마리가 보이지 않았다. 그런데 왜 그런 생각을 했는지는 모르겠는데.. 금액의 데이터 타입을 integer 에서 string로 바꿔주니까 거짓말처럼 오류가 해결이 됐다. 이 문제는 항상 생기는 것은 아니고 부분취소 모듈에서 복합과세를 사용할 때가 문제가 되는 것 같다. 과세금액과 비과세금액이 있을 때 비과세금액만을 부분 취소하려면 과세금액을 0으로 설정해야 한다. 그리고 내가 하려고 했던 것은 과세금액을 post로 넘겨받아서 공급원가와 vat 계산해서 취소처리를 요청하는 것이다.
KCP에서 제공하는 모듈의 샘플 페이지에 보면 아래와 같은 코드가 있다.
$c_PayPlus->mf_set_modx_data( "mod_tax_mny" , $mod_tax_mny ); // 공급가 부분 취소 요청 금액
$c_PayPlus->mf_set_modx_data( "mod_vat_mny" , $mod_vat_mny ); // 부과세 부분 취소 요청 금액
$c_PayPlus->mf_set_modx_data( "mod_free_mny" , $mod_free_mny ); // 비관세 부분 취소 요청 금액
이 부분에서 $mod_tax_mny나 $mod_vat_mny 값은 계산을 거치게 되면 타입이 integer 이다. 이런 상태로 취소요청을 보내게 되면 8078 포맷에러가 나게 된다. 제공되는 샘플페이지에서 위 코드의 변수값 대신 직접 숫자를 써넣으면 같은 에러가 발생한다. 비과세 금액이 0이 되면 8079 포맷에러가 발생하는 것 같다. 즉 변수값이 0인데 그것의 타입이 integer 이면 포맷에러가 발생하는 것으로 생각된다.
그리고 아래는 mod_tax_mny와 mod_vat_mny를 계산했던 코드이다. $tot_mny는 과세 총금액이다.
$mod_tax_mny = round($tot_mny / 1.1);
$mod_vat_mny = $tot_mny - $mod_tax_mny;
그럼 이 문제를 해결하기 위해서는 어떻게 해야할까? KCP측에서 모듈을 수정해주면 좋겠지만 그것이 어려울 때는 일단 아래와 같이 코드를 변경하면 오류가 발생하지 않고 복합과세의 부분취소가 가능해진다.
$c_PayPlus->mf_set_modx_data( "mod_tax_mny" , strval($mod_tax_mny) ); // 공급가 부분 취소 요청 금액
$c_PayPlus->mf_set_modx_data( "mod_vat_mny" , strval($mod_vat_mny) ); // 부과세 부분 취소 요청 금액
$c_PayPlus->mf_set_modx_data( "mod_free_mny" , strval($mod_free_mny) ); // 비관세 부분 취소 요청 금액
이 내용은 KCP 기술지원팀에 연락을 해서 확인해달라고 했는데 어떻게 될지는 모르겠다. 코드 수정해서 사용하라면 그렇게 해야할테니 말이다.