財富通直連接口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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章