支付宝支付接口开发
支付宝支付接口请求
接口说明
- 请参照按照举例的格式,填写相关信息
- 请商户按照下表中的字段名称提交字段,参数名称区分大小写。
- 发送本系统网关的指令均以 POST 方式发送,并且使用 UTF8 编码格式。
- 支付参数提交前一定要把每一个参数值先去除前后空格后,再组合签名和传值。
支付流程
该接口支付采用的服务器端对接,即 Server-To-Server 模式(非浏览器表单传值)。所以在整个支付过程中,浏览器中的 URL 地址不会发生改变。具体流程如下:
- 小程序/APP/浏览器网站下单
- 网店把订单信息提交到火蚁支付宝接口
- 火蚁提交给支付宝服务器,然后将创建订单结果及重定向 url 返回网店
- 网店跳转支付宝付款链接,调起支付宝支付(不同场景调起支付方式不同,如 PC 端浏览器展示付款二维码,在移动端浏览器跳转 app 应用)
- 用户完成支付后,火蚁通过 notifyUrl 将结果通知到网店
其中:第 2 步—第 3 步为服务器提交数据,浏览器 URL 不会改变。具体编程语言采用的方式可能会有些差异,支付提交示例。
表单参数格式说明
| 变量命名 | 类型 | 最大长度 | 是否必填 | 描述 |
|---|---|---|---|---|
| 订单信息 | ||||
| merNo | String | 5 | 是 | 商户编号. 说明:支付平台分配给商户的唯一标识 |
| gatewayNo | String | 8 | 是 | 商户网关接入号. 说明:支付平台分配给商户接入支付平台的唯一标识 |
| orderNo | String | 50 | 是 | 网店订单编号 规则:商户订单号。唯一标识,同一网店系统订单号不要重复 |
| orderCurrency | String | 3 | 是 | 支付币种 说明:3位国际货币通用码,货币代码见附件。 |
| orderAmount | String | 10 | 是 | 订单总金额 规则:小数点后保留2位,若超过2位则自动四舍五入 |
| shipFee | String | 100 | 否 | 运费 只能为数字,并且只限小数点后2位小数. |
| discount | String | 100 | 否 | 折扣 折扣默认为负值 只能为数字,并且只限小数点后2位小数. |
| goodsInfo | String | 5000 | 是 | 货物详细信息 包括货物名称,ID,单价,数量. 具体格式详见附录:货物信息 |
| 本地支付信息 | ||||
| paymentMethod | String | 50 | 是 | 支付方式,支付宝支付固定Alipay. |
| tradeType | String | 50 | 是 | 交易类型 WEB: PC端网站支付 WAP: 移动端网站支付 APP: app支付 MINI_APP: 小程序支付 |
| limitPay | String | 50 | 否 | 指定支付方式,仅MINI_APP时需指定支付方式,如TRUEMONEY, ALIPAY_HK, TNG, ALIPAY_CN, GCASH, DANA, TOSS |
| ip | String | 50 | 否 | 用户IP |
| os | String | 50 | 否 | 操作系统,IOS或ANDROID,交易类型WAP或APP方式下提供 |
| 收货人信息 | ||||
| shipFirstName | String | 100 | 否 | 收货人姓 |
| shipLastName | String | 100 | 否 | 收货人名 |
| shipEmail | String | 100 | 否 | 收货人邮箱 |
| shipPhone | String | 100 | 否 | 收货人电话 |
| shipCountry | String | 100 | 否 | 收货人国家 ISO 3166-1两位国家代码,如:US. |
| shipState | String | 100 | 否 | 收货人省份 |
| shipCity | String | 100 | 否 | 收货人城市 |
| shipAddress | String | 100 | 否 | 收货人详细地址 |
| shipZip | String | 100 | 否 | 收货人邮编 |
| 其他信息 | ||||
| notifyUrl | String | 200 | 是 | 异步通知地址. 支付完成以后, 平台将支付结果以服务器端POST方式通知到此地址,该异步地址收到请求返回OK即可,否则,在一段时间内最多会返回3次. |
| signInfo | String | 32 | 是 | 加密签名信息 对支付提交参数进行组合,然后再进行sha256方法签名,具体参数组合顺序如下,顺序不能改变:merNo + gatewayNo +orderNo + orderCurrency +orderAmount + notifyUrl + merKey(密钥, 在商户后台可以查询到),这些参数顺序不能修改,中间不要出现任何空格和+号. 具体详见附录:sha256签名方式 |
| remark | String | 500 | 否 | 说明:存放商户自己的信息,随订单传送到支付平台,当订单返回时原封不动的返回给商户. |
支付提交示例
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¬ifyUrl=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¬ifyUrl=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 参数如:支付返回示例。
表单参数格式说明
| 参数名称 | 类型 | 最大长度 | 描述 |
|---|---|---|---|
| merNo | String | 5 | 商户编号 说明:平台分配给商户的唯一标识 |
| gatewayNo | String | 8 | 商户网关接入号 说明:平台分配给商户接入支付平台的唯一标识 |
| tradeNo | String | 50 | 流水订单号 本支付网关处理的交易流水号,唯一标识 |
| orderNo | String | 50 | 网店订单编号 对应订单支付接口的 orderNo 参数 |
| orderCurrency | String | 3 | 订单币种 说明:3 位国际货币通用码 |
| orderAmount | String | 10 | 订单金额 |
| orderStatus | String | 1 | 交易状态: 返回数字:-1/0/1 -1: 待处理 0: 失败 1: 成功 |
| orderInfo | String | 100 | 返回交易信息 交易结束后给予的支付结果提示 |
| billAddress | String | 100 | 账单地址 支付成功返回交易的账单地址(账单描述符) 支付失败则返回空值 |
| returnType | String | 1 | 返回类型 1:浏览器实时返回 2:服务器实时返回 3:服务器异步返回 服务器实时返回为 xml,服务器异步返回及浏览器返回为键值对表单. |
| orderErrorCode | String | 50 | 失败码 各种失败原因对应的失败码,成功一般为 00. |
| paymentMethod | String | 50 | 支付方式,支付宝支付: Alipay |
| signInfo | String | 32 | 加密签名信息 对支付结果的参数进行 sha256 方法签名,具体参数组合顺序如下, 顺序不能改变。 sha256(merNo + gatewayNo + tradeNo + orderNo + orderCurrency + orderAmount + orderStatus + orderInfo + merKey) |
| remark | String | 500 | 备注 |
| redirectUrl | String | 500 | 重定向 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=3redirectUrl 说明
redirectUrl 支付宝付款链接,在不同场景将表现出不同的支付效果.

