alipay支付宝(ruby实现)
require 'iconv' require 'net/http' require 'uri' #Alipay(支付宝)库文件 # ===使用方法如下: # * alipay_uri = Alipay::Merchant.new do |m| # * m.return_url = 'hello' # * m.show_url='http://www.baidu.com' # * m.subject = 'goodsName' # * m.body = 'theBodyOfTheGoods' # * m.out_trade_no = '20091009143121' # * m.price = 20.34 # * m.quantity = 4 # * end.uri module Alipay class Merchant GATEWAY='http://www.alipay.com/cooperate/gateway.do' NOTIFY_HTTP_VERIFY ='http://notify.alipay.com/trade/notify_query.do' NOTIFY_HTTPS_VERIFY ='https://www.alipay.com/cooperate/gateway.do' TRANSPORT ='http' SIGN_TYPE ='MD5' INPUT_CHARSET='UTF-8' KEY='pojyh234234234234234234qp4jeoz' # 密码 CONFIG = { :service=>'create_direct_pay_by_user', :partner=>'208232342349770', # partner_id :payment_type=>'1', :paymethod=>'bankPay', :defaultbank=>'SDB', :seller_email=>'example@example.com', # partner_email 卖家email :seller_id=>'', :it_b_pay=>'', :royalty_type=>'', :royalty_parameters=>'', } ATTRIBUTES=[:notify_url, :return_url, :show_url, :subject, :body, :out_trade_no, :price, :total_fee, :quantity, :buyer_email, :buyer_id] ARGUMENTS =CONFIG.keys + ATTRIBUTES attr_accessor *ATTRIBUTES def initialize(options={}, & block) options.each { |attr, value| instance_eval "self.#{attr}='#{value}'" } yield(self) end #购买商品的URI def uri options = parameters type, sign = sign(SIGN_TYPE, options) "#{GATEWAY}?%s&sign=#{sign}&sign_type=#{type}" % options.map { |k, v| k.to_s + '=' +v.to_s }.join('&') end #验证通知的正确性 def self.notify_verify(options={}) notify_url = URI.parse("#{NOTIFY_HTTP_VERIFY}?partner=#{CONFIG[:partner]}¬ify_id=#{options[:notify_id]}") {"true"=>true, "false"=>false}[Net::HTTP.get(notify_url)] end private #sanitize the parameters def parameters configs=ARGUMENTS-ATTRIBUTES @params=CONFIG.dup.delete_if { |k, v| !configs.include?(k) } ATTRIBUTES.each do |a| @params.merge!(a => send(a)) end @params.store(:_input_charset, INPUT_CHARSET) @params.delete_if { |k, v| v.nil? || v=="" } end #请求参数按照参数名字符升序排列,如果有重复参数名,那么重复的参数再按照参数值的字符升序排列 #所有参数(除了sign和sign_type)按照上面的排序用&连接起来,格式是:p1=v1&p2=v2 def sign(sign_type, options={}) type = sign_type.to_s.upcase if type.eql?('md5') key = options.sort { |k1, k2| k1.to_s<=>k2.to_s }.map { |k, v| k.to_s + '=' + v.to_s }.join('&') return type, Digest::MD5.hexdigest(key+Alipay::Merchant::KEY) else raise "unimplement other algorithm!" end end end end
相关推荐
用ruby gem封装的alipay(支付宝)即时到帐接口调用,包含wap支付及手机客户端sdk支付,使用RSA验签 标签:ralipay
ruby短信接口开发_ruby发送短信验证码通知_ruby短信demo示例.docx
此工具为ruby和redis接口,用于搭建redisCluster集群,好用!
Ruby/GraphViz - GraphViz绘图工具的Ruby接口
ruby和redis接口.zipruby和redis接口.zipruby和redis接口.zipruby和redis接口.zipruby和redis接口.zipruby和redis接口.zip
Rack提供了一个最小化,模块化和适应性强的界面,用于在Ruby中开发Web应用程序。 通过以最简单的方式包装HTTP请求和响应,它将Web服务器,Web框架和软件(所谓的中间件)之间的API统一并提炼成单个方法调用。
Tilt - 多个Ruby模板引擎的通用接口
此脚本为搭建Redis集群环境必须安装的脚本。若未安装,则无法搭建集群。
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
ice最简单实现 ruby调用ice接口 - Ruby - language - ITeye论坛
ruby-lastfm, Last.fm Web服务的ruby 接口 ruby-lastfm Last.fm Web服务 v2.0的ruby 接口概要require 'lastfm'lastfm = Lastfm.new(api_key, api_secret)token = l
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
forecast-ruby, 用于从预测天气API中检索数据的ruby gem forecast_ioruby 中的forecast.io API包装器。安装gem install forecast_io或者你的Gemfilegem 'forecast_io'用法确保你需要库。requir
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby
DataObjects - 企图重写现有的Ruby数据库驱动程序符合一个标准接口
《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...
ruby-fann - 与FANN(Fast Artificial Neural Network)接口的Ruby库
Ruby编程,Ruby编程,Ruby编程,Ruby编程,Ruby编程,
ruby源代码 ruby源代码 ruby源代码 ruby源代码2
ruby源代码 ruby源代码 ruby源代码 ruby源代码4