• 支付宝接口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","")
  • 相关阅读:
    冒泡排序(可传函数参数)
    字符串转化成整数
    遍历文档内容,得到HTML层级结构
    跨域通信问题
    矩阵的快速幂
    CSS tricks
    牛客赛马网笔试攻略
    项目中遇到的问题
    Mysql远程链接访问权限设置
    恢复delete删除的数据
  • 原文地址:https://www.cnblogs.com/lexus/p/1896566.html
Copyright © 2020-2023  润新知