概述

银行代付,是指商家可以在EPAY提现规定的当地币种到用户的银行账号

支付流程

商家可以参考如下流程图,完成代付对接。

image

流程说明

  1. 用户访问您的页面发起快捷代付(提现)交易申请(银行或现金)。
  2. 您的后台服务调用getLimit接口到EPAY网关后台服务获取交易限额。
  3. EPAY网关后台服务响应获取交易限额。
  4. 您的后台服务调用交易前的接口查询各种交易信息和条件。
  5. EPAY网关后台服务响应查询的数据。
  6. 用户访问您的页面发起交易请求。
  7. 您的后台服务调用createTransaction接口到EPAY网关后台服务创建交易。
  8. EPAY网关后台服务创建临时订单:订单状态status=9。
    • 如果订单时间大于10分钟,EPAY网关后台服务【主动】关闭订单:订单状态status=5,回调订单状态,并结束订单流程。
  9. 用户取消继续付款,您的后台服务调用cancelTransaction接口到EPAY网关后台服务取消订单。
    • EPAY网关后台服务【主动】关闭订单,订单状态status=5,回调订单状态,并结束订单流程
  10. 您的后台服务调用confirmTransaction接口到EPAY网关后台服务确认交易。
  11. EPAY网关后台服务创建正式订单,开始处理:订单状态status=1
  12. EPAY网关后台服务调用第三方银行完成付款交易
  13. 第三方银行AcquireerBank回调结果发送到EPAY网关后台服务。
  14. EPAY网关后台服务处理订单结果,包括订单成功:订单状态status=7,订单失败:订单状态status=6,【现金支付】进入待取款:订单状态status=19。
  15. EPAY网关后台服务发送回调结果给您的后台服务,通知交易订单已完成。
  16. 您的后台服务可以选择调用queryTransaction接口进行信息确认。
  17. EPAY网关后台服务响应queryTransaction接口数据(对于现金业务,通过此接口查询取款码)。
  18. 您的后台服务更新交易数据,完成订单状态。
  19. 您的后台服务通知用户订单完成状态。

创建订单

商家后台请求 createTransaction 的API接口,传入商家订单号、订单金额、币种等参数,及其他必填字段(具体可查看如下入参说明),创建EPAY临时代付订单。

注意:此时订单状态为冻结中(status=9)。

在10分钟内,商家可以调用取消订单 cancelTransaction 的API接口,关闭订单状态(status=5),也可以调用确认交易 confirmTransaction API接口,创建正式订单(status=1)。

如果超过10分钟未完成交易操作,系统将关闭订单状态(status=5)。

示例代码

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"sign\": \"{{sign}}\",\n    \"param\": {\n        \"epayAccount\": \"test2020@epay.com\",\n        \"category\": \"BANK\",\n        \"notifyUrl\": \"\",\n        \"merchantOrderNo\": \"202201019002\",\n        \"amount\": \"100\",\n        \"receiveAmount\": \"\",\n        \"settlementCurrency\": \"USD\",\n        \"receiveCurrency\": \"CNY\",\n        \"version\": \"V2.0.0\",\n        \"transactionType\": \"C2C\",\n        \"senderInfo\": {\n            \"surName\": \"Joe\",\n            \"givName\": \"Chang\",\n            \"idNumber\": \"A199267867\",\n            \"idType\": \"1\",\n            \"birthday\": \"1986-09-11\",\n            \"country\": \"TW\",\n            \"nationality\": \"TW\",\n            \"address\": \"shenzhen\",\n            \"purposeOfRemittance\":\"20\" \n        },\n        \"receiverInfo\": {\n            \"surName\": \"lu\",\n            \"givName\": \"hui\",\n            \"country\": \"CN\",\n            \"phone\":\"153666100\",\n            \"locationId\": \"3460\",\n            \"bankName\": \"AliPay\",\n            \"email\":\"\",\n            \"area\": \"236\"\n       \n        }\n    }\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/createTransaction")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

