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] + '¬ify_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] + '¬ify_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