module WechatPayment::Concern::Goods
Public Class Methods
included(base)
click to toggle source
# File lib/wechat_payment/concern/goods.rb, line 8 def self.included(base) base.class_eval do cattr_accessor :user_model, :user_ref_field, :goods_ref_field, :user_goods_model, :persist_goods_attrs self.user_model = "User" self.user_ref_field = "user" self.goods_ref_field = self.name.underscore self.persist_goods_attrs = [] # 商品和用户的中间表模型,假设商品模型是 Product,那么中间模型就是 UserProduct self.user_goods_model = "#{self.user_model}#{self.name}" validates_numericality_of :price validates_presence_of :name end end
Public Instance Methods
payment_exec_success(payment_order)
click to toggle source
# File lib/wechat_payment/concern/goods.rb, line 75 def payment_exec_success(payment_order) end
refund(refund_fee)
click to toggle source
退款 @param [Integer] refund_fee @return [WechatPayment::ServiceResult]
# File lib/wechat_payment/concern/goods.rb, line 71 def refund(refund_fee) payment_orders.paid.last.refund(refund_fee) end
repay()
click to toggle source
重新支付,应用场景是: 用户取消了支付后,使用最后一张订单进行支付 @return [WechatPayment::ServiceResult]
# File lib/wechat_payment/concern/goods.rb, line 52 def repay # 如果不是待支付状态 unless pending? WechatPayment::ServiceResult.new(message: "当前状态不可支付") end result = payment_orders.last.repay if result.success? WechatPayment::ServiceResult.new(success: true, data: result.data[:js_payload]) else WechatPayment::ServiceResult.new(message: result.errors.first[:err_code_des]) end end
sell_to(user)
click to toggle source
售出 @param [User] user @return [WechatPaymentOrder]
# File lib/wechat_payment/concern/goods.rb, line 28 def sell_to(user) persist_goods_data = {}.tap do |h| self.class.persist_goods_attrs.each do |attr| h[attr] = send(attr) end end user_goods = self.class.user_goods_model.constantize.create( self.class.goods_ref_field => self, self.class.user_ref_field => user, **persist_goods_data ) user_goods.payment_orders.create( body: name, total_fee: price, trade_type: :JSAPI, customer: user ) end