Skip to content

直连支付接口开发

直连支付接口请求

接口说明

  • 测试连接本系统接口,则所有的交易都不会产生费用,不能划款。
  • 请参照按照举例的格式,填写相关信息。
  • 请商户按照下表中的字段名称提交字段,参数名称区分大小写。
  • 发送本系统网关的指令均以 POST 方式发送,并且使用 UTF8 编码格式。
  • 支付参数提交前一定要把每一个参数值先去除前后空格后,再组合签名和传值。

支付流程

该接口支付采用的服务器端对接,即 Server-To-Server 模式(非浏览器表单传值)。所以在整个支付过程中,浏览器中的 URL 地址不会发生改变。具体流程如下:

  1. 网店下订单
  2. 网店填信用卡信息
  3. 把订单信息(包括信用卡信息)提交到火蚁直连接口
  4. 火蚁提交给银行,然后把支付结果返回
  5. 网店处理返回的支付结果

其中:第 3 步 — 第 4 步为服务器提交数据,浏览器 URL 不会改变。具体编程语言采用的方式可能会有些差异,支付提交示例

支付网关地址

表单参数格式说明

变量命名类型最大长度是否必填描述
订单信息
merNoString5商户编号
说明:支付平台分配给商户的唯一标识
gatewayNoString8商户网关接入号
说明:支付平台分配给商户接入支付平台的唯一标识
orderNoString50网店订单编号
规则:商户订单号。唯一标识,同一网店系统订单号不要重复
orderCurrencyString3支付币种
说明:3位国际货币通用码,货币代码见附件。
orderAmountString10订单总金额
规则:小数点后保留2位,若超过2位则自动四舍五入
shipFeeString100运费
规则:只能为数字,并且只限小数点后2位小数
discountString100折扣
规则:折扣默认为负值,只能为数字,并且只限小数点后2位小数.
goodsInfoString5000货物详细信息,实体商品必传
规则:包括货物名称,ID,单价,数量,具体格式详见附录:货物信息
信用卡信息
cardNoString20信用卡卡号
cardExpireMonthString2信用卡有效月份。示例:05
cardExpireYearString4信用卡有效年份。示例:2026
cardSecurityCodeString4信用卡背面签名条一串数字的后3位
issuingBankString200发卡银行
持卡人信息
firstNameString100持卡人名
lastNameString50持卡人姓
emailString200持卡人电子邮件
ipString50持卡人IP
phoneString50持卡人电话
countryString100持卡人国家,ISO 3166-1两位国家代码,如:US.
stateString100持卡人所在州
cityString100持卡人城市
addressString500持卡人详细联系地址
zipString100持卡人邮政编码
收货人信息
shipFirstNameString100收货人姓
shipLastNameString100收货人名
shipEmailString100收货人邮箱
shipPhoneString100收货人电话
shipCountryString100收货人国家,ISO 3166-1两位国家代码,如:US.
shipStateString100收货人省份
shipCityString100收货人城市
shipAddressString100收货人详细地址
shipZipString100收货人邮编
浏览器信息
osString50持卡人电脑操作系统
browserString50浏览器类型
browserLangString50浏览器语言,通过 navigator.language 获取.
timeZoneString50时区,用户本地时间和UTC(协调世界时)的时间差,以小时为单位,如东八区为8
resolutionString50屏幕分辨率,像素宽x高,如1920x1080
acceptHeaderString100浏览器Accept请求头,指定客户端能够接收的内容类型
javaEnabledString50持卡人浏览器是否支持并启用了Java ,可通过navigator.javaEnabled() 获取.
colorDepthString50屏幕调色板的深度,以每像素位数为单位,如24。可通过 screen.colorDepth 获取.
userAgentString1000浏览器user-Agent请求头
isCopyCardString50卡号输入是否为:复制粘贴(0:否,1:是。)
deviceNoString100设备指纹,配合前端JS使用
uniqueIdString100唯一Id,配合前端JS使用
interfaceModeString100接口类型 格式:网店类型_网店版本
如果是自建的系统,则可以通语言代替网店类型,而不用写版本类型
例如:ZENCART_1.3.9 或者PHP
其他信息
webSiteString200来源网址(即购物的网站域名)
notifyUrlString200异步通知地址,支付完成以后,会延时把支付结果通过服务器端Post方式返回到此地址,该异步地址收到请求返回OK即可,否则,在一段时间内最多会返回3次。
signInfoString32加密签名信息
对支付提交参数进行组合,然后再进行sha256方法签名,具体参数组合顺序如下,顺序不能改变:merNo + gatewayNo +orderNo + orderCurrency +orderAmount + cardNo + cardExpireYear + cardExpireMonth+ cardSecurityCode + merKey(密钥,在商户后台可以查询到),这些参数顺序不能修改,中间不要出现任何空格和+号.
具体详见附录:sha256签名方式
remarkString500说明:存放商户自己的信息,随订单传送到支付平台,当订单返回时原封不动的返回给商户.
returnUrlString500当发生3D重定向时,支付结束后浏览器通过此URL返回商户网店.

