• 财富通直连接口for rails3


    您正在进行的交易存在较大风险,为了您的资金安全,您暂时不能支付此次交易,您可以拨打财付通热线0755-86013860咨询详情。

    在使用财付通商家的时候子域名下会出现这样的问题

    我当时申请财付通商家的时候域名是xxx.com
    而现在论坛域名是bbs.xxx.com 提交的数据就会验证域名是否安全。

    我联系了财付通官方,他给出以下解决方法

    发生原因A:
    1.在开发机上由于生成订单时的IP地址是127.0.0.1,因此我们支付是不成功的。但到正式服务上会成功
    2.上网环境(铁通、网通、双线)
    解决方法
    1、把spbill_create_ip参数置空就行了。
    2、把代码放到idc机器上测试。

    发生原因B:
    你目前使用的域名与注册时的域名不一致

    而我,想自动解决这个。但没有找到spbill_create_ip参数。所以只能发到这里官方和大家帮助一下。

    我在别的平台去掉这个参数是可以正常支付的。 

    真实的解决方法是,在本地修改/etc/hosts来加域名进行测试就通过了就ok了,估计它们是加了referencr来判断的缘故,要不然直接打开链接是可以的,但是通过一个链接过去就不行,

    另外写接口的技巧,在本地先生成链接直接打开链接就可以调试,或是有demo,其它语言的话,看你的语言生成的签名是不是其它语言的一致,毕竟支付接口提供的语言有限

    github上有两位的代码支付tenpay,不过好像都是for rails2的一个是使用activemerchant的方式,太高端,我向来山寨,所以整了一个,帮助有缘人,

    #coding:utf-8

    require 'digest/md5'

    require 'cgi'

    module TenpayHelper

      def concat_url(dict)

         list=[]

        dict.each do |k,v|

          list<<%Q{#{k}=#{v}}

        end

        url=list.join("&")

      end

      def gen_sign2(dict)

        url=concat_url(dict)

        sign=Digest::MD5.hexdigest(url)

      end

      #desc是标题中文<=16,总金额,用户ip,银行错码,附加信息

      def gen_url(desc,sn,total_fee,bank_type=0,ip="",attach=nil,purchaser_id=nil,charset="utf-8")

        dict={}

        dict["cmdno"]="1"

        dict["date"]=Time.now.strftime("%Y%m%d")

        dict["bargainor_id"]="12023123801"#商家id

        dict["transaction_id"]=dict["bargainor_id"]+dict["date"]+sn[-10,10]

        dict["sp_billno"]=sn

        dict["total_fee"]=(total_fee*100).to_i.to_s

        dict["fee_type"]="1"

        dict["return_url"]="http://www.xxx.com/return_url"

        dict["attach"]=attach||""

        dict["spbill_create_ip"]="192.168.1.101"

        a=dict.clone

        dict["key"]="127a6abcedef9bbcb09b2cb"#密钥

        a["sign"]=gen_sign2(dict)

        puts a["sign"]

        a["desc"]=CGI.escape(desc)

        a["purchaser_id"]=purchaser_id||""

        a["cs"]=charset

        a["bank_type"]=bank_type.to_s

        params=concat_url(a)

        puts params

        r="http://service.tenpay.com/cgi-bin/v3.0/payservice.cgi?#{params}"

        puts r

        r

      end

    end

    include TenpayHelper

    TenpayHelper::gen_url("小额","123456789012331",20.2,1003)

    接下来是它return url 接口

    #coding:utf-8

    class TenpayController < ApplicationController

      #http://www.15-1688.com:3000/tenpay/respond?pay_result=0&sp_billno=201012041246501110&transaction_id=1111&total_fee=2020&fee_type=1&attach=&sign=58e6595476315593d91b84f6e510c3eb

      def return_url_process

        dict={}

        dict["cmdno"]="1"

        dict["pay_result"]=params[:pay_result]

        dict["date"]=params[:date]

        dict["transaction_id"]=params[:transaction_id]

        dict["sp_billno"]=params[:sp_billno]

        dict["total_fee"]=params[:total_fee]

        dict["fee_type"]=params[:fee_type]

        dict["attach"]=params[:attach]

        dict["key"]="dfasdfasdfasdfasdfasdfasdfasdfsadf"#密钥

        logger.debug("=================tenpay==================")

        logger.debug(dict)

        gen_sign=TenpayLib::gen_sign2(dict)

        logger.debug("gen_sign")

        logger.debug(gen_sign)

        @show_url="http://www.15-1688.com:3000/pay_failure"

        ps=PaymentStatus.new

        ps.url=request.request_uri

        ps.ip=request.remote_ip

        ps.from="财富通"

       if gen_sign==params[:sign]

          sn=dict["sp_billno"]

          order=Order.find_by_sn(sn)

          ps.order_id=order.id

          if dict["pay_result"]=="0"

            ps.name="付款成功"

            ps.success=true

            ps.transaction_id=dict["transaction_id"]

            ps.sn=sn

            ps.total_fee=(dict["total_fee"].to_f/100).to_s

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

            @show_url="http://www.15-1688.com:3000/pay_success"

          else

            ps.name="付款未成功"

          end

        else

          ps.name="签名不对"

          logger.debug("签名不对")

        end

        ps.save

        render "return_url"

      end

      def query(sn,attach=nil)

        dict={}

        dict["attach"]=attach||""

        dict["bargainor_id"]="32123123"#商家id

        dict["charset"]="UTF-8"

        dict["cmdno"]=2

        dict["date"]=sn[0,8]

        dict["output_xml"]=1

        dict["sp_billno"]=sn

        dict["transaction_id"]=dict["bargainor_id"]+dict["date"]+sn[-10,10]

        a=dict.clone

        dict["key"]="adfadfasdfasdfasdfasdfasdfasdfasdfasdf"#密钥

        a["sign"]=gen_sign2(dict).upcase

        r="http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi?"

        #待完成,此接口为post形式

      end

    end

  • 相关阅读:
    凸包Graham Scan算法实现
    人与人之间的差距是从大学开始的
    google笔试题两个n维数组logn求中位数问题 zz
    matlab中使用结构体
    人脸识别理论与应用研究 zz
    如果让我再读一次研究生 zz
    Open Yale CourseFinancial MarketNote1 zz
    哈尔小波变换示例
    全屏模式 硬缩放
    APE结合键盘控制角色运动 转
  • 原文地址:https://www.cnblogs.com/lexus/p/1896239.html
Copyright © 2020-2023  润新知