您正在进行的交易存在较大风险,为了您的资金安全,您暂时不能支付此次交易,您可以拨打财付通热线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