class Ralipay::WebPayment

Public Class Methods

new(configs) click to toggle source
# File lib/ralipay.rb, line 249
def initialize(configs)
  #@todo 入参合法性验证
  $global_configs = $global_configs.merge configs
end

Public Instance Methods

callback_verify(gets) click to toggle source

同步回调验证,支付后跳转,前端GET方式获得参数,传入hash symbol,该方法返回支付状态,并安全的返回回调参数hash,失败返回false

# File lib/ralipay.rb, line 295
def callback_verify gets
  origin_params = gets
  sign = gets[:sign]
  gets = Ralipay::Common::para_filter(gets)
  for_sign = Ralipay::Common::create_link_string(gets)
  #for_sign = CGI.unescape for_sign
  if sign == Ralipay::Common::md5_sign(for_sign + $global_configs[:key])
    origin_params
  else
    false
  end
end
callback_verify?(gets) click to toggle source

同步回调验证,支付后跳转,前端GET方式获得参数,传入hash symbol,该方法只返回bool

# File lib/ralipay.rb, line 286
def callback_verify? gets
  sign = gets[:sign]
  gets = Ralipay::Common::para_filter(gets)
  for_sign = Ralipay::Common::create_link_string(gets)
  #for_sign = CGI.unescape for_sign
  sign == Ralipay::Common::md5_sign(for_sign + $global_configs[:key])
end
generate_pay_url() click to toggle source

生成web支付地址

# File lib/ralipay.rb, line 265
def generate_pay_url
  params = Hash.new
  params['service']        = 'create_direct_pay_by_user'
  params['_input_charset'] = 'utf-8'
  params['payment_type']   = '1'
  params['partner']        = $global_configs[:partner]
  params['seller_email']   = $global_configs[:seller_email]
  params['subject']        = $global_configs[:subject]
  params['out_trade_no']   = $global_configs[:out_trade_no]
  params['total_fee']      = $global_configs[:total_fee]
  params['show_url']       = $global_configs[:merchant_url]
  params['return_url']     = $global_configs[:call_back_url]
  params['notify_url']     = $global_configs[:notify_url]
  all_params = sign(params)
  all_params_kv = all_params.map do |key,value|
    key + '=' + value
  end
  'https://www.alipay.com/cooperate/gateway.do?' + URI.encode(all_params_kv.join('&'))
end
notify_verify(posts) click to toggle source

异步回调验证,支付宝主动通知,前端POST xml方式获得参数,该方法返回支付状态,并安全的返回回调参数hash,失败返回false 成功请自行向支付宝打印纯文本success 如验签失败或未输出success支付宝会24小时根据策略重发总共7次,需考虑重复通知的情况

# File lib/ralipay.rb, line 328
def notify_verify posts
  origin_params = posts
  sign = posts[:sign]
  posts = Ralipay::Common::para_filter(posts)
  for_sign = Ralipay::Common::create_link_string(posts)
  #for_sign = CGI.unescape for_sign
  if sign == Ralipay::Common::md5_sign(for_sign + $global_configs[:key])
    response = open('http://notify.alipay.com/trade/notify_query.do?' + 'partner=' + $global_configs[:partner] + '&notify_id=' + origin_params[:notify_id]).read
    if response == 'true'
      origin_params
    else
      false
    end
  else
    false
  end
end
notify_verify?(posts) click to toggle source

异步回调验证,支付宝主动通知,前端POST xml方式获得参数,该方法只返回bool 成功请自行向支付宝打印纯文本success 如验签失败或未输出success支付宝会24小时根据策略重发总共7次,需考虑重复通知的情况

# File lib/ralipay.rb, line 311
def notify_verify? posts
  origin_params = posts
  sign = posts[:sign]
  posts = Ralipay::Common::para_filter(posts)
  for_sign = Ralipay::Common::create_link_string(posts)
  #for_sign = CGI.unescape for_sign
  if sign == Ralipay::Common::md5_sign(for_sign + $global_configs[:key])
    response = open('http://notify.alipay.com/trade/notify_query.do?' + 'partner=' + $global_configs[:partner] + '&notify_id=' + origin_params[:notify_id]).read
    response == 'true'
  else
    false
  end
end
sign(params) click to toggle source
# File lib/ralipay.rb, line 254
def sign(params)
  params_kv = params.sort.map do |kv|
    kv.join('=')
  end
  sign = Digest::MD5.hexdigest(params_kv.join('&') + $global_configs[:key])
  params['sign_type'] = 'MD5'
  params['sign'] = sign
  params
end