支付提交示例

java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create
	(mediaType, "merNo=80000
	&gatewayNo=80000001
	&orderNo=12345678
	&orderCurrency=USD
	&orderAmount=100.00
	&goodsInfo=Smart watch#,#123#,#50.00#,#2
	&cardNo=4414444444444444&
	cardExpireMonth=01
	&cardExpireYear=2027
	&cardSecurityCode=123
	&firstName=Doe
	&lastName=John
	&email=test@test.com
	&ip=12.150.22.41
	&phone=0123456
	&country=US
	&city=New York&address=456 7th Street
	&zip=10001
	&returnUrl=https://xxx.com/returnUrl&webSite=https://xxx.com
	&notifyUrl=https://xxx.com/notifyurl
	&signInfo=61be55a8e2f6b4e172338b");
Request request = new Request.Builder()
  .url("https://sandbox.fireantspay.com/TPInterface")
  .method("POST", body)
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .build();
Response response = client.newCall(request).execute();
php
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'sandbox.fireantspay.com/TPInterface',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => 'merNo=80000&gatewayNo=80000001
	&orderNo=12345678&orderCurrency=USD&orderAmount=100.00&
	goodsInfo=Smart%20watch%23%2C%23123%23%2C%2350.00%23%2C%232&
	cardNo=4414444444444444&cardExpireMonth=01&cardExpireYear=2027&
	cardSecurityCode=123&firstName=Doe&lastName=John&
	email=test%40test.com&ip=12.150.22.41&phone=0123456&country=US&
	city=New%20York&address=456%207th%20Street&zip=10001&
	returnUrl=https%3A%2F%2Fxxx.com%2FreturnUrl&
	webSite=https%3A%2F%2Fxxx.com&
	notifyUrl=https%3A%2F%2Fxxx.com%2Fnotifyurl
	&signInfo=61be55a8e2f6b4e172338b',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/x-www-form-urlencoded'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
js
var request = require('request')
var options = {
  method: 'POST',
  url: 'sandbox.fireantspay.com/TPInterface',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  form: {
    merNo: '80000',
    gatewayNo: '80000001',
    orderNo: '12345678',
    orderCurrency: 'USD',
    orderAmount: '100.00',
    goodsInfo: 'Smart watch#,#123#,#50.00#,#2',
    cardNo: '4414444444444444',
    cardExpireMonth: '01',
    cardExpireYear: '2027',
    cardSecurityCode: '123',
    firstName: 'Doe',
    lastName: 'John',
    email: 'test@test.com',
    ip: '12.150.22.41',
    phone: '0123456',
    country: 'US',
    city: 'New York',
    address: '456 7th Street',
    zip: '10001',
    returnUrl: 'https://xxx.com/returnUrl',
    webSite: 'https://xxx.com',
    notifyUrl: 'https://xxx.com/notifyurl',
    signInfo: '61be55a8e2f6b4e172338b'
  }
}
request(options, function (error, response) {
  if (error) throw new Error(error)
  console.log(response.body)
})
js
var settings = {
  url: 'https://sandbox.fireantspay.com/TPInterface',
  method: 'POST',
  timeout: 0,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: {
    merNo: '80000',
    gatewayNo: '80000001',
    orderNo: '12345678',
    orderCurrency: 'USD',
    orderAmount: '100.00',
    goodsInfo: 'Smart watch#,#123#,#50.00#,#2',
    cardNo: '4414444444444444',
    cardExpireMonth: '01',
    cardExpireYear: '2027',
    cardSecurityCode: '123',
    firstName: 'Doe',
    lastName: 'John',
    email: 'test@test.com',
    ip: '12.150.22.41',
    phone: '0123456',
    country: 'US',
    city: 'New York',
    address: '456 7th Street',
    zip: '10001',
    returnUrl: 'https://xxx.com/returnUrl',
    webSite: 'https://xxx.com',
    notifyUrl: 'https://xxx.com/notifyurl',
    signInfo: '61be55a8e2f6b4e172338b'
  }
}

$.ajax(settings).done(function (response) {
  console.log(response)
})
perl
curl --location 'sandbox.fireantspay.com/TPInterface' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'merNo=80000' \
--data-urlencode 'gatewayNo=80000001' \
--data-urlencode 'orderNo=12345678' \
--data-urlencode 'orderCurrency=USD' \
--data-urlencode 'orderAmount=100.00' \
--data-urlencode 'goodsInfo=Smart watch#,#123#,#50.00#,#2' \
--data-urlencode 'cardNo=4414444444444444' \
--data-urlencode 'cardExpireMonth=01' \
--data-urlencode 'cardExpireYear=2027' \
--data-urlencode 'cardSecurityCode=123' \
--data-urlencode 'firstName=Doe' \
--data-urlencode 'lastName=John' \
--data-urlencode 'email=test@test.com' \
--data-urlencode 'ip=12.150.22.41' \
--data-urlencode 'phone=0123456' \
--data-urlencode 'country=US' \
--data-urlencode 'city=New York' \
--data-urlencode 'address=456 7th Street' \
--data-urlencode 'zip=10001' \
--data-urlencode 'returnUrl=https://xxx.com/returnUrl' \
--data-urlencode 'webSite=https://xxx.com' \
--data-urlencode 'notifyUrl=https://xxx.com/notifyurl' \
--data-urlencode 'signInfo=61be55a8e2f6b4e172338b'

直连支付接口响应

接口说明

本网关系统接收商户发来的订单后按照客户支付请求进行支付处理,处理完成后在本系统网关将实时把支付结果用 XML 格式进行返回,返回编码格式为 UTF-8。

返回数据说明

该支付返回数据为 XML 格式,需要先把 XML 进行解析,然后再判断订单的支付结果,具体的 XML 参数如:支付返回示例

表单参数格式说明

参数名称类型最大长度描述
merNoString5商户编号
说明:平台分配给商户的唯一标识
gatewayNoString8商户网关接入号
说明:平台分配给商户接入支付平台的唯一标识
tradeNoString50流水订单号
本支付网关处理的交易流水号,唯一标识
orderNoString50网店订单编号
对应订单支付接口的 orderNo 参数
orderCurrencyString3订单币种
说明:3 位国际货币通用码
orderAmountString10订单金额
orderStatusString1订单交易状态:
返回数字:-1/0/1/2
-1: 待处理
0: 失败
1: 成功
2:预授权批准金额
orderInfoString50返回交易信息
交易结束后给予的支付结果提示
billAddressString100账单地址
支付成功返回交易的账单地址(账单描述符)
支付失败则返回空值
returnTypeString1返回类型
1:浏览器实时返回 2:服务器实时返回 3:服务器异步返回
服务器实时返回为 xml,服务器异步返回及浏览器返回均为键值对表单。
orderErrorCodeString50失败码
各种失败原因对应的失败码
paymentMethodString50支付方式,信用卡:Credit Card
signInfoString32加密签名信息
对支付结果的参数进行组合,然后再进行 sha256 方法签名,具体参数组合顺序如下, 顺序不能改变。
merNo + gatewayNo +tradeNo+orderNo + orderCurrency +orderAmount + orderStatus+orderInfo+merKey
具体详见附录:sha256 签名方式
remarkString500备注
redirectUrlString5003D 重定向 url,返回此参数则需要客户端重定向 url 发起 3D 验证.

支付返回示例

xml
<?xm1 version="1.0" encoding="UTE-8"?>
<respon>
    <merNo>10000</merNo>
    <gatewayNo>10000001</gatewayNo>
    <tradeNo>T2016081117245925449077</tradeNo>
    <orderNo>Test-938788</orderNo>
    <orderAmount>32.50</orderAmount>
    <orderCurrency>USD</orderCurrency>
    <orderStatus>1</orderStatus>
    <orderErrorCode>00</orderErrorCode>
    <orderInfo>Transaction succeeded</orderInfo>
    <paymentMethod>Credit Card</paymentMethod>
    <returnType>2</returnType>
    <billAddress>Gadent.ltd</billAddress>
    <signInfo>C6EB2353B92CFEA3698CE2F5332CB882C0379A5E58A7069534B944F046c26F8r</signInfo>
    <remark></remark>
</respon>