java

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"sign\": \"{{sign}}\",\n    \"param\": {\n        \"epayAccount\": \"test2020@epay.com\",\n        \"category\": \"BANK\",\n        \"notifyUrl\": \"\",\n        \"merchantOrderNo\": \"202201019002\",\n        \"amount\": \"100\",\n        \"receiveAmount\": \"\",\n        \"settlementCurrency\": \"USD\",\n        \"receiveCurrency\": \"CNY\",\n        \"version\": \"V2.0.0\",\n        \"transactionType\": \"C2C\",\n        \"senderInfo\": {\n            \"surName\": \"Joe\",\n            \"givName\": \"Chang\",\n            \"idNumber\": \"A199267867\",\n            \"idType\": \"1\",\n            \"birthday\": \"1986-09-11\",\n            \"country\": \"TW\",\n            \"nationality\": \"TW\",\n            \"address\": \"shenzhen\",\n            \"purposeOfRemittance\":\"20\" \n        },\n        \"receiverInfo\": {\n            \"surName\": \"lu\",\n            \"givName\": \"hui\",\n            \"country\": \"CN\",\n            \"phone\":\"153666100\",\n            \"locationId\": \"3460\",\n            \"bankName\": \"AliPay\",\n            \"email\":\"\",\n            \"area\": \"236\"\n       \n        }\n    }\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/createTransaction")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

python

import requests
import json

url = "http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/createTransaction"

