您正在進行的交易存在較大風險,爲了您的資金安全,您暫時不能支付此次交易,您可以撥打財付通熱線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