Class: AllpayInvoice::Invoice
- Inherits:
-
Object
- Object
- AllpayInvoice::Invoice
- Defined in:
- lib/allpay_invoice/invoice.rb
Constant Summary collapse
- PRE_ENCODE_COLUMN =
[:CustomerName, :CustomerAddr , :CustomerEmail, :ItemName, :ItemWord, :InvoiceRemark, :InvCreateDate, :NotifyMail, :Reason, :IIS_Customer_Name, :IIS_Customer_Addr]
- BLACK_LIST_COLUMN =
[:ItemName, :ItemWord, :InvoiceRemark, :Reason]
- PRODUCTION_API_HOST =
'https://einvoice.allpay.com.tw'.freeze
- TEST_API_HOST =
'http://einvoice-stage.allpay.com.tw'.freeze
- TEST_OPTIONS =
{ merchant_id: '2000132', hash_key: 'ejCk326UnaZWKisg', hash_iv: 'q9jcZX8Ib9LM8wYk' }.freeze
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
-
#allowance(overwrite_params = {}) ⇒ Object
開立折讓API url_encode => NotifyMail / ItemName / ItemWord 在產生 CheckMacValue 時,須將 ItemName 及 ItemWord 等欄位排除.
-
#allowance_invalid(overwrite_params = {}) ⇒ Object
折讓作廢API url_encode => Reason 在產生 CheckMacValue 時,須將 ItemName 及 ItemWord 等欄位排除.
- #api_host ⇒ Object
-
#delay_issue(overwrite_params = {}) ⇒ Object
延遲或觸發開立發票API url_encode => CustomerEmail / CustomerName / CustomerAddr / ItemName / ItemWord / InvoiceRemark 在產生 CheckMacValue 時, 須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除.
- #generate_params(overwrite_params = {}) ⇒ Object
-
#initialize(options = {}) ⇒ Invoice
constructor
A new instance of Invoice.
-
#invoice_notify(overwrite_params = {}) ⇒ Object
發送通知API.
-
#issue(overwrite_params = {}) ⇒ Object
一般開立發票API url_encode => CustomerAddr / CustomerName / CustomerEmail / ItemName / ItemWord / InvCreateDate / InvoiceRemark 在產生 CheckMacValue 時,須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除.
-
#issue_invalid(overwrite_params = {}) ⇒ Object
發票作廢API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 欄位排除.
- #make_mac(params = {}) ⇒ Object
-
#query_allowance(overwrite_params = {}) ⇒ Object
查詢折讓明細API url_encode => ItemName / ItemWord / IIS_Customer_Name 在產生 CheckMacValue 時,須將 ItemName、ItemWord 等欄位排除.
-
#query_allowance_invalid(overwrite_params = {}) ⇒ Object
查詢折讓作廢明細API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 等欄位排除.
-
#query_issue(overwrite_params = {}) ⇒ Object
查詢發票API url_encode => IIS_Customer_Name / IIS_Customer_Addr / ItemName / ItemWord / InvoiceRemark 在產生 CheckMacValue 時,須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除.
-
#query_issue_invalid(overwrite_params = {}) ⇒ Object
查詢作廢發票API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 等欄位排除.
- #request(path, params = {}) ⇒ Object
-
#trigger_issue(overwrite_params = {}) ⇒ Object
付款完成觸發或延遲開立發票API.
- #verify_mac(params = {}) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Invoice
Returns a new instance of Invoice.
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/allpay_invoice/invoice.rb', line 22 def initialize( = {}) @options = { mode: :production }.merge!() case @options[:mode] when :production option_required! :merchant_id, :hash_key, :hash_iv when :test @options = TEST_OPTIONS.merge() else fail InvalidMode, 'option :mode is either :test or :production' end @options.freeze end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
20 21 22 |
# File 'lib/allpay_invoice/invoice.rb', line 20 def @options end |
Instance Method Details
#allowance(overwrite_params = {}) ⇒ Object
開立折讓API url_encode => NotifyMail / ItemName / ItemWord 在產生 CheckMacValue 時,須將 ItemName 及 ItemWord 等欄位排除
88 89 90 91 |
# File 'lib/allpay_invoice/invoice.rb', line 88 def allowance(overwrite_params = {}) res = request '/Invoice/Allowance', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#allowance_invalid(overwrite_params = {}) ⇒ Object
折讓作廢API url_encode => Reason 在產生 CheckMacValue 時,須將 ItemName 及 ItemWord 等欄位排除
104 105 106 107 |
# File 'lib/allpay_invoice/invoice.rb', line 104 def allowance_invalid(overwrite_params = {}) res = request '/AllowanceInvalid', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#api_host ⇒ Object
35 36 37 38 39 40 |
# File 'lib/allpay_invoice/invoice.rb', line 35 def api_host case @options[:mode] when :production then PRODUCTION_API_HOST when :test then TEST_API_HOST end end |
#delay_issue(overwrite_params = {}) ⇒ Object
延遲或觸發開立發票API url_encode => CustomerEmail / CustomerName / CustomerAddr / ItemName / ItemWord / InvoiceRemark 在產生 CheckMacValue 時, 須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除
80 81 82 83 |
# File 'lib/allpay_invoice/invoice.rb', line 80 def delay_issue(overwrite_params = {}) res = request '/Invoice/DelayIssue', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#generate_params(overwrite_params = {}) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/allpay_invoice/invoice.rb', line 56 def generate_params(overwrite_params = {}) result = overwrite_params result[:TimeStamp] = Time.now.to_i result[:MerchantID] = @options[:merchant_id] result[:CheckMacValue] = make_mac(result) result end |
#invoice_notify(overwrite_params = {}) ⇒ Object
發送通知API
142 143 144 145 |
# File 'lib/allpay_invoice/invoice.rb', line 142 def invoice_notify(overwrite_params = {}) res = request '/Notify/InvoiceNotify', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#issue(overwrite_params = {}) ⇒ Object
一般開立發票API url_encode => CustomerAddr / CustomerName / CustomerEmail / ItemName / ItemWord / InvCreateDate / InvoiceRemark 在產生 CheckMacValue 時,須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除
72 73 74 75 |
# File 'lib/allpay_invoice/invoice.rb', line 72 def issue(overwrite_params = {}) res = request '/Invoice/Issue', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#issue_invalid(overwrite_params = {}) ⇒ Object
發票作廢API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 欄位排除
96 97 98 99 |
# File 'lib/allpay_invoice/invoice.rb', line 96 def issue_invalid(overwrite_params = {}) res = request '/Invoice/IssueInvalid', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#make_mac(params = {}) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/allpay_invoice/invoice.rb', line 42 def make_mac(params = {}) sort_hash = pre_encode(params.clone).sort_by { |x| x.to_s.downcase } raw = sort_hash.map! { |k, v| "#{k}=#{v}" }.join('&') str = "HashKey=#{@options[:hash_key]}&#{raw}&HashIV=#{@options[:hash_iv]}" url_encoded = CGI.escape(str).downcase! Digest::MD5.hexdigest(url_encoded).upcase! end |
#query_allowance(overwrite_params = {}) ⇒ Object
查詢折讓明細API url_encode => ItemName / ItemWord / IIS_Customer_Name 在產生 CheckMacValue 時,須將 ItemName、ItemWord 等欄位排除
128 129 130 131 |
# File 'lib/allpay_invoice/invoice.rb', line 128 def query_allowance(overwrite_params = {}) res = request '/Query/Allowance', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#query_allowance_invalid(overwrite_params = {}) ⇒ Object
查詢折讓作廢明細API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 等欄位排除
136 137 138 139 |
# File 'lib/allpay_invoice/invoice.rb', line 136 def query_allowance_invalid(overwrite_params = {}) res = request '/Query/AllowanceInvalid', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#query_issue(overwrite_params = {}) ⇒ Object
查詢發票API url_encode => IIS_Customer_Name / IIS_Customer_Addr / ItemName / ItemWord / InvoiceRemark 在產生 CheckMacValue 時,須將 ItemName、ItemWord 及 InvoiceRemark 等欄位排除
112 113 114 115 |
# File 'lib/allpay_invoice/invoice.rb', line 112 def query_issue(overwrite_params = {}) res = request '/Query/Issue', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#query_issue_invalid(overwrite_params = {}) ⇒ Object
查詢作廢發票API url_encode => Reason 在產生 CheckMacValue 時,須將 Reason 等欄位排除
120 121 122 123 |
# File 'lib/allpay_invoice/invoice.rb', line 120 def query_issue_invalid(overwrite_params = {}) res = request '/Query/IssueInvalid', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#request(path, params = {}) ⇒ Object
64 65 66 67 |
# File 'lib/allpay_invoice/invoice.rb', line 64 def request(path, params = {}) api_url = URI.join(api_host + path) Net::HTTP.post_form api_url, params end |
#trigger_issue(overwrite_params = {}) ⇒ Object
付款完成觸發或延遲開立發票API
148 149 150 151 |
# File 'lib/allpay_invoice/invoice.rb', line 148 def trigger_issue(overwrite_params = {}) res = request '/Invoice/TriggerIssue', generate_params(overwrite_params) Hash[res.body.split('&').map! { |i| i.split('=') }] end |
#verify_mac(params = {}) ⇒ Object
50 51 52 53 54 |
# File 'lib/allpay_invoice/invoice.rb', line 50 def verify_mac(params = {}) stringified_keys = params.stringify_keys check_mac_value = stringified_keys.delete('CheckMacValue') make_mac(stringified_keys) == check_mac_value end |