Module: RailsTrade::Refund::AlipayRefund

Included in:
AlipayRefund
Defined in:
app/models/rails_trade/refund/alipay_refund.rb

Instance Method Summary collapse

Instance Method Details

#do_refund(params = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/models/rails_trade/refund/alipay_refund.rb', line 3

def do_refund(params = {})
  return unless can_refund?

  refund_params = {
    out_trade_no: self.order.uuid,
    refund_amount: self.total_amount.to_s,
    out_request_no: self.refund_uuid
  }

  refund_res = Alipay::Service.trade_refund(refund_params)

  order.payment_status = 'refunded'
  self.operator_id = params[:operator_id]

  refund = JSON.parse(refund_res).fetch('alipay_trade_refund_response', {})

  if refund['code'] == '10000' || refund['msg'] == 'Success'
    self.refund_uuid = refund['trade_no']
    self.state = 'completed'
    self.refunded_at = Time.now
    self.class.transaction do
      order.save!
      self.save!
    end
  else
    self.update reason: "code: #{refund['code']}, msg: #{refund['msg']}"
  end
  refund
end