`
mlzboy
  • 浏览: 726475 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 

 

 

分享到:
评论

相关推荐

    Ruby for Rails

    Ruby for Rails 英文原版, pdf格式 &lt;br&gt;本书是一部专门为Rails实践而写的经典Ruby著作,由四部分组成,共17章。第一部分讲述Ruby和Rails的编程环境。第二部分和第三部分与 Rails紧密联系,着重对Ruby这门语言...

    Ruby+for+Rails

    **Ruby for Rails** Ruby是一种面向对象的动态编程语言,它以其简洁、优雅的语法和强大的元编程能力而闻名。在Web开发领域,Ruby与Rails框架的结合,即Ruby on Rails(RoR),开创了Web应用的新纪元。Ruby on Rails...

    OAuth gem for rails3

    OAuth gem for Rails3 是一个针对Ruby on Rails框架的授权库,它实现了OAuth协议,以便于在Rails应用中安全地处理第三方服务的授权流程。OAuth是一个开放标准,允许用户让第三方应用在无需分享用户名和密码的情况下...

    Rbuy for Rails源代码

    “Rbuy for Rails源代码”这一标题表明我们关注的是一个名为“Rbuy”的项目,它是为Rails框架开发的一个特定组件或应用。Rails是Ruby on Rails的简称,是一个基于Ruby语言的开源Web应用程序框架,遵循MVC(模型-视图...

    ruby on rails for dummies

    《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...

    RJS Templates for Rails

    **RJS Templates for Rails** RJS模板是Rails框架在1.1版本中引入的一种创新且功能强大的新模板类型。它们的出现极大地提升了Rails应用中JavaScript的编写效率和可维护性,尤其是在处理动态交互和页面更新时。RJS,...

    Rails for Zombies

    Rails for Zombies是一份面向初学者的教程,通过学习本教程,用户能够掌握创建Ruby on Rails应用程序的基本知识。 Rails for Zombies教程中的"Deep in the CRUD"部分深入讲解了CRUD(创建Create、读取Retrieve、...

    Agile Web Development with Rails for Rails 3.2

    ### Agile Web Development with Rails for Rails 3.2 #### 核心知识点概览 - **Rails 3.2概述** - **敏捷开发方法论** - **Model-View-Controller (MVC) 模式** - **Ruby on Rails基础与高级特性** - **面向对象...

    Rails 3 in Action

    《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...

    Learning Devise for Rails

    This book is for web developers who are getting started with Rails and are looking for authentication solutions, as well as for Rails developers who are looking to extend their implementation of ...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    Bootstrap for Rails

    Bootstrap for Rails is for Rails web developers who are struggling to get their website designs right. It will enable you to create beautiful responsive websites in minutes without writing much CSS ...

    Rails3常用命令行命令

    Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...

    Ruby For Rails(英文版)(清晰文字pdf)

    ### Ruby for Rails 知识点概述 #### 一、书籍背景与重要性 - **书籍定位**:《Ruby for Rails》被广泛认为是学习Ruby语言的必读之作,特别是对于那些希望利用Ruby on Rails(RoR)进行高效Web开发的学习者而言。...

Global site tag (gtag.js) - Google Analytics