payload = json.dumps({
  "sign": "{{sign}}",
  "param": {
    "epayAccount": "test2020@epay.com",
    "category": "BANK",
    "notifyUrl": "",
    "merchantOrderNo": "202201019002",
    "amount": "100",
    "receiveAmount": "",
    "settlementCurrency": "USD",
    "receiveCurrency": "CNY",
    "version": "V2.0.0",
    "transactionType": "C2C",
    "senderInfo": {
      "surName": "Joe",
      "givName": "Chang",
      "idNumber": "A199267867",
      "idType": "1",
      "birthday": "1986-09-11",
      "country": "TW",
      "nationality": "TW",
      "address": "shenzhen",
      "purposeOfRemittance": "20"
    },
    "receiverInfo": {
      "surName": "lu",
      "givName": "hui",
      "country": "CN",
      "phone": "153666100",
      "locationId": "3460",
      "bankName": "AliPay",
      "email": "",
      "area": "236"
    }
  }
})
headers = {
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

go

package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/createTransaction"
  method := "POST"

  payload := strings.NewReader(`{
    "sign": "{{sign}}",
    "param": {
        "epayAccount": "test2020@epay.com",
        "category": "BANK",
        "notifyUrl": "",
        "merchantOrderNo": "202201019002",
        "amount": "100",
        "receiveAmount": "",
        "settlementCurrency": "USD",
        "receiveCurrency": "CNY",
        "version": "V2.0.0",
        "transactionType": "C2C",
        "senderInfo": {
            "surName": "Joe",
            "givName": "Chang",
            "idNumber": "A199267867",
            "idType": "1",
            "birthday": "1986-09-11",
            "country": "TW",
            "nationality": "TW",
            "address": "shenzhen",
            "purposeOfRemittance":"20" 
        },
        "receiverInfo": {
            "surName": "lu",
            "givName": "hui",
            "country": "CN",
            "phone":"153666100",
            "locationId": "3460",
            "bankName": "AliPay",
            "email":"",
            "area": "236"

        }
    }
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

shell

printf '{
    "sign": "{{sign}}",
    "param": {
        "epayAccount": "test2020@epay.com",
        "category": "BANK",
        "notifyUrl": "",
        "merchantOrderNo": "202201019002",
        "amount": "100",
        "receiveAmount": "",
        "settlementCurrency": "USD",
        "receiveCurrency": "CNY",
        "version": "V2.0.0",
        "transactionType": "C2C",
        "senderInfo": {
            "surName": "Joe",
            "givName": "Chang",
            "idNumber": "A199267867",
            "idType": "1",
            "birthday": "1986-09-11",
            "country": "TW",
            "nationality": "TW",
            "address": "shenzhen",
            "purposeOfRemittance":"20" 
        },
        "receiverInfo": {
            "surName": "lu",
            "givName": "hui",
            "country": "CN",
            "phone":"153666100",
            "locationId": "3460",
            "bankName": "AliPay",
            "email":"",
            "area": "236"

        }
    }
}'| http  --follow --timeout 3600 POST 'http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/createTransaction' \
 Content-Type:'application/json'

入参说明

参数名称 参数说明
epayAccount 商家开通的EPAY账号
merchantOrderNo 商家订单号
version 版本号,当前版本号为V2.0.0,兼容版本V1.0.0
category 汇款方式:银行BANK,现金CASH
notifyUrl 回调地址,用于接收EPAY后台通知的订单结果:成功或失败
amount 订单金额
settlementCurrency 结算币种,多数情况传入USD
receiveAmount 收款金额
receiveCurrency 收款币种,如CNY
transactionType 交易模式 (C2C,B2C,B2B,C2B)
extendFields 额外字段
senderInfo 付款人信息,JSON格式,具体入参字段,根据 查询接口 获取后填写
注意:transactionType为C2C,C2B时必填
receiverInfo 收款人信息,JSON格式,具体入参字段,根据 查询接口 获取后填写
注意:transactionType为C2C,B2C时必填
senderBusiness 付款公司信息,JSON格式,具体入参字段,根据 查询接口 获取后填写
注意:transactionType为B2C,B2B时必填
receiverBusiness 收款公司信息,JSON格式,具体入参字段,根据 查询接口 获取后填写
注意:transactionType为C2B,B2B时必填

以上为业务参数说明,参数封装结构及sign签名请查看 开发指引>接入指南>接口规则>接口规范开发指引>接口签名

查询交易

商家可调用 queryTransaction(交易查询接口),通过商家订单号查询对应订单支付情况。

示例代码

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"param\": {\n    \"epayAccount\": \"test2020@epay.com\",\n    \"version\": \"V2.0.0\",\n    \"merchantOrderNo\": \"20210708220\"\n  },\n  \"sign\": \"{{sign}}\"\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

java

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"param\": {\n    \"epayAccount\": \"test2020@epay.com\",\n    \"version\": \"V2.0.0\",\n    \"merchantOrderNo\": \"20210708220\"\n  },\n  \"sign\": \"{{sign}}\"\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

python

import requests
import json

url = "http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction"

payload = json.dumps({
  "param": {
    "epayAccount": "test2020@epay.com",
    "version": "V2.0.0",
    "merchantOrderNo": "20210708220"
  },
  "sign": "{{sign}}"
})
headers = {
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

go

package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction"
  method := "POST"

  payload := strings.NewReader(`{
  "param": {
    "epayAccount": "test2020@epay.com",
    "version": "V2.0.0",
    "merchantOrderNo": "20210708220"
  },
  "sign": "{{sign}}"
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

shell

printf '{
  "param": {
    "epayAccount": "test2020@epay.com",
    "version": "V2.0.0",
    "merchantOrderNo": "20210708220"
  },
  "sign": "{{sign}}"
}'| http  --follow --timeout 3600 POST 'http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction' \
 Content-Type:'application/json'

入参说明

参数名称 参数说明
epayAccount 商家开通的EPAY账号
merchantOrderNo 商家订单号
version 版本号,当前版本号为V2.0.0,兼容版本V1.0.0

以上为业务参数说明,参数封装结构及sign签名请查看 开发指引>接入指南>接口规则>接口规范开发指引>接口签名

异步通知

EPAY通过POST 请求的方式(也可以通过创建订单时传入的successUrlMethod或者failUrlMethod字段来设置回调的请求方式)将支付结果作为参数通知到notifyUrl(创建订单时设置的地址),商家收到异步通知后可以对sign签名值做安全性校验,判断消息来源是EPAY后再对自身业务做逻辑处理。具体sign签名方法请查看 开发指引>接口签名

异步通知示例,请查看 开发指引>异步通知>回调示例

订单状态图

image

API列表

API名称 API描述 操作

| getRequiredField | 获取必填字段 | 查看文档 | | getBankList | 获取银行网点 | 查看文档 | | getCatalogue | 获取其他信息 | 查看文档 | | createTransaction | 创建订单 | 查看文档 | | confirmTransaction | 确认订单 | 查看文档 | | cancelTransaction | 取消订单 | 查看文档 | | queryTransaction | 查询交易 | 查看文档 |

results matching ""

    No results matching ""