class YlPay::Service
Constants
- AUTHORIZE_URI
- H5_URI
- INVOKE_ORDER_REQUIRED_FIELDS
Public Class Methods
check_notify_sign(params)
click to toggle source
# File lib/yl_pay/service.rb, line 38 def self.check_notify_sign(params) sign = params.delete('Sign') notify_sign = YlPay::Utils.notify_sign(params) YlPay::Sign.verify?(notify_sign, sign) end
generate_order_url(params, options = {})
click to toggle source
# File lib/yl_pay/service.rb, line 11 def self.generate_order_url(params, options = {}) check_required_options(params, INVOKE_ORDER_REQUIRED_FIELDS) params = set_params(params, options) result = YlPay::Result.new(Hash.from_xml(invoke_remote(YlPay.payeco_url + AUTHORIZE_URI, make_payload(params)))) JSON(parse_result(result)) end
h5_pay_url(params)
click to toggle source
# File lib/yl_pay/service.rb, line 34 def self.h5_pay_url(params) YlPay.payeco_url + H5_URI + '?tradeId=h5Init' + "&#{params}" end
parse_result(result)
click to toggle source
# File lib/yl_pay/service.rb, line 18 def self.parse_result(result) return result.failure unless result.success? back_sign = check_back_sign(result.body) return result.sign_error unless back_sign url = pay_url(back_sign[0] + "&Sign=#{back_sign[1]}") result.success(url) end
pay_url(params, options = { pay_way: 'h5_pay_url' })
click to toggle source
根据返回回来的参数,生成去支付页面的url
# File lib/yl_pay/service.rb, line 29 def self.pay_url(params, options = { pay_way: 'h5_pay_url' }) pay_way = options.delete(:pay_way) send(pay_way, params) end
Private Class Methods
check_back_sign(data)
click to toggle source
# File lib/yl_pay/service.rb, line 79 def check_back_sign(data) sign = data.delete('Sign') back_sign = YlPay::Utils.back_sign(data) YlPay::Sign.verify?(back_sign, sign) ? [back_sign, sign] : false end
check_required_options(options, names)
click to toggle source
# File lib/yl_pay/service.rb, line 59 def check_required_options(options, names) return unless YlPay.debug_mode? names.each do |name| warn("YlPay Warn: missing required option: #{name}") unless options.key?(name) end end
invoke_remote(url, payload)
click to toggle source
# File lib/yl_pay/service.rb, line 74 def invoke_remote(url, payload) remote_url = url + "?#{payload}" Faraday.get(remote_url).body end
make_payload(params)
click to toggle source
# File lib/yl_pay/service.rb, line 67 def make_payload(params) trade_code = params.delete(:trade_code) sign_params = YlPay::Utils.param_sign(params) rsa_sign = YlPay::Sign.sign(sign_params) "TradeCode=#{trade_code}&" + YlPay::Utils.uri_params(params) + "&Sign=#{rsa_sign}" end
set_params(params, options)
click to toggle source
# File lib/yl_pay/service.rb, line 47 def set_params(params, options) { version: YlPay.version, merchant_id: options.delete(:merchant_id) || YlPay.merchant_id, notify_url: options.delete(:notify_url) || YlPay.notify_url, return_url: options.delete(:return_url) || YlPay.return_url, trade_code: options.delete(:trade_code) || 'PayOrder', exp_time: options.delete(:exp_time) || '', notify_flag: options.delete(:notify_flag) || '0' }.merge(params) end