Skip to content

支付宝支付接口开发

支付宝支付接口请求

接口说明

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

支付流程

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

  1. 小程序/APP/浏览器网站下单
  2. 网店把订单信息提交到火蚁支付宝接口
  3. 火蚁提交给支付宝服务器,然后将创建订单结果及重定向 url 返回网店
  4. 网店跳转支付宝付款链接,调起支付宝支付(不同场景调起支付方式不同,如 PC 端浏览器展示付款二维码,在移动端浏览器跳转 app 应用)
  5. 用户完成支付后,火蚁通过 notifyUrl 将结果通知到网店

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

表单参数格式说明

变量命名类型最大长度是否必填描述
订单信息
merNoString5商户编号.
说明:支付平台分配给商户的唯一标识
gatewayNoString8商户网关接入号.
说明:支付平台分配给商户接入支付平台的唯一标识
orderNoString50网店订单编号
规则:商户订单号。唯一标识,同一网店系统订单号不要重复
orderCurrencyString3支付币种
说明:3位国际货币通用码,货币代码见附件。
orderAmountString10订单总金额
规则:小数点后保留2位,若超过2位则自动四舍五入
shipFeeString100运费
只能为数字,并且只限小数点后2位小数.
discountString100折扣
折扣默认为负值
只能为数字,并且只限小数点后2位小数.
goodsInfoString5000货物详细信息
包括货物名称,ID,单价,数量.
具体格式详见附录:货物信息
本地支付信息
paymentMethodString50支付方式,支付宝支付固定Alipay.
tradeTypeString50交易类型
WEB: PC端网站支付
WAP: 移动端网站支付
APP: app支付
MINI_APP: 小程序支付
limitPayString50指定支付方式,仅MINI_APP时需指定支付方式,如TRUEMONEY, ALIPAY_HK, TNG, ALIPAY_CN, GCASH, DANA, TOSS
ipString50用户IP
osString50操作系统,IOS或ANDROID,交易类型WAP或APP方式下提供
收货人信息
shipFirstNameString100收货人姓
shipLastNameString100收货人名
shipEmailString100收货人邮箱
shipPhoneString100收货人电话
shipCountryString100收货人国家
ISO 3166-1两位国家代码,如:US.
shipStateString100收货人省份
shipCityString100收货人城市
shipAddressString100收货人详细地址
shipZipString100收货人邮编
其他信息
notifyUrlString200异步通知地址. 支付完成以后, 平台将支付结果以服务器端POST方式通知到此地址,该异步地址收到请求返回OK即可,否则,在一段时间内最多会返回3次.
signInfoString32加密签名信息
对支付提交参数进行组合,然后再进行sha256方法签名,具体参数组合顺序如下,顺序不能改变:merNo + gatewayNo +orderNo + orderCurrency +orderAmount + notifyUrl + merKey(密钥, 在商户后台可以查询到),这些参数顺序不能修改,中间不要出现任何空格和+号.
具体详见附录:sha256签名方式
remarkString500说明:存放商户自己的信息,随订单传送到支付平台,当订单返回时原封不动的返回给商户.

支付提交示例

java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "merNo=30000&gatewayNo=30000001&orderNo=12345678&orderCurrency=USD&orderAmount=100.00&goodsInfo=Good1-Name#,#123#,#50.00#,#2&paymentMethod=Alipay&tradeType=WAP&os=ANDROID&ip=127.0.0.1&notifyUrl=https://xxx.com/notifyurl&signInfo=61be55a8e2f6b4e172338b...");
Request request = new Request.Builder()
  .url("https://sandbox.fireantspay.com/AlipayInterface")
  .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 => 'https://sandbox.fireantspay.com/AlipayInterface',
  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=30000&gatewayNo=30000001&orderNo=12345678&orderCurrency=USD&orderAmount=100.00&goodsInfo=Good1-Name%23%2C%23123%23%2C%2350.00%23%2C%232&paymentMethod=Alipay&tradeType=WAP&os=ANDROID&ip=127.0.0.1&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: 'https://sandbox.fireantspay.com/AlipayInterface',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  form: {
    merNo: '30000',
    gatewayNo: '30000001',
    orderNo: '12345678',
    orderCurrency: 'USD',
    orderAmount: '100.00',
    goodsInfo: 'Good1-Name#,#123#,#50.00#,#2',
    paymentMethod: 'Alipay',
    tradeType: 'WAP',
    os: 'ANDROID',
    ip: '127.0.0.1',
    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/AlipayInterface',
  method: 'POST',
  timeout: 0,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: {
    merNo: '30000',
    gatewayNo: '30000001',
    orderNo: '12345678',
    orderCurrency: 'USD',
    orderAmount: '100.00',
    goodsInfo: 'Good1-Name#,#123#,#50.00#,#2',
    paymentMethod: 'Alipay',
    tradeType: 'WAP',
    os: 'ANDROID',
    ip: '127.0.0.1',
    notifyUrl: 'https://xxx.com/notifyurl',
    signInfo: '61be55a8e2f6b4e172338b...'
  }
}

