Go SDK 使用文档

简介

目前 Adapay 的 Go SDK 支持的交易模块包括 支付(Payment)、退款(Refund)、查询、关单功能,用户对象,结算账户,企业用户等功能,具体可参考 API文档

下载地址

SDK下载

SDK 版本记录

版本

日期

说明

v1.1.2

2020-07-21

增加取现结果查询功能

v1.1.0

2020-02-28

增加钱包相关接口功能

v1.0.2

2019-11-08

新增修改结算配置功能

v1.0.1

2019-10-29

新增延时分账功能

v1.0.0

2019-10-25

Adapay 初版

版本要求

Go 1.x 及以上

接入方法

  • 下载 SDK

下载文件里包含 SDK 和 Demo 两个目录。SDK 目录下为待添加到项目中的文件,Demo 目录下为示例项目,供接入时参考使用。

  • 上传 RSA 公钥

您需要在本地生成一对 RSA 公私钥,将生成的公钥内容上传到 「控制台」 ->「商户信息管理」->「证书管理」->「商户公钥」

证书生成方法具体详见帮助中心 证书生成

  • 下载配置文件

配置文件获取路径: 「控制台」 ->「商户信息管理」->「证书管理」->「导出配置文件」

_images/certManager.png
  • 补全商户配置文件

将生成的 RSA公私钥中的私钥,以 PKCS8的格式填充到下载的配置json文件中,对应的 key 为 'rsa_private_key'

_images/configJson.png

注意 私钥内容无需头尾,其他内容请勿修改

  • 导入第三方依赖库

接入本 SDK 需依赖以下第三方库

go get github.com/eclipse/paho.mqtt.golang
go get github.com/gorilla/websocket
go get golang.org/x/net/proxy

使用方法

  • 系统初始化

在使用 Adapay 前,请先完成系统初始化设置,否则可能导致交易异常。

  • 调用示例

// TODO 导入商户配置,建议以下属商户号为 key,以简化后续调用时的处理
multiMerchConfigPaths := map[string]string{
        "merch_no_0000001": "Merchant config path",
        "merch_no_0000002": "Merchant config path",
}

// 调用初始化方法
config.InitMulti(multiMerchConfigPaths)

发起支付

当您想发起一次支付请求时需要通过 Adapay 提供的创建方法获取一个新的 Payment对象,您可使用此 Payment对象 发起支付。对于支付结果,Adapay 会发送 异步消息 告知。

  • 调用示例

params := make(map[string]interface{})
params["order_no"] = time.Now().UnixNano()
params["app_id"] = "your app_id"
params["pay_channel"] = "alipay"
params["pay_amt"] = "0.01"
params["goods_title"] = "subject"
params["goods_desc"] = "body"
params["currency"] = "cny"

