Advertisement
thongthongthong

payment error

Mar 31st, 2023
4,553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 17.86 KB | None | 0 0
  1. --create table pmt_daily_success_rate_full as
  2. WITH
  3. payment_raw AS
  4. (
  5.     SELECT  payment_id
  6.             ,channel_ref2
  7.             ,transaction_id
  8.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.params.checkout.checkout_id') AS checkout_id
  9.             ,DATE(from_unixtime(ctime-3600)) AS payment_date
  10.             ,amount/100000 AS checkout_amount
  11.             ,channel_id
  12.             ,CASE channel_id WHEN 5002601 THEN 'Shopee Pay Later' WHEN 5000101 THEN 'Cybersource Installment' WHEN 5001300 THEN 'Shopee Balance' WHEN 5001800 THEN 'ShopeePay Wallet' WHEN 5002900 THEN 'ShopeePay GIRO' WHEN 5000102 THEN 'Cybersource' WHEN 5006400 THEN 'WechatPay' WHEN 5006400 THEN 'WechatPay' WHEN 5002800 THEN 'Online Banking' WHEN 5001600 THEN 'Payoneer VN' WHEN 5003200 THEN 'IS PAYOUT' END spm_channel_name
  13.             --  else cast(channel_id as string)
  14.             ,CASE   WHEN STATUS = 0 THEN 'INITIAL'
  15.                     WHEN STATUS = 2 THEN 'PAYMENT_INIT'
  16.                     WHEN STATUS = 4 THEN 'AUTHORIZE'
  17.                     WHEN STATUS = 6 THEN 'USER_PROCESSING'
  18.                     WHEN STATUS = 8 THEN 'PENDING'
  19.                     WHEN STATUS = 9 THEN 'BINDING'
  20.                     WHEN STATUS = 10 THEN 'BLOCKED'
  21.                     WHEN STATUS = 14 THEN 'RECONCILING'
  22.                     WHEN STATUS = 16 THEN 'LOCAL_OPS_PROCESSING'
  23.                     WHEN STATUS = 17 THEN 'SSG_BLOCKED'
  24.                     WHEN STATUS = 20 THEN 'SUCCESS'
  25.                     WHEN STATUS = 22 THEN 'FAILED'
  26.                     WHEN STATUS = 24 THEN 'LATE_SUCCESS'
  27.                     WHEN STATUS = 26 THEN 'SUCCESS_BUT_REJECTED_BY_SERVER'
  28.                     WHEN STATUS = 40 THEN 'OVERPAID'
  29.                     WHEN STATUS = 50 THEN 'CANCELLED'
  30.                     WHEN STATUS = 51 THEN 'CANCEL_READY'
  31.                     WHEN STATUS = 52 THEN 'VOID READY'
  32.                     WHEN STATUS = 54 THEN 'EXPIRED'
  33.                     WHEN STATUS = 100 THEN 'FRAUD'
  34.                     WHEN STATUS = 999 THEN 'REJECTED'
  35.                     ELSE CAST(STATUS AS string)
  36.              END AS payment_status
  37.             -- CARD NUMBER --
  38.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.cybs_response.req_card_number') AS card_number_1
  39.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.channel_item.card_number') AS card_number_2
  40.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.card_number') AS card_number_3
  41.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.params.channel_item_option_info.credit_card_data.card_number') AS card_number_4
  42.             -- BANK NAME
  43.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.params.channel_item_option_info.credit_card_data.bank_name') AS bank_name_1
  44.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.params.channel_item_option_info.option_info') AS option_info
  45.             -- CYBS REASON CODE & MESSAGE
  46.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.commit_log.reason_code_text') AS payment_responsetext1
  47.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.notify_log.reason_code_text') AS payment_responsetext2
  48.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.cybs_response.message') AS cybs_message
  49.             -- AIRPAY ERROR & MESSAGE --
  50.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.charge_response.errorInformation.reason') AS error_reason1
  51.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.charge_response.reason') AS error_reason2
  52.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.update_response.reason_code') AS error_reason3
  53.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.fail_reason') AS error_reason4
  54.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.pay_result.fail_reason') AS error_reason5
  55.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.otp_result.fail_reason') AS error_reason6
  56.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.pay_result.error') AS error_reason7
  57.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.otp_required_pay_result.error') AS error_reason8
  58.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.otp_require_redirect_pay_result.error') AS error_reason9
  59.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.pay_result.result') AS airpay_error1
  60.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.otp_required_pay_result.result') AS airpay_error2
  61.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.otp_require_redirect_pay_result.result') AS airpay_error3
  62.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.charge_response.errorInformation.message') AS error_message1
  63.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.charge_response.message') AS error_message2
  64.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.update_response.reason_code_text') AS error_message3
  65.             -- VN Airpay iBanking ERROR --
  66.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.notify_request_params.message') AS ibank_error_message1
  67.             ,get_json_object(decode(extra_data, 'UTF-8'), '$.check_txn_response.message') AS ibank_error_message2
  68.     FROM    shopeepay.shopee_payment_module_payment_vn_db__payment_v2_tab__vn_continuous_s0_live p
  69.     WHERE   1 = 1
  70.       AND   payment_type = 4
  71.       AND   ctime >= CAST(to_unix_timestamp(date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)) AS BIGINT) + 3600
  72.       AND   channel_id IN (5001800, 5002900, 5002601, 5011000)
  73. )
  74. --select * from payment_raw;
  75. -- GIRO ERROR
  76. ,
  77. --with
  78. giro_error AS
  79. (
  80.     SELECT  id
  81.             ,phone_number
  82.             ,reply_error_code
  83.             ,response_code
  84.     FROM    shopeepay.giro_bank__bank_subscribe_tab__vn_continuous_s0_live
  85.     WHERE   1 = 1
  86.       AND   created_at >= date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)
  87. )
  88. ,giro_bank AS
  89. (
  90.     SELECT  g.id
  91.             ,g.phone_number
  92.             ,g.client_txn_id    --channel_ref2
  93.             ,REPLACE(split(g.description, '-', 2)[1], substr(split(description, '-', 2)[1], -13), '') AS bank_name_4
  94.             ,e.reply_error_code
  95.             ,e.response_code
  96.     FROM    shopeepay.giro_bank__giro_txn_tab__vn_continuous_s0_live g
  97.     LEFT JOIN    giro_error e
  98.     ON      g.id = e.id
  99.      -- and   g.phone_number = e.phone_number
  100.       AND   g.created_at >= date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)
  101.       AND   (
  102.                     substr(g.description, 1, 6) = 'AirPay'
  103.                 OR  substr(g.description, 1, 9) = 'ShopeePay'
  104.             )
  105.     WHERE   1 = 1
  106.       AND   created_at >= date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)
  107.       AND   g.created_at >= date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)
  108.       AND   (
  109.                     substr(g.description, 1, 6) = 'AirPay'
  110.                 OR  substr(g.description, 1, 9) = 'ShopeePay'
  111.             )
  112. )
  113. --select * from giro_bank;
  114. ,bank_option AS     -- for bank name
  115. (
  116.     SELECT  DISTINCT option_id
  117.             ,name
  118.     FROM    shopeepay.shopee_payment_module_vn_db__payment_channel_option_tab__vn_daily_s0_live
  119. )
  120. ,provision AS
  121. (
  122.     SELECT  entity_id
  123.             ,transaction_id
  124.             ,CASE   WHEN channel_id = 5005601 THEN 'Foody Order'
  125.                     WHEN channel_id = 5000301 THEN 'Digital Product'
  126.                     WHEN channel_id = 5000101 THEN 'Shopee Checkout'
  127.                     WHEN channel_id = 5008101 THEN 'Seller Center SVS Order'
  128.                     WHEN channel_id = 5006601 THEN 'Shopee Play Order'
  129.                     WHEN channel_id = 500740131 THEN 'Insurance General'
  130.              END AS provision
  131.     FROM    shopeepay.shopee_payment_module_provision_vn_db__provision_v2_tab__vn_continuous_s0_live
  132.     WHERE   1 = 1
  133.       AND   ctime >= CAST(to_unix_timestamp(date_trunc('month', CURRENT_DATE - INTERVAL '120' DAY)) AS BIGINT) + 3600
  134.       AND   channel_id IN (5000101) -- MKP only
  135. )
  136. ,bin_map AS
  137. (
  138.     SELECT  DISTINCT *
  139.     FROM    vnbi_tracking.shopee_payment_module_bin_bank_card_type
  140. )
  141. ,payment AS
  142. (
  143.     SELECT  s.payment_id
  144.             ,s.spm_channel_name
  145.             ,s.transaction_id
  146.             ,s.checkout_id
  147.             ,v.entity_id
  148.             ,s.payment_date
  149.             ,s.payment_status
  150.             ,s.checkout_amount
  151.             ,v.provision
  152.             ,COALESCE(card_number_1, card_number_2, card_number_3, card_number_4) AS card_number
  153.             ,substr(COALESCE(card_number_1, card_number_2, card_number_3, card_number_4), 1, 6) AS bin
  154.             ,COALESCE(g.bank_name_4, op.name, b.bank_name_2, s.bank_name_1) AS bank_name
  155.             ,CASE b.brand WHEN 'NONE' THEN 'VISA' ELSE b.brand END brand
  156.             -- CYBERSOURCE ERROR
  157.             ,COALESCE(s.payment_responsetext1, s.payment_responsetext2) AS payment_responsetext
  158.             ,s.cybs_message
  159.             -- SHOPEEPAY ERROR
  160.             ,COALESCE(error_reason1, error_reason2, error_reason3, error_reason4, error_reason5, error_reason6, error_reason7, error_reason8, error_reason9) AS error_reason
  161.             ,COALESCE(error_message1, error_message2, error_message3) AS error_message
  162.             ,g.reply_error_code
  163.             ,g.response_code
  164.     FROM    payment_raw s
  165.     JOIN    provision v
  166.     ON      s.transaction_id = v.transaction_id
  167.     LEFT JOIN bank_option op
  168.     ON      s.option_info = CAST(op.option_id AS string)
  169.     LEFT JOIN bin_map b
  170.     ON      substr(COALESCE(card_number_1, card_number_2, card_number_3, card_number_4), 1, 6) = b.bin
  171.     LEFT JOIN giro_bank g
  172.     ON      s.channel_ref2 = CAST(g.client_txn_id AS string)
  173.       AND   s.channel_id IN (5002900, 5001800)
  174.     WHERE   1 = 1
  175. )
  176. ,joined AS
  177. (
  178.     SELECT  p.payment_id
  179.             ,p.provision
  180.             ,p.spm_channel_name
  181.             ,p.transaction_id
  182.             ,p.checkout_id
  183.             --  ,o.tenor
  184.             ,p.payment_date
  185.             ,p.payment_status
  186.             ,p.checkout_amount
  187.             ,p.bin
  188.             ,p.brand
  189.             --  ,p.card_number
  190.             --  ,p.expiry_date
  191.             ,CASE   WHEN p.bank_name LIKE '%INDOVINA%' THEN 'Indovina Bank'
  192.                     WHEN p.bank_name IN ('Ngân hàng TNHH Indovina - Indovina Bank Limited') THEN 'Indovina Bank'
  193.                     WHEN p.bank_name LIKE '%AN BINH C%' THEN 'ABBank'
  194.                     WHEN p.bank_name LIKE '%ACB%' THEN 'ACB'
  195.                     WHEN p.bank_name LIKE '%VIETNAM BANK FOR AGRICULTURE%' THEN 'AgriBank'
  196.                     WHEN p.bank_name LIKE '%BIDV%' THEN 'BIDV'
  197.                     WHEN p.bank_name LIKE '%ĐẦU TƯ VÀ PHÁT TRIỂN VIỆT NAM%' THEN 'BIDV'
  198.                     WHEN p.bank_name LIKE '%CIMB%' THEN 'CIMB'
  199.                     WHEN p.bank_name LIKE '%CITIBANK%' THEN 'Citibank'
  200.                     WHEN p.bank_name IN ('DONGA COMMERCIAL JSB') THEN 'DongABank'
  201.                     WHEN p.bank_name LIKE '%VIETNAM EXPORT IMPORT%' THEN 'EximBank'
  202.                     WHEN p.bank_name LIKE 'FE%CREDIT%' THEN 'FE Credit'
  203.                     WHEN p.bank_name LIKE 'HO CHI MINH CITY DEVELOPMENT%' THEN 'HDBank'
  204.                     WHEN p.bank_name IN ('Ho Chi Minh City Development Commercial Joint Stock Bank', 'Ho Chi Minh City Development Joint Stock Commercial Bank') THEN 'HDBank'
  205.                     WHEN p.bank_name LIKE 'HDSAISON' THEN 'HDSaison'
  206.                     WHEN p.bank_name LIKE 'HOME CREDIT%' THEN 'Home Credit'
  207.                     WHEN p.bank_name IN ('Home Credit Vietnam Finance Company Limited') THEN 'Home Credit'
  208.                     WHEN p.bank_name LIKE 'HONG LEONG BANK%' THEN 'HONG LEONG '
  209.                     WHEN p.bank_name LIKE '%HONGKONG AND SHANGHAI BANKING%' THEN 'HSBC'
  210.                     WHEN p.bank_name LIKE 'HSBC%' THEN 'HSBC'
  211.                     WHEN p.bank_name LIKE 'KIEN LONG COMMERCIAL%' THEN 'Kien Long Bank'
  212.                     WHEN p.bank_name LIKE 'KIEN LONG%' THEN 'Kien Long Bank'
  213.                     WHEN p.bank_name IN ('Kien Long Commercial Joint Stock Bank') THEN 'Kien Long Bank'
  214.                     WHEN p.bank_name LIKE 'MILITARY COMMERCIAL%' THEN 'MB Bank'
  215.                     WHEN p.bank_name LIKE 'MS BANK%' THEN 'MSB'
  216.                     WHEN p.bank_name LIKE 'MSB%' THEN 'MSB'
  217.                     WHEN p.bank_name LIKE 'VIETNAM MARITIME COMMERCIAL%' THEN 'MSB'
  218.                     WHEN p.bank_name LIKE 'NAM%ABANK%' THEN 'NamABank'
  219.                     WHEN p.bank_name LIKE 'NAM%Á%' THEN 'NamABank'
  220.                     WHEN p.bank_name IN ('National Citizen Commercial Joint Stock Bank') THEN 'NCB'
  221.                     WHEN p.bank_name IN ('Ocean Commercial Joint Stock Bank') THEN 'OceanBank'
  222.                     WHEN p.bank_name IN ('Orient Commercial Joint Stock Bank') THEN 'OCB'
  223.                     WHEN p.bank_name LIKE '%PETROLIMEX%' THEN 'PGBank'
  224.                     WHEN p.bank_name IN ('NH TMCP Xăng dầu Petrolimex - Petrolimex Group Commercial Joint Stock Bank (PGB)') THEN 'PGBank'
  225.                     WHEN p.bank_name LIKE ('%Dai%Chung%') THEN 'PVComBank'
  226.                     WHEN p.bank_name LIKE '%SAIGON THUONG TIN%' THEN 'Sacombank'
  227.                     WHEN p.bank_name LIKE '%SACOMBANK%' THEN 'Sacombank'
  228.                     WHEN p.bank_name LIKE 'SCB%' THEN 'SCB'
  229.                     WHEN p.bank_name LIKE '%SOUTHEAST ASIA COMMERCIAL%BANK%' THEN 'SeABank'
  230.                     WHEN p.bank_name LIKE '%SEA%BANK%' THEN 'SeABank'
  231.                     WHEN p.bank_name LIKE 'SAIGON HANOI COMMERCIAL%BANK%' THEN 'SHB'
  232.                     WHEN p.bank_name IN ('Saigon Hanoi Commercial Joint Stock Bank') THEN 'SHB'
  233.                     WHEN p.bank_name LIKE 'SHINHAN%BANK%' THEN 'ShinhanBank'
  234.                     WHEN p.bank_name IN ('Shinhan Bank Vietnam', 'ShinhanBank') THEN 'ShinhanBank'
  235.                     WHEN p.bank_name LIKE 'STANDARD%CHARTERED%' THEN 'Standard Chartered'
  236.                     WHEN p.bank_name LIKE 'VIETNAM%TECHNOLOGICAL AND COMMERCIAL%' THEN 'Techcombank'
  237.                     WHEN p.bank_name LIKE 'TIENPHONG%BANK%' THEN 'TPBank'
  238.                     WHEN p.bank_name LIKE 'TPBANK%' THEN 'TPBank'
  239.                     WHEN p.bank_name IN ('TienPhong Commercial Joint Stock Bank') THEN 'TPBank'
  240.                     WHEN p.bank_name LIKE 'UNITED OVERSEAS BANK%' THEN 'UOB'
  241.                     WHEN p.bank_name LIKE 'VIB%' THEN 'VIB'
  242.                     WHEN p.bank_name LIKE '%VIETNAM INTERNATIONAL COMMERCIAL JOINT STOCK BANK%' THEN 'VIB'
  243.                     WHEN p.bank_name LIKE 'VIETBANK%' THEN 'VietBank'
  244.                     WHEN p.bank_name LIKE 'VIETNAM THUONG TIN%' THEN 'VietBank'
  245.                     WHEN p.bank_name IN ('Vietnam Thuong Tin Commercial Joint Stock Bank') THEN 'VietBank'
  246.                     WHEN p.bank_name IN ('VIETNAM-ASIA COMMERCIAL JSB') THEN 'VietABank'
  247.                     WHEN p.bank_name LIKE 'VIET%CAPITAL%BANK%' THEN 'VietCapital'
  248.                     WHEN p.bank_name IN ('Viet Capital Bank - NHTMCP Ban Viet') THEN 'VietCapital'
  249.                     WHEN p.bank_name LIKE 'BANK%FOREIGN TRADE OF VIETNAM%' THEN 'Vietcombank'
  250.                     WHEN p.bank_name LIKE '%VIETCOMBANK%' THEN 'Vietcombank'
  251.                     WHEN p.bank_name LIKE 'VIETNAM%INDUSTRY AND TRADE%' THEN 'VietinBank'
  252.                     WHEN p.bank_name IN ('INDUSTRIAL AND COMMERCIAL BANK OF VIETNAM') THEN 'VietinBank'
  253.                     WHEN p.bank_name LIKE 'VPBANK%' THEN 'VPBank'
  254.                     WHEN p.bank_name LIKE 'VP%BANK%' THEN 'VPBank'
  255.                     WHEN p.bank_name LIKE 'VIETNAM%RUSSIA%' THEN 'VRB'
  256.                     WHEN p.bank_name IN ('Vietnam - Russia Joint Venture Bank') THEN 'VRB'
  257.                     WHEN p.bank_name IN ('Lien Viet Post Joint Stock Commercial Bank') THEN 'Lien Viet Post Bank' ELSE p.bank_name
  258.              END bank_name
  259.             ,p.payment_responsetext
  260.             ,p.cybs_message
  261.             ,COALESCE(p.cybs_message, p.payment_responsetext, p.error_reason, p.error_message, p.reply_error_code, p.response_code) AS fail_reason
  262.     FROM    payment p
  263.     WHERE   1 = 1
  264. )
  265. ,final AS
  266. (
  267.     SELECT  *
  268.             ,CASE   WHEN fail_reason LIKE 'limit' THEN 'Exceed limit'
  269.                     WHEN fail_reason LIKE 'hạn mức' THEN 'Exceed limit'
  270.                     WHEN fail_reason LIKE 'OTP' THEN 'OTP related'
  271.                     WHEN fail_reason LIKE 'PIN' THEN 'PIN related'
  272.                     WHEN fail_reason LIKE 'insufficient' THEN 'Insufficient balance'
  273.                     WHEN fail_reason LIKE 'not enough' THEN 'Insufficient balance'
  274.                     WHEN fail_reason LIKE 'không đủ' THEN 'Insufficient balance'
  275.                     WHEN fail_reason LIKE 'phone' THEN 'Phone number related'
  276.                     WHEN fail_reason LIKE 'số điện thoại' THEN 'Phone number related'
  277.                     WHEN fail_reason LIKE 'processed' THEN 'Processing'
  278.                     WHEN fail_reason LIKE 'xử lý' THEN 'Processing'
  279.                     WHEN fail_reason LIKE 'Can not get card' THEN 'Cannot get card id info'
  280.                     WHEN fail_reason LIKE 'online' THEN 'Online banking service unregistered'
  281.                     WHEN fail_reason LIKE 'trực tuyến' THEN 'Online banking service unregistered'
  282.                     WHEN fail_reason LIKE 'JPA EntityManager' THEN 'JPA EntityManager related'
  283.                     WHEN fail_reason LIKE 'maintenance' THEN 'System maintenance'
  284.                     WHEN fail_reason LIKE 'bảo trì' THEN 'System maintenance'
  285.                     WHEN fail_reason IN ('An error has occurred. Please try again', 'Có lỗi xảy ra. Vui lòng thử lại') THEN 'An error has occurred. Please try again'
  286.                     ELSE fail_reason
  287.              END AS fail_reason_grouped
  288.     FROM    joined
  289. )
  290. ,summary AS
  291. (
  292.     SELECT  payment_date
  293.             ,spm_channel_name
  294.             ,provision
  295.             ,payment_status
  296.             ,fail_reason
  297.             ,fail_reason_grouped
  298.             ,bank_name
  299.             ,brand
  300.             ,COUNT(payment_id) AS pmt
  301.     FROM    final
  302.     WHERE   1=1
  303.     GROUP BY 1, 2, 3, 4, 5, 6, 7, 8
  304. )
  305. SELECT * FROM summary
  306. ;
  307.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement