支付宝接口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","")

 

posted on 2010-12-04 20:30  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2010/12/04/1896566.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值