New Function #79
Updated by Deca Park over 1 year ago
<p>1.<strong>[Scheduler] VBank Payment Expire Scheduler</strong></p> <p style="margin-left: 40px;">1.reference<br /> - non-violent #9874-note#18<br /> 2.crontab<br /> - execute per 1 hour<br /> 3.logic<br /> 1) SELECT st_order_payment with payment_status = 'PS20' (wait deposit)<br /> a) get va_due_date<br /> b) if current datetime > va_due_date<br /> b-1) UPDATE st_order_payment<br /> - payment_status = 'PS22' (deposit expire)<br /> - mod_date / mod_user_no = NULL<br /> * define fee_payment_status value as constant</p> <p>2<strong>.[API] VBank deposit complete process (가상계좌 웹훅)</strong></p> <p style="margin-left: 40px;">1.document<br /> https://docs.tosspayments.com/guides/learn/virtual-account-webhook<br /> <br /> 2.make <strong>Webhook endpoint</strong> to receive DEPOSIT_CALLBACK event payload from PG<br /> 1) URL: <strong>POST {domain}/hook</strong><br /> - permitAll (don't check authentication)<br /> <br /> 3.DEPOSIT_CALLBACK Webhook event data (JSON) from PG<br /> [example]<br /> {<br /> createdAt: '2023-05-23T14:42:26.000000',<br /> secret: 'ps_Z1aOwX7K8mYpalqAGRwj8yQxzvNP',<br /> orderId: '3f9c765d-60ed-4735-8af5-ab9d1142a3e8',<br /> status: 'DONE',<br /> transactionKey: '83B3CD71DF004878066FEDCB7C21E775'<br /> }<br /> <br /> 4.process Logic<br /> 1) SELECT DB (st_order_payment)<br /> condition: order_no = {orderId param}<br /> 2) <strong>if No data OR {pg_secret} != {secret param}, SKIP<br /> - response status(200) ok</strong><br /> 3) if {pg_secret} = {secret param}<br /> a) if {status param} =<strong> 'DONE'</strong><br /> UPDATE DB (st_order_payment)<br /> - payment_status = <strong>'PS21'</strong>, va_proc_date = {current date}<br /> b) if {status param} =<strong> 'WAITING_FOR_DEPOSIT'</strong><br /> UPDATE DB (st_order_payment)<br /> - payment_status =<strong> 'PS23'</strong>, va_proc_date = {current date}<br /> 4)<strong> response status(200) ok</strong></p> <p>3.<strong>[Common] PG payment cancellation (결제취소) function</strong></p> <ul> <li><strong>it's called on API and ADMIN both</strong></li> </ul> <p style="margin-left: 40px;">1.parameters<br /> 1) order no<br /> 2) user_seq<br /> 3) cancel reason<br /> <br /> 2.Process<br /> 0) SELECT DB (st_order_payment) (with order_no = {order no param})<br /> a)<strong> if No data OR payment_key value is NUL(empty), SKIP</strong><br /> b) if not, continue<br /> 1) call <strong>PG payment cancel API</strong><br /> a) document<br /> - https://docs.tosspayments.com/reference#%EA%B2%B0%EC%A0%9C-%EC%B7%A8%EC%86%8C<br /> b) URL: POST /v1/payment/{paymentKey}/cancel<br /> - {paymentKey} : st_order_payment.payment_key<br /> c) header<br /> - Authorization: {same with pg confirm API}<br /> d) RequestBody<br /> d-1) cancelReason : {cancel reason param}<br /> d-2) cancelAmount : don't set because cancel amount is total amount<br /> d-3) refundReceiveAccount object<br /> - <strong>if {st_order_payment.payment_method} = 'PV02' (VBank), set (it not, don't set)</strong><br /> d-3-1) bank : {st_order_payment.refund_bank_code}<br /> d-3-2) accountNumber : {refund_account_number}<br /> d-3-3) holderName : {refund_holder_name}<br /> <br /> [example]<br /> curl --request POST \<br /> --url https://api.tosspayments.com/v1/payments/5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6/cancel \<br /> --header 'Authorization: Basic dGVzdF9za196WExrS0V5cE5BcldtbzUwblgzbG1lYXhZRzVSOg==' \<br /> --header 'Content-Type: application/json' \<br /> --header 'Idempotency-Key: e9b779ed-3541-4b6e-aa95-88f710689a68' \<br /> --data '{"cancelReason":"고객 변심"}'<br /> <br /> 2) if cancel API is success<br /> a) UPDATE st_order_payment<br /> condition: order_no = {order_no param}<br /> set :<br /> payment_status = 'PS11'<br /> cancel_amount = {payment_amount}, cancel_reason = {decided by process type}<br /> cancel_proc_date = {current date}, cancel_user_seq = {decided by process type}<br /> <br /> 3) if cancel API is fail<br /> a) return PG error_code / error_msg without DB UPDATE</p> <p>4.<strong>[API] 스마트오더 주문 취소 (store order cancel) - Change</strong></p> <p style="margin-left: 40px;">1.URL: POST /api/store_order_cancel<br /> 2.<strong>Response (Add)</strong><br 2.process logic<br /> 1) order_no : {order_no}<br UPDATE DB (st_order)<br /> 2) pg_error_code / pg_error_msg : if PG cancel API is fail, set it.<br - same with previous definition<br /> <br /> 3.process logic<br /> 1) 2) <strong>call Common PG payment cancellation (결제취소) function </strong><br /> a) parameter<br /> - order no : {order_no param}<br /> - user_seq : {user_seq of id param}<br /> - cancel reason : {code name of cancel_reason_type param - grp_code: SD}<br /> 3.<strong>Response (Add)</strong><br /> <span style="color:#e74c3c;">2) if PG cancel API is fail<br 1) order_no : {order_no}<br /> - response error (500) with order_no / 2) pg_error_code / pg_error_msg<br /> 3) pg_error_msg : if PG cancel API is success<br /> a) UPDATE DB (st_order)<br /> - same with previous definition</span></p> fail, set it</p>