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
|