财富通直连接口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

原文地址:https://www.cnblogs.com/lexus/p/1896239.html