$.ajax(settings).done(function (response) {
  console.log(response)
})
perl
curl --location 'https://sandbox.fireantspay.com/AlipayInterface' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'merNo=30000' \
--data-urlencode 'gatewayNo=30000001' \
--data-urlencode 'orderNo=12345678' \
--data-urlencode 'orderCurrency=USD' \
--data-urlencode 'orderAmount=100.00' \
--data-urlencode 'goodsInfo=Good1-Name#,#123#,#50.00#,#2' \
--data-urlencode 'paymentMethod=Alipay' \
--data-urlencode 'tradeType=WAP' \
--data-urlencode 'os=ANDROID' \
--data-urlencode 'ip=127.0.0.1' \
--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
-1: 待处理
0: 失败
1: 成功
orderInfoString100返回交易信息
交易结束后给予的支付结果提示
billAddressString100账单地址
支付成功返回交易的账单地址(账单描述符)
支付失败则返回空值
returnTypeString1返回类型
1:浏览器实时返回 2:服务器实时返回
3:服务器异步返回
服务器实时返回为 xml,服务器异步返回及浏览器返回为键值对表单.
orderErrorCodeString50失败码
各种失败原因对应的失败码,成功一般为 00.
paymentMethodString50支付方式,支付宝支付: Alipay
signInfoString32加密签名信息
对支付结果的参数进行 sha256 方法签名,具体参数组合顺序如下, 顺序不能改变。
sha256(merNo + gatewayNo + tradeNo + orderNo + orderCurrency + orderAmount + orderStatus + orderInfo + merKey)
remarkString500备注
redirectUrlString500重定向 url,仅当交易返回待处理时存在,用户跳转该链接进行付款.
redirectUrl 说明

支付返回示例

交易待处理,需要商户做下一步处理:

xml
<?xml version="1.0" encoding="UTE-8"?>  
<respon>  
    <merNo>10000</merNo>  
    <gatewayNo>10000001</gatewayNo>  
    <tradeNo>HY024111317280195515514</tradeNo>  
    <orderNo>12345</orderNo>  
    <orderAmount>10.00</orderAmount>  
    <orderCurrency>USD</orderCurrency>  
    <orderStatus>-1</orderStatus>  
    <orderErrorCode>PENGDING</orderErrorCode>  
    <orderInfo></orderInfo>  
    <paymentMethod>Alipay</paymentMethod>  
    <returnType>2</returnType>  
    <billAddress></billAddress>  
    <redirectUrl>https://open-sea.alipayplus.com/api/...</redirectUrl>  
    <signInfo>C6EB2353B92CFEA3698CE2F5332CB882...</signInfo>  
    <remark></remark>  
</respon>

交易失败(参数校验不通过):

xml
<?xm1 version="1.0" encoding="UTE-8"?>
<respon>
    <merNo>10000</merNo>  
    <gatewayNo>10000001</gatewayNo>  
    <tradeNo>HY024111317280195515514</tradeNo>  
    <orderNo>12345</orderNo>  
    <orderAmount>10.00</orderAmount>  
    <orderCurrency>USD</orderCurrency>  
    <orderStatus>0</orderStatus>  
    <orderErrorCode>I0133</orderErrorCode>  
    <orderInfo>交易类型只能为WEB,WAP,APP,MINI_APP</orderInfo>  
    <paymentMethod>Alipay</paymentMethod>  
    <returnType>2</returnType>  
    <billAddress></billAddress>  
    <redirectUrl></redirectUrl>  
    <signInfo>C6EB2353B92CFEA3698CE2F5332CB882...</signInfo>  
    <remark></remark>  
</respon>

交易失败(支付宝服务端错误):

xml
<?xm1 version="1.0" encoding="UTE-8"?>
<respon>
    <merNo>10000</merNo>  
    <gatewayNo>10000001</gatewayNo>  
    <tradeNo>HY024111317280195515514</tradeNo>  
    <orderNo>12345</orderNo>  
    <orderAmount>10.00</orderAmount>  
    <orderCurrency>USD</orderCurrency>  
    <orderStatus>0</orderStatus>  
    <orderErrorCode>PARAM_ILLEGAL</orderErrorCode>  
    <orderInfo>env.terminalType should be correct Type.</orderInfo>  
    <paymentMethod>Alipay</paymentMethod>  
    <returnType>2</returnType>  
    <billAddress></billAddress>  
    <redirectUrl></redirectUrl>  
    <signInfo>C6EB2353B92CFEA3698CE2F5332CB882...</signInfo>  
    <remark></remark>
</respon>

异步通知(成功):

txt
orderErrorCode=00&signInfo=4EF256E175307636299F6559C3F89CD94585D3E42DA33985BE400DCBE5FFF779&orderNo=12345&gatewayNo=10000001&tradeNo=HY024111317280195515514&orderCurrency=USD&orderStatus=1&remark=备注&orderAmount=10.00&merNo=10000&billAddress=LARTIN&orderInfo=Approved&paymentMethod=Alipay&returnType=3

redirectUrl 说明

redirectUrl 支付宝付款链接,在不同场景将表现出不同的支付效果.

redirectUrl说明