`
mlzboy
  • 浏览: 727063 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

支付宝接口for rails3

阅读更多

 

#coding:utf-8

class AlipayController < ApplicationController

  #http://www.15-1688.com:3000/alipay/respond?trade_status=TRADE_FINISHED&is_success=T&out_trade_no=201012041246501110&trade_no=1111&total_fee=2020&fee_type=1&attach=&sign=3cc3b8c94797a5f4d060a1fdb95a0301

 

  def return_url_process

    dict={}

    params.each do |k,v|

      if k!="sign" and k!="sign_type" and k!="action" and k!="controller" and v!=""

        dict[k]=v

      end

    end

    logger.debug(dict)

    gen_sign=AlipayLib::gen_sign(dict,"asdfasdfasdfasdfasdfasdfasdfasdfsadf")#密钥

    logger.debug("-----------------------------------------------------------------")

    logger.debug("gen_sign")

    logger.debug(gen_sign)

    pay_success=false

    ps=PaymentStatus.new

    ps.url=request.request_uri

    ps.ip=request.remote_ip

    ps.from="支付宝"

    ps.memo="来自同步接口"

    if gen_sign==params[:sign]

      sn=params[:out_trade_no]

      order=Order.find_by_sn(sn)

      ps.order_id=order.id

      if params[:trade_status]=="TRADE_FINISHED" or params[:trade_status]="TRADE_SUCCESS"

        ps.name="付款成功"

        ps.success=true

        ps.transaction_id=params[:trade_no]

        ps.sn=sn

        ps.total_fee=params[:total_fee]

        order.order_statuses<<OrderStatus.create(:name=>"订单确认",:value=>2)

        pay_success=true

      else

        ps.name="付款未成功"

      end

    else

      ps.name="签名不对"

      logger.debug("签名不对")

    end

    ps.save

    if pay_success

      redirect_to "/pay_success"

    else

      redirect_to "/pay_failure"

    end

  end

#http://www.15-1688.com:3000/alipay/notify?trade_status=TRADE_FINISHED&is_success=T&out_trade_no=201012041246501110&trade_no=1111&total_fee=2020&fee_type=1&attach=&sign=3cc3b8c94797a5f4d060a1fdb95a0301

  def notify_url_process

    dict={}

    params.each do |k,v|

      if k!="sign" and k!="sign_type" and k!="action" and k!="controller" and v!=""

        dict[k]=v

      end

    end

    logger.debug(dict)

    gen_sign=AlipayLib::gen_sign(dict,"sdafasdfasdfasdfasdfasdfadsfasdf")#密钥

    logger.debug("-----------------------------------------------------------------")

    logger.debug("gen_sign")

    logger.debug(gen_sign)

    pay_success=false

    ps=PaymentStatus.new

    ps.url=request.request_uri

    ps.ip=request.remote_ip

    ps.from="支付宝"

    ps.memo="来自异步步接口"

    if gen_sign==params[:sign]

      sn=params[:out_trade_no]

      order=Order.find_by_sn(sn)

      ps.order_id=order.id

      if params[:trade_status]=="TRADE_FINISHED" or params[:trade_status]="TRADE_SUCCESS"

        ps.name="付款成功"

        ps.success=true

        ps.transaction_id=params[:trade_no]

        ps.sn=sn

        ps.total_fee=params[:total_fee]

        order.order_statuses<<OrderStatus.create(:name=>"订单确认",:value=>2)

        pay_success=true

      else

        ps.name="付款未成功"

      end

    else

      ps.name="签名不对"

      logger.debug("签名不对")

    end

    ps.save

    if pay_success

      render :text=>"success"

    else

      render :text=>"error"

    end

  end

end

模块代码
#coding:utf-8
require 'digest/md5'
require 'cgi'
module AlipayLib
  def concat_url(dict)
     list=[]
    dict.each do |k,v|
      list<<%Q{#{k}=#{CGI.escape(v)}}
    end
    url=list.join("&")
  end
  def gen_sign(dict,key)
    Digest::MD5.hexdigest((dict.sort.collect{|s|s[0]+"="+s[1]}).join("&")+key)
  end
  def gen_url(subject,sn,total_fee,show_url,paymethod="bankPay",body=nil,it_b_pay=nil,defaultbank="",charset='utf-8')
    dict={}
    dict["service"]="create_direct_pay_by_user"
    dict["payment_type"]="1"
    dict["partner"]="208800323033"#partner_id
    dict["seller_email"]="frederic2323@gmail.com"
    dict["return_url"]="http://www.15-1688.com/alipay/respond"
    dict["notify_url"]="http://www.15-1688.com/alipay/notify"
    dict["_input_charset"]="utf-8"
    dict["show_url"]=show_url
    dict["out_trade_no"]=sn
    dict["subject"]=subject
    dict["body"]=body||""
    dict["total_fee"]=total_fee.to_s
    dict["paymethod"]=paymethod
    dict["defaultbank"]=defaultbank
    dict["anti_phishing_key"]=""
    dict["exter_invoke_ip"]=""
    dict["buyer_email"]=""
    dict["extra_common_param"]=""
    dict["royalty_type"]=""
    dict["royalty_parameters"]=""
    dict["it_b_pay"]=it_b_pay||""#此项功能需要申请开通
    dict=dict.select{|k,v| !v.nil? and v.strip!=""}
    dict["sign"]=gen_sign(dict,"dfasdfasdfasdfasdfasdfadfasdfadfsfd")#密钥
    dict["sign_type"]="MD5"
    puts dict["sign"]
    params=concat_url(dict)
    r="https://www.alipay.com/cooperate/gateway.do?"+params
    puts r
    puts "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
    r
  end
end
include AlipayLib
#gen_url("大家好","20101203111212",20.2,"directPay")
gen_url("大家","20101204121215","20.2","")

 

分享到:
评论

相关推荐

    Ruby for Rails

    Ruby for Rails 英文原版, pdf格式 &lt;br&gt;本书是一部专门为Rails实践而写的经典Ruby著作,由四部分组成,共17章。第一部分讲述Ruby和Rails的编程环境。第二部分和第三部分与 Rails紧密联系,着重对Ruby这门语言...

    Ruby+for+Rails

    **Ruby for Rails** Ruby是一种面向对象的动态编程语言,它以其简洁、优雅的语法和强大的元编程能力而闻名。在Web开发领域,Ruby与Rails框架的结合,即Ruby on Rails(RoR),开创了Web应用的新纪元。Ruby on Rails...

    OAuth gem for rails3

    OAuth gem for Rails3 是一个针对Ruby on Rails框架的授权库,它实现了OAuth协议,以便于在Rails应用中安全地处理第三方服务的授权流程。OAuth是一个开放标准,允许用户让第三方应用在无需分享用户名和密码的情况下...

    Rbuy for Rails源代码

    “Rbuy for Rails源代码”这一标题表明我们关注的是一个名为“Rbuy”的项目,它是为Rails框架开发的一个特定组件或应用。Rails是Ruby on Rails的简称,是一个基于Ruby语言的开源Web应用程序框架,遵循MVC(模型-视图...

    ruby on rails for dummies

    《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...

    Rails for Zombies

    Rails for Zombies是一份面向初学者的教程,通过学习本教程,用户能够掌握创建Ruby on Rails应用程序的基本知识。 Rails for Zombies教程中的"Deep in the CRUD"部分深入讲解了CRUD(创建Create、读取Retrieve、...

    RJS Templates for Rails

    3. **变量引用**:Rails的实例变量可以在RJS模板中直接使用,使得数据传递更加方便。例如,`@users.each do |user|`可以用来遍历后端传来的用户数据,并更新到页面上。 4. **条件和循环**:Ruby的条件语句(如`if`...

    Agile Web Development with Rails for Rails 3.2

    ### Agile Web Development with Rails for Rails 3.2 #### 核心知识点概览 - **Rails 3.2概述** - **敏捷开发方法论** - **Model-View-Controller (MVC) 模式** - **Ruby on Rails基础与高级特性** - **面向对象...

    Learning Devise for Rails

    This book is for web developers who are getting started with Rails and are looking for authentication solutions, as well as for Rails developers who are looking to extend their implementation of ...

    Bootstrap for Rails

    Bootstrap for Rails is for Rails web developers who are struggling to get their website designs right. It will enable you to create beautiful responsive websites in minutes without writing much CSS ...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    Rails 3 in Action

    《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...

    Ruby For Rails(英文版)(清晰文字pdf)

    ### Ruby for Rails 知识点概述 #### 一、书籍背景与重要性 - **书籍定位**:《Ruby for Rails》被广泛认为是学习Ruby语言的必读之作,特别是对于那些希望利用Ruby on Rails(RoR)进行高效Web开发的学习者而言。...

    Rails3常用命令行命令

    Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...

    资源for rails

    3. **Gemfile和Bundler**:Rails项目中的`Gemfile`用于指定项目依赖的Gem(Ruby的库)。Bundler工具用于管理这些Gem,通过`bundle install`命令安装和更新Gem。 4. **路由**:Rails的路由系统将URL映射到控制器的...

Global site tag (gtag.js) - Google Analytics