支付宝接口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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值