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