class Service
Public Class Methods
new()
click to toggle source
# File lib/ralipay/service.rb, line 18 def initialize end
Public Instance Methods
alipay_wap_auth_and_execute(parameter)
click to toggle source
调用alipay_Wap_Auth_AuthAndExecute接口
# File lib/ralipay/service.rb, line 121 def alipay_wap_auth_and_execute parameter #除去数组中的空值和签名参数 @@parameter = Ralipay::Common::para_filter parameter sort_array = @@parameter.sort #生成签名 @@my_sign = Ralipay::Common::build_sign sort_array #生成跳转链接 redirect_url = @@gateway_order \ + Ralipay::Common::create_link_string(@@parameter) \ + '&sign=' \ + CGI::escape(@@my_sign) return redirect_url end
alipay_wap_trade_create_direct(parameter)
click to toggle source
创建alipay.wap.trade.create.direct接口
# File lib/ralipay/service.rb, line 67 def alipay_wap_trade_create_direct parameter #除去数组中的空值和签名参数 @@parameter = Ralipay::Common::para_filter parameter sort_array = @@parameter.sort #生成签名 @@my_sign = Ralipay::Common::build_sign sort_array #创建POST请求数据串 @@req_data = Ralipay::Common::create_link_string(sort_array).to_s \ + '&sign=' \ + CGI::escape(@@my_sign) #请求支付宝接口 uri = URI.parse (@@gateway_order) http = Net::HTTP.new uri.host, uri.port request = Net::HTTP::Post.new(uri.request_uri) request.set_body_internal(@@req_data) response = http.request(request) #解析token token = parse_token response.body end
mobile_merchant_pay_channel(parameter)
click to toggle source
创建mobile_merchant_pay_channel接口
# File lib/ralipay/service.rb, line 23 def mobile_merchant_pay_channel parameter #除去数组中的空值和签名参数 @@parameter = Ralipay::Common::para_filter parameter sort_array = @@parameter.sort #生成签名 @@my_sign = Ralipay::Common::build_sign sort_array #创建请求数据串 @@req_data = Ralipay::Common::create_link_string(@@parameter).to_s \ + '&sign=' \ + CGI::escape(@@my_sign) \ + '&sign_type=' \ + $sec_id #请求支付宝接口 uri = URI.parse (@@gateway_pay_channel + @@req_data) http = Net::HTTP.new uri.host, uri.port http.use_ssl = true if uri.scheme == 'https' path = uri.query.nil? ? uri.path : uri.path + '?' + uri.query xml = http.get2(path).body result = response_handle xml end
parse_token(string)
click to toggle source
# File lib/ralipay/service.rb, line 88 def parse_token string #返回的数据已转义,反转义之 unescaped_string = CGI::unescape string #用&拆开 unescaped_string = unescaped_string.split('&') data_hash = {} unescaped_string.each{|str| kv_array = str.split('=',2) data_hash[kv_array[0]] = kv_array[1] } #私钥解密 data_hash['res_data'] = Ralipay::Common::decrypt data_hash['res_data'] #获取返回的RSA签名 sign = data_hash['sign'] #去sign,准备验签 data_hash = Ralipay::Common::para_filter data_hash data_hash.sort link_string = Ralipay::Common::create_link_string(data_hash) #验签 verify = Ralipay::Common::verify?(link_string, sign) if verify #解析token doc = Nokogiri::XML data_hash['res_data'] token = doc.xpath('/direct_trade_create_res/request_token').text return token else fail('------verify fail------') end end
response_handle(xml)
click to toggle source
验签并反序列化Json数据
# File lib/ralipay/service.rb, line 47 def response_handle xml #解析xml doc = Nokogiri::XML xml json_result = doc.xpath('/alipay/response/alipay/result').text ali_sign = doc.xpath('/alipay/sign').text #转换待签名格式数据,因为此mapi接口统一都是用GBK编码的,所以要把默认UTF-8的编码转换成GBK,否则生成签名会不一致 for_sign_string = 'result=' + json_result for_sign_string = for_sign_string.encode('GBK') verify = Ralipay::Common::verify?(for_sign_string, ali_sign) if verify return json_result else fail('------verify fail------') end end