class Clt::Cvs
Public Class Methods
new()
click to toggle source
# File lib/clt/cvs.rb, line 5 def initialize raise ArgumentError, 'Please setup cvs_cust_id first' if Clt.cvs_cust_id.nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_cust_id, data: :String) unless Clt.cvs_cust_id.is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cvs_cust_id) if Clt.cvs_cust_id.empty? raise ArgumentError, 'Please setup cvs_cust_password first' if Clt.cvs_cust_password.nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_cust_password, data: :String) unless Clt.cvs_cust_password.is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cvs_cust_password) if Clt.cvs_cust_password.empty? ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: :Integer) unless Clt.cvs_default_expire_day.is_a? Integer ErrorMessage.raise_error(msg: :parameter_should_be, field: :cvs_default_expire_day, data: 'greater than 0') if Clt.cvs_default_expire_day <= 0 end
Public Instance Methods
order_create(params = {})
click to toggle source
# File lib/clt/cvs.rb, line 18 def order_create(params = {}) ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty? ErrorMessage.raise_error(msg: :missing_parameter, field: :cust_order_number) if params[:cust_order_number].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :cust_order_number, data: :String) unless params[:cust_order_number].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :cust_order_number) if params[:cust_order_number].empty? ErrorMessage.raise_error(msg: :missing_parameter, field: :order_amount) if params[:order_amount].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :order_amount, data: :Integer) unless params[:order_amount].is_a? Integer if params.has_key? :expire_date ErrorMessage.raise_error(msg: :parameter_should_be, field: :expire_date, data: :String) unless params[:expire_date].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :expire_date) if params[:expire_date].empty? ErrorMessage.raise_error(msg: :wrong_data_format, field: :expire_date) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:expire_date]) end if params.has_key? :payer_name ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_name, data: :String) unless params[:payer_name].is_a? String end if params.has_key? :payer_postcode ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_postcode, data: :String) unless params[:payer_postcode].is_a? String end if params.has_key? :payer_address ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_address, data: :String) unless params[:payer_address].is_a? String end ErrorMessage.raise_error(msg: :missing_parameter, field: :payer_mobile) if params[:payer_mobile].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_mobile, data: :String) unless params[:payer_mobile].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :payer_mobile) if params[:payer_mobile].empty? ErrorMessage.raise_error(msg: :missing_parameter, field: :payer_email) if params[:payer_email].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :payer_email, data: :String) unless params[:payer_email].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :payer_email) if params[:payer_email].empty? expire_date = params.has_key?(:expire_date) ? params[:expire_date] : get_cvs_default_expire_date # build xml data builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do request { header { cmd 'cvs_order_regiater' cust_id Clt.cvs_cust_id cust_password Clt.cvs_cust_password } order { cust_order_number params[:cust_order_number] order_amount params[:order_amount] expire_date expire_date payer_name params[:payer_name] payer_postcode params[:payer_postcode] payer_address params[:payer_address] payer_mobile params[:payer_mobile] payer_email params[:payer_email] } } end post_request(service_url: params[:service_url], data: builder.to_xml) end
order_query(params = {})
click to toggle source
# File lib/clt/cvs.rb, line 84 def order_query(params = {}) ErrorMessage.raise_error(msg: :parameter_should_be, field: :Parameter, data: :Hash) unless params.is_a? Hash ErrorMessage.raise_error(msg: :missing_parameter, field: :service_url) if params[:service_url].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :service_url, data: :String) unless params[:service_url].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :service_url) if params[:service_url].empty? ErrorMessage.raise_error(msg: :missing_parameter, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :process_code_update_time_begin, data: :String) unless params[:process_code_update_time_begin].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :process_code_update_time_begin) if params[:process_code_update_time_begin].empty? ErrorMessage.raise_error(msg: :wrong_data_format, field: :process_code_update_time_begin) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:process_code_update_time_begin]) ErrorMessage.raise_error(msg: :missing_parameter, field: :process_code_update_time_end) if params[:process_code_update_time_end].nil? ErrorMessage.raise_error(msg: :parameter_should_be, field: :process_code_update_time_end, data: :String) unless params[:process_code_update_time_end].is_a? String ErrorMessage.raise_error(msg: :cannot_be_empty, field: :process_code_update_time_end) if params[:process_code_update_time_end].empty? ErrorMessage.raise_error(msg: :wrong_data_format, field: :process_code_update_time_end) unless /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}\z/.match(params[:process_code_update_time_end]) builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do request { header { cmd 'cvs_order_query' cust_id Clt.cvs_cust_id cust_password Clt.cvs_cust_password } query { process_code_update_time_begin params[:process_code_update_time_begin] process_code_update_time_end params[:process_code_update_time_end] } } end post_request(service_url: params[:service_url], data: builder.to_xml) end
Private Instance Methods
get_cvs_default_expire_date()
click to toggle source
# File lib/clt/cvs.rb, line 120 def get_cvs_default_expire_date seconds_in_a_day = 60 * 60 * 24 offset = seconds_in_a_day * Clt.cvs_default_expire_day # get and converts time to local time current_time = Time.now.localtime('+08:00') (current_time + offset).iso8601 end
post_request(service_url:, data:)
click to toggle source
# File lib/clt/cvs.rb, line 130 def post_request(service_url:, data:) api_url = URI.parse(service_url) http = Net::HTTP.new(api_url.host, api_url.port) http.use_ssl = true if api_url.scheme == 'https' response = http.post(api_url.request_uri, data, { 'Content-Type' => 'text/xml' }) case response when Net::HTTPOK parser = Nori.new(advanced_typecasting: false) begin response_hash = parser.parse(response.body)['response'] rescue response_hash = { 'status' => 'ERROR', 'msg' => 'Response parsing failed', 'response' => response.body } end response_hash when Net::HTTPClientError, Net::HTTPInternalServerError raise Net::HTTPError, response.message else raise Net::HTTPError, 'Unexpected HTTP response' end end