概述

API代收,也叫快捷代收,是指交易过程中,需要商家单独开发页面封装请求参数,引导用户完成付款,实现商家充值到EPAY账号里。

支付流程

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

image

流程说明

  1. 用户访问您的页面发起快捷收款(充值)交易。

  2. 您的后台服务封装请求参数发送调用payinApi/sendTransaction交易接口到EPAY网关后台服务。

  3. EPAY网关后台服务收到请求,创建交易订单,开始处理,此时订单状态为处理中(status=0)。

  4. EPAY网关后台服务创建交易订单完成后,返回第三方银行付款Url地址给您的后台服务。

  5. 您的后台服务收到第三方银行付款Url地址后,重定向到第三方银行收银台页面。

  6. 用户在第三方银行收银台页面进行确认支付。

  7. 第三方银行AcquireerBank回调结果发送到EPAY网关后台服务。

  8. EPAY网关后台服务处理结果,更新订单状态为成功(status=7)。

  9. EPAY网关后台服务发送回调结果给您的后台服务,通知交易订单已完成。

  10. 您的后台服务可以选择调用queryTransaction接口进行信息确认。

  11. EPAY网关后台服务响应queryTransaction接口数据。

  12. 您的后台服务更新交易数据,完成订单状态。

  13. 您的后台服务通知用户订单完成状态。

创建订单

商家后台请求 sendTransaction 的API接口,传入商家订单号、订单金额、币种及收款账号等参数(具体可查看如下入参说明),创建EPAY代收订单。

注意:此时订单状态为处理中(status=1),可通过查询交易接口 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    \"merchantName\": \"epay\",\n    \"merchantOrderNo\": \"lx083031\",\n    \"receiveAmount\": \"\",\n    \"receiveCurrency\": \"USD\",\n    \"paymentAmount\": \"100\",\n    \"paymentCurrency\": \"BRL\",\n    \"paymentCountry\": \"BR\",\n    \"payerAccount \":\"\",\n    \"channelCode\": \"46\",\n    \"notifyUrl\": \"http://localhost/paymentApi/channel/send.do\",\n    \"remark\": \"\"\n  },\n  \"sign\": \"\"\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payinApi/sendTransaction")
  .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    \"merchantName\": \"epay\",\n    \"merchantOrderNo\": \"lx083031\",\n    \"receiveAmount\": \"\",\n    \"receiveCurrency\": \"USD\",\n    \"paymentAmount\": \"100\",\n    \"paymentCurrency\": \"BRL\",\n    \"paymentCountry\": \"BR\",\n    \"payerAccount \":\"\",\n    \"channelCode\": \"46\",\n    \"notifyUrl\": \"http://localhost/paymentApi/channel/send.do\",\n    \"remark\": \"\"\n  },\n  \"sign\": \"\"\n}");
Request request = new Request.Builder()
  .url("http://29597375fx.epaydev.xyz/capi/openapi/payinApi/sendTransaction")
  .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/payinApi/sendTransaction"

payload = json.dumps({
  "param": {
    "epayAccount": "test2020@epay.com",
    "version": "V2.0.0",
    "merchantName": "Mera",
    "merchantOrderNo": "lx083031",
    "receiveAmount": "",
    "receiveCurrency": "USD",
    "paymentAmount": "100",
    "paymentCurrency": "BRL",
    "paymentCountry": "BR",
    "payerAccount ": "",
    "channelCode": "46",
    "notifyUrl": "http://localhost/paymentApi/channel/send.do",
    "remark": ""
  },
  "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/payinApi/sendTransaction"
  method := "POST"

  payload := strings.NewReader(`{
  "param": {
    "epayAccount": "test2020@epay.com",
    "version": "V2.0.0",
    "merchantName": "Mera",
    "merchantOrderNo": "lx083031",
    "receiveAmount": "",
    "receiveCurrency": "USD",
    "paymentAmount": "100",
    "paymentCurrency": "BRL",
    "paymentCountry": "BR",
    "payerAccount ":"",
    "channelCode": "46",
    "notifyUrl": "http://localhost/paymentApi/channel/send.do",
    "remark": ""
  },
  "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",
    "merchantName": "epay",
    "merchantOrderNo": "lx083031",
    "receiveAmount": "",
    "receiveCurrency": "USD",
    "paymentAmount": "100",
    "paymentCurrency": "BRL",
    "paymentCountry": "BR",
    "payerAccount ":"",
    "channelCode": "46",
    "notifyUrl": "http://localhost/paymentApi/channel/send.do",
    "remark": ""
  },
  "sign": ""
}'| http  --follow --timeout 3600 POST 'http://29597375fx.epaydev.xyz/capi/openapi/payinApi/sendTransaction' \
 Content-Type:'application/json'

入参说明

参数名称 参数说明
epayAccount 商家开通的EPAY账号
merchantName 商家名称
merchantOrderNo 商家订单号,需保证在商家系统中唯一,最大长度不能超过50个字符
payerAccount 付款人账号
paymentAmount 支付金额
paymentCurrency 支付币种
paymentCountry 支付国家
receiveAmount 收款金额
receiveCurrency 收款币种
version 版本号,当前版本号为V2.0.0,兼容版本V1.0.0
notifyUrl 回调地址,用于接收EPAY后台通知的订单结果:成功或失败
remark 订单备注,最大长度不能超过200个字符
category 类型:银行BANK,现金CASH
extendFields 商户扩展字段,要求JSON格式
senderInfo 付款人信息,要求JSON格式,具体入参字段需要根据 查询接口 获取

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

查询交易

示例代码

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\": \"b48916e1-91fb-4ff9-9002-17e8431a5a15\"\n  },\n  \"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\": \"b48916e1-91fb-4ff9-9002-17e8431a5a15\"\n  },\n  \"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": "b48916e1-91fb-4ff9-9002-17e8431a5a15"
  },
  "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": "b48916e1-91fb-4ff9-9002-17e8431a5a15"
  },
  "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": "b48916e1-91fb-4ff9-9002-17e8431a5a15"
  },
  "sign": ""
}'| http  --follow --timeout 3600 POST 'http://29597375fx.epaydev.xyz/capi/openapi/payoutApi/queryTransaction' \
 Content-Type:'application/json'

入参说明

参数名称 参数说明
epayAccount 商家开通的EPAY账号
merchantName 商家名称
merchantOrderNo 商家订单号,需保证在商家系统中唯一,最大长度不能超过50个字符
version 版本号,当前版本号为V2.0.0,兼容版本V1.0.0

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

异步通知

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

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

订单状态图

image

API列表

API名称 API描述 操作
sendTransaction 创建交易 查看文档
queryTransaction 查询交易 查看文档

results matching ""

    No results matching ""