data, apiError, err := payment.Create(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建支付

支付订单查询

查询已存在的 Payment对象

  • 调用示例

testQueryPaymentId := "payment_id"
      data, apiError, err := payment.Query(testQueryPaymentId, "merch_no_0000001")
  • 参数说明

调用参数详见 支付查询

关闭订单

针对已经创建的 Payment对象,您可以调用关单接口进行交易的关闭。

  • 调用示例

closePaymentParams := make(map[string]interface{})

// 填写请求参数
closePaymentParams["payment_id"] = "Your ID"
closePaymentParams["reason"] = "Your close payment reason"
closePaymentParams["expend"] = "Expend data"
data, apiError, err := payment.Close(closePaymentParams, "merch_no_0000001")
  • 参数说明

调用参数详见 关单

创建支付确认对象

创建支付确认对象适用于延时分账的场景。只有已支付完成且延时分账的Payment对象,才支持调用创建支付确认对象。支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。

  • 调用示例

params := make(map[string]interface{})
// 填写请求参数
params["payment_id"] = ""
params["order_no"] = ""
params["confirm_amt"] = ""
params["description"] = ""
params["div_members"] = ""

// 调用 SDK 方法发起请求(同步响应受理情况,异步返回结果)
data, apiError, err := payment.CreateConfirm(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建支付确认对象

查询支付确认对象

查询支付确认对象

  • 调用示例

params := make(map[string]interface{})
params["payment_confirm_id"] = ""
data, apiError, err := payment.QueryConfirm(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询支付确认对象

查询支付确认对象列表

查询支付确认对象列表

  • 调用示例

params := make(map[string]interface{})
params["app_id"] = ""
params["payment_id"] = ""
params["page_index"] = ""
params["page_size"] = ""
params["created_gte"] = ""
params["created_lte"] = ""
data, apiError, err := payment.QueryConfirmList(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询支付确认对象列表

创建支付撤销对象

延时分账已支付的订单撤销功能,支持一个订单多笔撤销,撤销次数最多不超过10次。

  • 调用示例

params := make(map[string]interface{})
params["payment_id"] = ""
params["app_id"] = ""
params["order_no"] = ""
params["notify_url"] = ""
params["reverse_amt"] = ""
// 非必填
// params["reason"]
// params["expand"]
// params["device_info"]

data, apiError, err := payment.CreateReverse(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建支付撤销对象

查询支付撤销对象

功能描述:延时分账已支付的订单的撤销查询功能,根据用户提供的支付撤销id查询撤销信息。

  • 调用示例

params := make(map[string]interface{})

params["reverse_id"] = ""

data, apiError, err := payment.QueryReverse(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询支付撤销对象

查询支付撤销对象列表

功能描述:延时分账已支付的支付的撤销查询功能,根据应用id批量查询支付撤销。

  • 调用示例

params := make(map[string]interface{})

params["app_id"] = ""
params["payment_id"] = ""
params["page_index"] = ""
params["page_size"] = ""
params["created_gte"] = ""
params["created_lte"] = ""

data, apiError, err := payment.QueryReverseList(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询支付撤销对象列表

发起退款

当您的业务需要发起退款时,可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象,发起退款请求。

  • 调用示例

params := make(map[string]interface{})
params["payment_id"] = "payment_id"
params["refund_order_no"] = time.Now().UnixNano()
params["refund_amt"] = "0.01"

data, apiError, err := refund.Create(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建退款

退款查询

通过 Refund对象 的 id 查询一个已创建的退款记录。

  • 调用示例

params := make(map[string]interface{})
params["refund_id"] = "002112019102216320710032635256019734528"
data, apiError, err := refund.Query(params, "merch_no_0000001")
  • 参数说明

调用参数详见 退款查询

创建用户对象

创建用户对象用于将商户 member_id 与 Adapay 系统做关联,商户需要保证 member_id 在应用 app_id 下唯一。关联完成后,可以创建结算账户用于用户分账功能,也可以更新用户对象禁用用户状态,禁用用户所有交易功能。

  • 调用示例

params := make(map[string]interface{})
// 用当前的时间戳 作为 order_no 并且 md5之后 生成 member_id 这俩个参数只需要保证唯一性就可以
crutime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 10))
member_id := fmt.Sprintf("%x", h.Sum(nil))

params["member_id"] = member_id
params["app_id"] = "your app_id"
params["location"] = "上海"
params["email"] = "123@123.com"
params["gender"] = "MALE"
params["tel_no"] = "xxx"
params["nickname"] = "xxx"

data, apiError, err := member.Create(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建用户对象

查询用户对象

查询已创建的单个用户对象

  • 调用示例

params := make(map[string]interface{})
params["member_id"] = "member_id"
params["app_id"] = "your app_id"
data, apiError, err := member.Query(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询用户对象

更新用户对象

对创建完成用户对象更新用户基本信息,可对用户状态禁用,禁用后用户不能做其它交易。

  • 调用示例

params := make(map[string]interface{})

params["member_id"] = "member_id"
params["app_id"] = "your app_id"
params["location"] = "上海"
params["email"] = "123@123.com"
params["gender"] = "MALE"
params["tel_no"] = "xxx"
params["nickname"] = "xxx"

data, apiError, err := member.Update(params, "merch_no_0000001")
  • 参数说明

调用参数详见 更新用户对象

查询用户对象列表

对创建完成用户对象更新用户基本信息,可对用户状态禁用,禁用后用户不能做其它交易。

  • 调用示例

params := make(map[string]interface{})
params["app_id"] = "your app_id"

data, apiError, err := member.QueryList(params, "merch_no_0000001")
  • 参数说明

调用参数详见 用户对象列表

创建企业用户对象

通过本接口您可以创建企业用户,企业用户需要人工审核,审核完成后会发送异步消息通知,若审核成功,则商户用户 member_id 与 Adapay 系统关联成功,若审核失败,则可再次调用本接口提交正确的资料信息。

  • 调用示例

params := make(map[string]interface{})

filePath, err := filepath.Abs("./ut/易付云.json")

// 用当前的时间戳 作为 order_no 并且 md5之后 生成 member_id 这俩个参数只需要保证唯一性就可以
crutime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 15))
member_id := fmt.Sprintf("%x", h.Sum(nil))

params["member_id"] = member_id
params["order_no"] = strconv.FormatInt(crutime, 10)

params["app_id"] = "your app_id"
params["prov_code"] = "上海市"
params["area_code"] = "xxx"
params["social_credit_code"] = "xxx"
params["social_credit_code_expires"] = "xxx"
params["legal_person"] = "xxx"
params["legal_cert_id"] = "xxx"
params["legal_mp"] = "xxx"
params["address"] = "企业地址测试"
params["name"] = "xxx"

// attach_file 文件地址
params["attach_file"] = "/Adapay/files/file.zip"

data, apiError, err := corpMember.Create(params, "merch_no_0000001")
  • 参数说明

调用参数详见 创建企业用户对象

查询企业用户对象

查询已创建的企业用户对象

  • 调用示例

params := make(map[string]interface{})

params["member_id"] = "member_id"
params["app_id"] = "your app_id"

data, apiError, err := corpMember.Query(params, "merch_no_0000001")
  • 参数说明

调用参数详见 查询企业用户对象

创建结算账户对象

商户的 member_id 与 Adapay 系统做关联后,可以创建结算账户,用于用户分账功能,目前只支持绑定银行卡。

  • 调用示例

createSettleParam := make(map[string]interface{})
accountInfo := make(map[string]interface{})

accountInfo["card_id"] = "xxx"
accountInfo["card_name"] = "xxx"
accountInfo["cert_id"] = "xxx"
accountInfo["cert_type"] = "00"
accountInfo["tel_no"] = "xxx"
accountInfo["bank_code"] = "xxx"
accountInfo["bank_acct_type"] = "2"
accountInfo["card_id"] = "xxx"
accountInfo["prov_code"] = "xxx"
accountInfo["area_code"] = "xxx"

crutime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 15))
member_id := fmt.Sprintf("%x", h.Sum(nil))

createSettleParam["member_id"] = member_id
createSettleParam["app_id"] = "your app_id"
createSettleParam["channel"] = "bank_account"
createSettleParam["account_info"] = accountInfo

data, apiError, err := settleAccount.Create(createSettleParam, "merch_no_0000001")
  • 参数说明

调用参数详见 创建结算账户对象

查询结算账户对象

查询已绑定的结算账户对象。

  • 调用示例

querySettleParam := make(map[string]interface{})
querySettleParam["settle_account_id"] = "settle_account_id"
querySettleParam["member_id"] = "member_id"
querySettleParam["app_id"] = "your app_id"

data, apiError, err := settleAccount.Query(querySettleParam, "merch_no_0000001")
  • 参数说明

调用参数详见 查询结算明细列表

查询结算明细列表

使用 Adapay 系统生成的结算账户对象 id 查询已创建的结算账户对象信息。

  • 调用示例

querySettleDetailParam := make(map[string]interface{})
querySettleDetailParam["settle_account_id"] = "xxx"
querySettleDetailParam["member_id"] = "xxx"
querySettleDetailParam["app_id"] = "your app_id"
querySettleDetailParam["begin_date"] = "20191001"
querySettleDetailParam["end_date"] = "20191007"

data, apiError, err := settleAccount.QueryDetails(querySettleDetailParam, "merch_no_0000001")
  • 参数说明

调用参数详见 查询结算明细列表

删除结算账户对象

删除已绑定的结算账户对象。

  • 调用示例

deleteSettleParam := make(map[string]interface{})
deleteSettleParam["settle_account_id"] = "settle_account_id"
deleteSettleParam["member_id"] = "member_id"
deleteSettleParam["app_id"] = "your app_id"

data, apiError, err := settleAccount.Delete(deleteSettleParam, "merch_no_0000001")
  • 参数说明

调用参数详见 删除结算账户对象

修改结算配置

修改用户结算账户配置,可配置用户结算的起始金额、结算留存金额、结算信息摘要等。

注:本接口不能更改结算卡,如需更改结算账户的结算卡,请先删除结算账户,再重新创建结算账户。

  • 调用示例

param := make(map[string]interface{})
param["settle_account_id"] = "settle_account_id"
param["member_id"] = "member_id"
param["app_id"] = "your app_id"
param["min_amt"] = "1.00"

data, apiError, err := settleAccount.Modify(param, "merch_no_0000001")
  • 参数说明

调用参数详见 修改结算配置

下载对账单

您可通过本接口下载您交易日期的对账单。比如掉单、系统错误等导致商户侧和 Adapay 侧数据不一致,通过对账单核对后可校正支付状态。

  • 调用示例

params := make(map[string]interface{})

params["bill_date"] = "20190905"
params["app_id"] = "your app_id"

data, apiError, err := bill.Download(params, "merch_no_0000001")
  • 请求参数

参数

类型

描述

bill_date

String(8)

对账单的日期,格式:20180808

  • 返回参数

参数

类型

描述

bill_download_url

String(8)

对账单文件下载 url

获取银联云闪付用户标识

该接口是聚合支付,银联云闪付 H5 支付的前置接口。 商户在自己的平台上通过银联接口获取用户的授权码后,调用本接口同步换取对应用户在银联体系的用户唯一标识。发起银联云闪付 H5 支付时用户唯一标识 user_identity_id 是必填的请求参数。

  • 调用示例

createParams := make(map[string]interface{})
createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
createParams["order_no"] = ""
createParams["user_auth_code"] = ""
createParams["app_up_identifier"] = ""

data, apiError, err := union.UserIdentity(createParams, "msc_correct")
  • 参数说明

调用参数详见 获取银联云闪付用户标识

查询账户余额

通过本接口查询账户余额

  • 调用示例

param := make(map[string]interface{})
param["settle_account_id"] = ""
param["member_id"] = ""
param["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"

data, apiError, err := settleAccount.QueryBalance(param, "msc_correct")
  • 请求参数

调用参数详见 查询账户余额

取现

通过该接口,实现对指定商户或者商户下用户的结算账户可用余额发起主动提现操作,金额从账户中提到绑定的结算银行卡中。取现结果以异步通知为准。

  • 调用示例

createParams := make(map[string]interface{})
createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
createParams["order_no"] = ""
createParams["cash_type"] = "T1"
createParams["cash_amt"] = "1.00"
createParams["member_id"] = ""
createParams["notify_url"] = "XXX"

data, apiError, err := cashs.CreateCashs(createParams, "msc_correct")
  • 请求参数

调用参数详见 钱包取现

取现查询

通过该接口,可以查询已发起的取现交易状态。

  • 调用示例

createParams := make(map[string]interface{})
createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
createParams["order_no"] = "xxx"

data, apiError, err := Adapay.Cashs().QueryCashsStat(createParams, "yifuyun")
if err != nil || apiError != nil { // 网络或本应用异常
        fmt.Println(err)
        fmt.Println(apiError)
        return
}
fmt.Println(data)
  • 请求参数

调用参数详见 取现查询

钱包登录

通过该接口,实现对商户登录钱包功能,登录成功返回跳转地址

  • 调用示例

createParams := make(map[string]interface{})
createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
createParams["member_id"] = ""
createParams["ip"] = ""

data, apiError, err := wallet.WalletLogin(createParams, "msc_correct")
  • 请求参数

调用参数详见 钱包登录

钱包支付

通过该接口,实现对商户钱包支付功能,下单成功返回支付跳转地址

  • 调用示例

createParams := make(map[string]interface{})
    createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
    createParams["order_no"] = ""
    createParams["pay_amt"] = ""
    createParams["currency"] = ""
    createParams["description"] = ""
    createParams["goods_title"] = ""
    createParams["goods_desc"] = ""
    createParams["callback_url"] = ""
    createParams["notify_url"] = ""

    div_members := make(map[string]interface{})
    div_members["member_id"] = ""
    div_members["amount"] = ""

    createParams["div_members"] = div_members

    data, apiError, err := wallet.Pay(createParams, "msc_correct")
  • 请求参数

调用参数详见 钱包支付

创建收银台对象

通过该接口,实现对商户钱包收银台支付功能,下单成功返回支付跳转地址

  • 调用示例

createParams := make(map[string]interface{})
createParams["app_id"] = "app_7d87c043-aae3-4357-9b2c-269349a980d6"
createParams["order_no"] = "jdskjdd_200000013"

data, apiError, err := Adapay.Wallet().CreateCheckOut(createParams, "yifuyun")
if err != nil || apiError != nil { // 网络或本应用异常
        fmt.Println(err)
        fmt.Println(apiError)
        return
}
fmt.Println(data)
  • 请求参数

调用参数详见 创建收银台对象

异步消息监听

Adapay 在支付成功、支付失败、关单成功、关单失败、退款成功、退款失败时,都会推送终态结果给到您,请务必监听异步结果并做好并发处理。

请实现以下方法

示例

// 初始化 mqtt 消息配置参数
config, err := message.InitConfig("msc_correct")
if err != nil {
        fmt.Println(err)
        return
}
fmt.Println(config)

// 初始化消息对象
msg, err := message.Creat(config)
if err != nil {
        fmt.Println(err)
}

// 回调方法
var MQMessHandler message.MessageHandler = func(body message.MesBody) {
        fmt.Printf("TOPIC: %s\n", body.Topic)
        fmt.Printf("MSG: %s\n", body.Payload)
}

// 设置消息回调处理方法
msg.SetDefaultPublishHandler(MQMessHandler)

// 发起连接,如果连接失败返回错误信息
if err := message.Connect(msg); err != nil {
        fmt.Println(err)
        return
}
fmt.Println("连接成功")

// 发起订阅
if err := message.Subscribe(msg); err != nil {
        fmt.Println(err)
        return
}
fmt.Println("订阅成功")
  • 返回数据示例

不同事件异步消息返回数据,详见 异步消息数据示例