Module: RailsTrade::Refund::WxpayRefund

Included in:
WxpayRefund
Defined in:
app/models/rails_trade/refund/wxpay_refund.rb

Instance Method Summary collapse

Instance Method Details

#do_refund(params = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/models/rails_trade/refund/wxpay_refund.rb', line 11

def do_refund(params = {})
  _params = {
    out_refund_no: self.refund_uuid,
    total_fee: (payment.total_amount * 100).to_i,
    refund_fee: (total_amount * 100).to_i,
    transaction_id: self.payment.payment_uuid
  }

  begin
    result = WxPay::Service.invoke_refund(_params)
    if result['result_code'] == 'SUCCESS'
      self.state = 'completed'
      order.payment_status = 'refunded'
      self.refunded_at = Time.now
    else
      self.state = 'failed'
      self.comment = result['result_code']
    end
  rescue StandardError => e
    self.state = 'failed'
    self.comment = e.message.truncate(225)
  ensure
    self.class.transaction do
      self.save!
      order.save!
    end
  end
  self
end

#out_trade_noObject



7
8
9
# File 'app/models/rails_trade/refund/wxpay_refund.rb', line 7

def out_trade_no
  self.origin&.payment_entity_no
end

#refund_queryObject



41
42
43
44
45
46
# File 'app/models/rails_trade/refund/wxpay_refund.rb', line 41

def refund_query
  params = {
    out_refund_no: self.refund_uuid
  }
  WxPay::Service.refund_query(params)
end

#transaction_idObject



3
4
5
# File 'app/models/rails_trade/refund/wxpay_refund.rb', line 3

def transaction_id
  refunded_payment&.payment_uuid
end