支付中台-聚合支付项目文档

1 全局字典及其他约定

1.1 状态: status

属性值 描述
pending 交易处理中
succeeded 交易成功
failed 交易失败

1.2 认证/支付类型: authen_type

属性值 描述
wechat 公众号
app 微信APP
mini 微信小程序
alilife 支付宝生活号
aliapp 支付宝App

1.3 业务方事件回调

属性 类型 说明
notify_url/pay_notify_url String 回调方的HTTP地址,POST方法
extra JSONObject POST方法的请求体

2 API安全约定

本期API协议头部需带上鉴权标识才可访问。具体分为: 后台管理API访问鉴权、内部服务访问鉴权。

3.1 后台管理API

3.1.1 域名

环境 域名 说明
SIT https://open-sit.remacsmart.com
生产 https://open-sit.remacsmart.com

3.1.2 后台管理鉴权

使用《4.1 支付中台后台登录》返回的结果 access_token 值,HTTP 头部名称为remacToken ,发送请求时带上这个头部。

HTTP头部名称:remacToken: 值:"返回的结果 access_token"

3.2 受信内部服务API

受信的下游平台使用支付中台能力调用中台接口API时需要使用。

3.2.1 域名

环境 域名 说明
SIT https://iot-sit.remacsmart.com
生产 https://iot.remacsmart.com

3.2.2 受信内部服务鉴权

请参照以下平台指引完成生成token并将随机16位AES加密密钥的密文作为头部传给中台。

HTTP头部名称:aeskey: 值:"中台公钥加密的密文"

HTTP头部名称:token, 值:使用AES加密密钥明文按约定字段生成的JSON字符串密文

https://confluence.mideazy.com/pages/viewpage.action?pageId=391872567

3.3 支付相关API及鉴权

3.3.1 支付相关API域名

环境 域名 说明
SIT https://iot-sit.remacsmart.com
生产 https://iot.remacsmart.com

3.3.2 支付相关接口鉴权

受信内部服务方(业务方)调用《4.4.1.1 微信认证获取token》或 《1.4.2.1 支付宝认证获取token》获取

的 token 值携带至HTTP头部。

HTTP头部名称:Authorization : 值:"调用认证获取的token"

token 中将加密存储支付相关的重要信息,由网关统一转发至聚合支付微服务,不再由业务方传参,减少了敏感信息泄露的风险,接口参数也更加简洁。

4 API

4.1 支付中台后台登录

注:登录接口使用的是统一登录的域名。 支付中台后台帐号登录后进行的操作。

参见:

http://arch.smartmideazy.com/docs/account/account-doc.html

统一登录域名

环境 域名
SIT https://gw-sit.remacsmart.com
POD https://gw.remacsmart.com
编号 API名称 路径 版本 适用范围
2.1 登录 /v1/user/sso/login 1.0 所有
2.2 刷新token /v1/oauth/sso/refreshtoken 1.0 所有
2.4 退出登录 /v1/user/logout 1.0 所有

登录返回:

{"code":"200","data":{"tokenInfo":{"name":"功夫熊猫","orgFullName":null,"id":"28449","orgId":null,"org_code":null,"user_name":"supperadm","position":"未知","mobile":"13923403549","nick_name":null,"is_supper":2,"status":1,"bizOrgId":null,"bizOrgCode":null,"bizOrgFullName":null,"ico":"https://iot-xlink-xfile.oss-cn-hangzhou.aliyuncs.com/community/2022-09-01/219061661994225824.png","credentials":"U2FsdGVkX1%2Fr%2FOXMu0sZ6LW7GTMSDkrh7VOOuMU%2FyqiEa77Xh5Du1cGsm35VE2wk","roles":null,"orgRoles":null,"tenantId":null,"top_org_code":null,"top_org_id":null,"encryptKey":"oCkMsXhap7l8sex%2FlM4jtiOPQAc0cg9RE86OiMS07p8%2BE%2FVY4qG5JKXE4I0Yn2FB23HgMfIRpRzAQYh%2FUyV%2BldylfJABuedskTMAG5ainm9Ffq0JlMBi6K72%2BpY%2Bvx7%2B%2FeFjhKVMbiztZnVRxA4O9CMSFds2QbKMCopHmttWc9U%3D"},"token":{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMjg0NDkiLCJzcmMiOjEsInVzZXJfbmFtZSI6InN1cHBlcmFkbSIsInJvbGVzIjpbIlNZU19BRE1JTiJdLCJzY29wZSI6WyJhbGwiXSwibmFtZSI6IuWKn-Wkq-eGiueMqyIsImlkIjoiMjg0NDkiLCJleHAiOjE2Njc1ODEyNTcsImp0aSI6IjhkNTVjOGI5LTU0MWUtNDhkMS1hZmZiLTlmMmRmNTNjZWJhYSIsImNsaWVudF9pZCI6ImJvc3MtY2xpZW50IiwiaXNfc3VwcGVyIjoiMiJ9.UAoL0F3deAjLPekpMF56KeL7-pa1nKHZThO5oWj1Lh_6iwMV9y7OPXvwbvCE_6wpJtw7fJ19-ILaGbMyRqjH4udnt1LnIVdCioqmgnWOtvngyUNklGANZ45tuN_ALDejsmt6ayYPOmRj2Uwv468FwRhXlB2KhtEu9nKtjbNqE2k","token_type":"bearer","refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMjg0NDkiLCJzcmMiOjEsInVzZXJfbmFtZSI6InN1cHBlcmFkbSIsInJvbGVzIjpbIlNZU19BRE1JTiJdLCJzY29wZSI6WyJhbGwiXSwiYXRpIjoiOGQ1NWM4YjktNTQxZS00OGQxLWFmZmItOWYyZGY1M2NlYmFhIiwibmFtZSI6IuWKn-Wkq-eGiueMqyIsImlkIjoiMjg0NDkiLCJleHAiOjE2Njc5MDUyNTcsImp0aSI6IjZkMTkzMmE3LTY2MjAtNGVlZS05ZTVhLTkzNmUyNzcyOTRlNiIsImNsaWVudF9pZCI6ImJvc3MtY2xpZW50IiwiaXNfc3VwcGVyIjoiMiJ9.iYYygwm2TFXtbVAX1FPTyGWb7kmuajHCizoV3KtKmTPC2fcxKDnizuk6_cGCQzX8u1kATm7ft2uHeyDIRMpzyZ8RTnJV7uXxV3jSAXEq-KzRtnXFsrYU9TPUvRjWw3VFK0Sy3KNWQ1X9Sb9NcdnAX5YkSpJOSprqBs35gSQ57fY","scope":"all","jti":"8d55c8b9-541e-48d1-affb-9f2df53cebaa","expires_in":35999,"roles":["SYS_ADMIN"],"top_org_id":null,"top_org_code":null,"isSys":null}},"message":"success"}

4.2 收银台模板

4.2.1 收银台模板新增

注:模板可以有多个,以便业务绑定。

URL: /v1/ploypay/admin/pay/template/set

method :PUT

HTTP头部:见《3.1.2 后台管理鉴权

Body: 属性

属性 类型 是否必传 说明
id Int N 主键ID,平台唯一。为空代表新建;非空代表修改
pay_methods JSONArray Y 支付中台所支持的支付方式JSON数组
pay_methods_set JSONArray Y 收银台模板,激活的支付方式。激活后,支付仅支持激活的支付方式。
status Int Y 1:启用 2:禁用
template_type varchar N 为空代表移动端,默认值mobile。 枚举值:mobile手机端模板,pc: 电脑端模板。
url varchar Y H5模板页的地址
effect_time Int Y 分钟。

Body:

{
 pay_methods:[
{key:"wechat", value:"微信"}, {key:"alipay", value:"支付宝"},
{key:"unionpay", value:"银联"}],
pay_methods_set: ["wechat", "alipay"],
status: 1 
template_type: 'mobile',
url: 'https://abc.com/index.html#',
effect_time: 15 ,
id: 1234
}

4.2.2 商户APP应用登记

URL: /v1/ploypay/admin/app/manage

method: PUT

HTTP头部:见《3.1.2 后台管理鉴权

在开通微信公众号/小程序等相关功能时已经绑定了 Adapay 的 App_ID 与微信的 AppID 之间的映射关系,故交易时候请传入 Adapay 的 App_ID。

参见: https://docs.adapay.tech/help/console.html#appid-adapay-app-id

属性 类型 是否必传 说明
id Int N 为空代表新建;非空代表修改
app_id String Y 聚合支付渠道中创建的appid
api_key String Y 聚合支付渠道中创建的app的API key
private_key_pkcs8_path String Y 商户私钥pkcs8格式文件路径;相对应的RSA公钥渠道商平台保存;用于调用渠道商API接口时做签名用。
public_key String Y 平台提供给商户的公钥, 用于验签来自渠道商的响应
third_part String N 聚合支付渠道商标识枚举,默认为:huifu

4.3 中台分帐接口文档

4.3.1 企业对象

4.3.1.1 创建/更新企业用户

暂支持创建企业用户对象。

URL: /v1/ploypay/admin/member/create

method: PUT

HTTP头部:见《3.2.2 受信内部服务鉴权

BODY:

参数 类型 必填 描述
id Int N 为空代表新增;非空代表创建。
app_id String(64) Y 商户应用的app_id
third_part String(32) Y 渠道商的标识,默认为 huifu
order_no String(64) 请求订单号, 由业务系统维护,便于查询申请单的状态
member_id String(64) Y 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一。 修改时member_id 不可修改。
name String(50) Y 企业名称
prov_code String(4) Y 省份编码
area_code String(4) Y 地区编码
social_credit_code String(18) Y 统一社会信用码
social_credit_code_expires String(8) Y 统一社会信用证有效期
business_scope String(200) Y 经营范围
legal_person String(20) Y 法人姓名
legal_cert_id String(20) Y 法人身份证号码
legal_cert_id_expires String(8) Y 法人身份证有效期
legal_mp String(11) Y 法人手机号
address String(256) Y 企业地址
zip_code String(6) N 邮编
telphone String(30) N 企业电话
email String(40) N 企业邮箱
attach_file File Y 上传附件,传入的中文文件名称为 UTF-8 字符集 URLEncode 编码后的字符串。内容须包含三证合一证件照、法人身份证正面照、法人身份证反面照、开户银行许可证照。 压缩 zip包后上传,最大限制为 9 M。
bank_code String(8) Y 银行代码,如果需要自动开结算账户,本字段必填(详见附录)
bank_acct_type String(1) Y 银行账户类型:1-对公;2-对私,如果需要自动开结算账户,本字段必填
card_no String(40) Y 银行卡号,如果需要自动开结算账户,本字段必填
card_name String(64) Y 银行卡对应的户名,如果需要自动开结算账户,本字段必填;若银行账户类型是对公,必须与企业名称一致
notify_url String(250) 业务方回调地址;见数据字典《1.3 业务方事件回调
extra JSONOBJECT 业务方回调HTTP BODY;见数据字典《1.3 业务方事件回调

返回:

参数 类型 必返回 描述
Id Int Y 中台企业对象主键值。
order_no String(64) Y 请求订单号
member_id String(64) Y 商户下的用户id
app_id String(64) Y 控制台主页面应用的app_id
created_time String(8) Y 创建时的时间戳
prod_mode String(5) Y 是否 prod模式,true 是 prod模式,false 是 mock模式

4.3.1.2 查询企业用户

URL: /v1/ploypay/admin/member/query

method: POST

HTTP头部:见《3.2.2 受信内部服务鉴权

BODY:

参数 类型 必填 描述
app_id String(64) Y 应用 app_id
member_id String(64) Y 商户下的用户id

返回:

{"code": "200",
"message":"success",
"data": 
{
   "id":XXX, 
  "address": "湖南省滨州市",
  "app_id": "app_XXXXXXXX",
  "area_code": "4201",
  "business_scope": "",
  "email": "",
  "legal_cert_id": "#011pvYcG/6l6ofY38Ql6P31eUb/xoAqNLSL",
  "legal_cert_id_expires": "",
  "legal_mp": "#0 11HGjFbJFO8mBejceLLqFypw==",
  "legal_person": "xxxx",
  "member_id": "member_id_test",
  "name": "测试企业用户信息 4",
  "prov_code": "0042",
  "social_credit_code": "91410300X148288455",
  "social_credit_code_expires": "",
  "telphone": "",
  "zip_code": "",
  "status": "succeeded",
  "prod_mode": "true"
}
}

4.3.2 结算帐户

4.3.2.1 创建结算帐户

URL: /v1/ploypay/admin/settleaccount/create

method: POST

HTTP头部:见 《3.2.2 受信内部服务鉴权

BODY:

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
third_part String(32) Y 渠道商标识,默认 huifu
member_id String(64) Y 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
channel String Y 目前仅支持:bank_account(银行卡)
account_info Object Y 结算账户信息
notify_url String(250) 业务方回调地址;见数据字典《1.3 业务方事件回调
extra JSONOBJECT 业务方回调HTTP BODY;见数据字典《1.3 业务方事件回调

account_info 对象属性如下:

参数 类型 必填 描述
card_id String(64) Y 银行卡号
card_name String(64) Y 银行卡对应的户名
cert_id String(64) N 证件号,银行账户类型为对私时,必填
cert_type String(2) N 证件类型,仅支持:00-身份证,银行账户类型为对私时,必填
tel_no String(64) Y 手机号
bank_code String(8) N 银行编码,银行账户类型对公时,必填
bank_name String(64) N 开户银行名称
bank_acct_type String(1) Y 银行账户类型:1-对公;2-对私
prov_code String(4) N 银行账户开户银行所在省份编码 ,银行账户类型为对公时,必填
area_code String(4) N 银行账户开户银行所在地区编码,银行账户类型为对公时,必填

成功响应格式:

{"code": "200",
"message":"success",
"data": 
{  
  "account_info": {
      "area_code": "1401",
      "bank_acct_type": "2",
      "bank_code": "0105999",
      "bank_name": "",
      "card_id": "622700****0576",
      "card_name": "xxx",
      "cert_id": "1401****0631",
      "cert_type": "00",
      "prov_code": "0014",
      "tel_no": "137****xxxx"
  },
  "app_id": "app_XXXXXXXX",
  "channel": "bank_account",
  "create_time": "1568963254",
  "settle_account_id": "0006440476699456",
  "type": "",
  "status": "succeeded",
  "prod_mode": "true",
  "id":XX 
}

}

其中: settle_account_id 是聚合支付渠道商平台生成一个唯一的 id。

status见全局字典《A001 状态 status

4.3.2.2 修改结算帐户配置

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

URL: /v1/ploypay/admin/settleaccount/config/set

method: PUT

HTTP头部:见 《3.2.2 受信内部服务鉴权

请求BODY:

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
member_id String(64) Y 商户下的用户id,若为商户本身时,传入0
settle_account_id String(64) N Adapay系统返回的结算账户id,若为商户本身时,不传该值
min_amt String(16) N 结算起始金额 ( 0.00格式,整数部分最长13位,小数部分最长2位) min_amt, remained_amt,channel_remark至少有一个不为空
remained_amt String(16) N 结算留存金额 ( 0.00格式,整数部分最长13位,小数部分最长2位)
channel_remark String(200) N 结算信息摘要,银行出款时摘要信息
notify_url String(250) 业务方回调地址;见数据字典《1.3 业务方事件回调
extra JSONOBJECT 业务方回调HTTP BODY;见数据字典《1.3 业务方事件回调

account_info字段说明:

参数 类型 非空 说明
card_id String(64) Y 银行卡号
card_name String(16) Y 银行账户名称
cert_id String(30) Y 身份证号
cert_type String(2) N 默认:00-身份证
tel_no String(11) Y 手机号
bank_code String(8) Y 详见开户银行编码附录
bank_name String(64) N 开户银行名称
bank_acct_type String(1) Y 银行账户类型:1-对公;2-对私
prov_code String(4) Y 省份
area_code String(4) Y 地区
min_amt String(16) N 结算起始金额 ( 0.00格式,整数部分最长13位,小数部分最长2位),修改结算配置时返回
remained_amt String(16) N 结算留存金额 ( 0.00格式,整数部分最长13位,小数部分最长2位),修改结算配置时返回
channel_remark String(200) N 结算信息摘要,银行出款时摘要信息,修改结算配置时返回

成功响应格式:


{"code": "200",
"message":"success",
"data": 
{  
  "account_info": {
      "area_code": "1401",
      "bank_acct_type": "2",
      "bank_code": "0105999",
      "bank_name": "",
      "card_id": "622700****0576",
      "card_name": "xxx",
      "cert_id": "1401****0631",
      "cert_type": "00",
      "prov_code": "0014",
      "tel_no": "137****xxxx"
  },
  "app_id": "app_XXXXXXXX",
  "channel": "bank_account",
  "create_time": "1568963254",
  "settle_account_id": "0006440476699456",
  "type": "",
  "status": "succeeded",
  "prod_mode": "true",
  "id":XX,
  "min_amt":  "20.00",
  "remained_amt":  "50.00",
  "channel_remark":  "摘要测试"
}

}

4.3.2.3 查询结算帐户

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

URL: /v1/ploypay/admin/settleaccount/query

method: POST

HTTP头部:见 《3.2.2 受信内部服务鉴权

请求BODY:

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
member_id String(64) Y 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
settle_account_id String(64) Y 由 Adapay 生成的结算账户对象 id

成功响应格式:

{"code": "200",
"message":"success",
"data": 
{  
  "account_info": {
      "area_code": "1401",
      "bank_acct_type": "2",
      "bank_code": "0105999",
      "bank_name": "",
      "card_id": "622700****0576",
      "card_name": "xxx",
      "cert_id": "1401****0631",
      "cert_type": "00",
      "prov_code": "0014",
      "tel_no": "137****xxxx"
  },
  "app_id": "app_XXXXXXXX",
  "channel": "bank_account",
  "create_time": "1568963254",
  "settle_account_id": "0006440476699456",
  "type": "",
  "status": "succeeded",
  "prod_mode": "true",
  "id":XX,
  "min_amt":  "20.00",
  "remained_amt":  "50.00",
  "channel_remark":  "摘要测试"
}

}

4.3.2.4 删除结算帐户

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

URL: /v1/ploypay/admin/settleaccount/delete/{app_id}/{member_id}/{settle_account_id}

method: DELETE

HTTP头部:见《3.2.2 受信内部服务鉴权

请求路径参数:

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
member_id String(64) Y 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
settle_account_id String(64) Y 由 Adapay 生成的结算账户对象 id

成功响应格式:

{"code": "200",
"message":"success",
"data": 
{  
  "account_info": {
      "area_code": "1401",
      "bank_acct_type": "2",
      "bank_code": "0105999",
      "bank_name": "",
      "card_id": "622700****0576",
      "card_name": "xxx",
      "cert_id": "1401****0631",
      "cert_type": "00",
      "prov_code": "0014",
      "tel_no": "137****xxxx"
  },
  "app_id": "app_XXXXXXXX",
  "channel": "bank_account",
  "create_time": "1568963254",
  "settle_account_id": "0006440476699456",
  "type": "",
  "status": "succeeded",
  "prod_mode": "true",
  "id":XX,
  "min_amt":  "20.00",
  "remained_amt":  "50.00",
  "channel_remark":  "摘要测试"
}

}

4.3.2.5 查询结算帐户

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

URL: /v1/ploypay/admin/settleaccount/history

method: POST

HTTP头部:见《3.2.2 受信内部服务鉴权

请求BODY :

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
member_id String(64) Y 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
settle_account_id String(64) Y 由 Adapay 生成的结算账户对象 id

成功响应

{"code": "200",
"message":"success",
"data": 
{
    "prod_mode": "true",
    "settle_details": [
        {
            "settle_type": "T1",
            "settle_stat": "successed",
            "card_no": "130234****8399",
            "settle_amt": "6.98",
            "settle_fee_amt": "0.00",
            "settle_date": "20191014",
            "card_name": "adapay测试商户"
        },
        {
            "settle_type": "T1",
            "settle_stat": "successed",
            "card_no": "130234****8399",
            "settle_amt": "5.00",
            "settle_fee_amt": "0.00",
            "settle_date": "20191012",
            "card_name": "adapay测试商户"
        }
    ],
    "object": "list",
    "status": "succeeded"

}

}

status 见数据字典 《A001 状态 status

settle_details字段说明:

参数 类型 必填 描述
card_name String(64) Y 结算账户名称
card_no String(64) Y 脱敏的结算账号
settle_date String(8) Y 结算日期
settle_amt String(16) Y 结算金额
settle_fee_amt String(16) Y 结算手续费金额
settle_stat String(16) Y 结算状态,succeeded:成功;failed:失败;pending:处理中;no-started:未发起结算
settle_type String(2) Y 结算类型,T1:T+1日结算;D1: D+1日结算;B:结算失败回账记录
settle_message String(128) N 结算失败描述信息

4.3.2.6 查询交易流水

URL: /v1/ploypay/admin/trade/history

method: POST

HTTP头部:见《3.2.2 受信内部服务鉴权

请求BODY :

参数 类型 必填 描述
app_id String(64) Y 应用的app_id
key_word String(64) N 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
start_date String(8) N yyyyMMdd, 开始时间
end_date String(8) N yyyyMMdd,结束时间

4.4 认证授权

由业务端调用中台的接口来实现认证授权。一方面返回微信和支付宝的用户ID,另一方面由中台加密生成token,后续作为请求中台的凭证。

4.4.1 微信认证授权

4.4.1.1 微信认证获取token

同时支持微信APP、小程序、公众号的授权。

协议: https

URL: /wx/wechat/token/grant

method: POST

HTTP头部:见《3.2.2 受信内部服务鉴权

body:

字段 类型 是否必传 说明
code String 调用微信公众号授权后,返回的code,authen_type=wechat\ mini必传; authen_type=app 不用传。
sub_id String 微信商户号
member_id String 聚合支付用户ID,已接入聚合支付的业务此参数不可为空。
authen_type String 认证类型: 见全局字典《A002 -认证/支付类型: authen_type

返回结果:

{
   "code": "200",
   "message": "成功", 
   "data":
     {"openid":"o6Cx46ISmbJ1oWL8-_KS7YWev7RQ","nickname":"鹏哥","headimgurl":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/HkUibecHmjWIpYtGZAq0M3TbUFXibLkVyH6AGxibQT14kE6IIM4wH0ic9w54zwz6A6DWoM21YYpYheDqwlkbwZyKwA\/132","privilege":[],"unionid":"oEIwe55PabJu_9X0ThpIiKVHi5kI", "token":"eyJhbGciOiJIUzI1NiJ9.eyJrZXlfbWVtYmVyX2xvZ2luIjoie1widW5pb25pZFwiOlwib0VJd2U1NVBhYkp1XzlYMFRocElpS1ZIaTVrSVwiLFwib3BlbmlkXCI6XCJvNkN4NDZJU21iSjFvV0w4LV9LUzdZV2V2N1JRXCIsXCJuaWNrbmFtZVwiOlwi6bmP5ZOlXCIsXCJjaXR5XCI6XCJcIixcInByb3ZpbmNlXCI6XCJcIixcImNvdW50cnlcIjpcIlwiLFwiaGVhZGltZ3VybFwiOlwiaHR0cHM6Ly90aGlyZHd4LnFsb2dvLmNuL21tb3Blbi92aV8zMi9Ia1VpYmVjSG1qV0lwWXRHWkFxME0zVGJVRlhpYkxrVnlINkFHeGliUVQxNGtFNklJTTR3SDBpYzl3NTR6d3o2QTZEV29NMjFZWXBZaGVEcXdsa2J3WnlLd0EvMTMyXCIsXCJzZXhcIjowLFwibGFuZ3VhZ2VcIjpcIlwiLFwicHJpdmlsZWdlXCI6W10sXCJhdXRoZW5fdHlwZVwiOlwid2VjaGF0XCIsXCJidXNpbmVzc190eXBlXCI6XCJwYXJrcGF5XCIsXCJzcGFjZV9pZFwiOjEwMjAsXCJzcGFjZV9uYW1lXCI6XCLnvo7nmoTniankuJrmmbrmhaflgZzovablnLpcIixcImFwcElkXCI6XCJ3eGE5YzExOTMwZGUxY2U3MDZcIixcImFwcFNlY3JldFwiOlwiNTRhMzYxYjUyNjY0MjcyZDIzMmE3NTgyZGE3NDMyODRcIixcInNob3BpZFwiOjF9IiwiZXhwIjoxNjM4MjQzOTMyLCJpYXQiOjE2MzgyMzY3MzIsImp0aSI6IjA2MGUyZGVlLTdhOTQtNGYyNi05ZjA3LWM1MmMzZGViYmVmZiJ9.4J_5ES4sI6v5rf1fxlrPo_6X1c8x6d5ac58fGJcjdQ8
"     
   }

}

重要返回字段:

字段 类型 是否必返 说明
openid String 调用微信公众号授权后openid
token String 授权成功后,平台授予的token, 前端需要妥善保存,后续的请求中需要将其携带在http头部。用户的关键信息。

4.4.2 支付宝认证授权

支付宝API: https://opendocs.alipay.com/open/284/106000?ref=api

注:支付宝APP需要使用APP支付宝登录。见《APP支付宝登录产品介绍》

见:https://opendocs.alipay.com/open/218/105329/

4.4.2.1 业务方换取授权链接

4.4.2.1 支付宝认证获取token

同时支持支付宝生活号证获取token

中台网关响应

/wx/alipay/callback?app_id=2019012263118366&source=alipay_app_auth&state=SOCIAL$2059$PENDING&app_auth_code=72eb27532a0d4fcf8e6ec7e736990X64

授权成功后,获取access_token ,由 access_toke换取用户支付宝用户 user_id 即buyer_id

协议: https

URL: /wx/alipay/token/grant

method: POST

HTTP头部:见《3.2.2 受信内部服务鉴权

body:

字段 类型 是否必传 说明
app_auth_code String 支付宝预授权code
sub_id String 支付宝商户ID
member_id String 聚合支付用户ID,已接入聚合支付的业务此参数不可为空。
authen_type String 认证类型: 见全局字典《1.2 认证/支付类型: authen_type

返回结果:

{
   "code": "200",
   "message": "成功", 
   "data":
     {"user_id":"o6Cx46ISmbJ1oWL8-_KS7YWev7RQ","token":"eyJhbGciOiJIUzI1NiJ9.eyJrZXlfbWVtYmVyX2xvZ2luIjoie1widW5pb25pZFwiOlwib0VJd2U1NVBhYkp1XzlYMFRocElpS1ZIaTVrSVwiLFwib3BlbmlkXCI6XCJvNkN4NDZJU21iSjFvV0w4LV9LUzdZV2V2N1JRXCIsXCJuaWNrbmFtZVwiOlwi6bmP5ZOlXCIsXCJjaXR5XCI6XCJcIixcInByb3ZpbmNlXCI6XCJcIixcImNvdW50cnlcIjpcIlwiLFwiaGVhZGltZ3VybFwiOlwiaHR0cHM6Ly90aGlyZHd4LnFsb2dvLmNuL21tb3Blbi92aV8zMi9Ia1VpYmVjSG1qV0lwWXRHWkFxME0zVGJVRlhpYkxrVnlINkFHeGliUVQxNGtFNklJTTR3SDBpYzl3NTR6d3o2QTZEV29NMjFZWXBZaGVEcXdsa2J3WnlLd0EvMTMyXCIsXCJzZXhcIjowLFwibGFuZ3VhZ2VcIjpcIlwiLFwicHJpdmlsZWdlXCI6W10sXCJhdXRoZW5fdHlwZVwiOlwid2VjaGF0XCIsXCJidXNpbmVzc190eXBlXCI6XCJwYXJrcGF5XCIsXCJzcGFjZV9pZFwiOjEwMjAsXCJzcGFjZV9uYW1lXCI6XCLnvo7nmoTniankuJrmmbrmhaflgZzovablnLpcIixcImFwcElkXCI6XCJ3eGE5YzExOTMwZGUxY2U3MDZcIixcImFwcFNlY3JldFwiOlwiNTRhMzYxYjUyNjY0MjcyZDIzMmE3NTgyZGE3NDMyODRcIixcInNob3BpZFwiOjF9IiwiZXhwIjoxNjM4MjQzOTMyLCJpYXQiOjE2MzgyMzY3MzIsImp0aSI6IjA2MGUyZGVlLTdhOTQtNGYyNi05ZjA3LWM1MmMzZGViYmVmZiJ9.4J_5ES4sI6v5rf1fxlrPo_6X1c8x6d5ac58fGJcjdQ8
"     
   }

}

重要返回字段:

字段 类型 是否必返 说明
user_id String 调用支付宝授权后的用户ID,后面支付需要用到
token String 授权成功后,平台授予的token, 前端需要妥善保存,后续的请求中需要将其携带在http头部。用户的关键信息。

4.5 支付

本期API仅实现汇付分帐支付。

4.5.1 统一下单

说明:本接口微信、支付宝统一下单共用接口。平台启用间连支付通道,调用的第三方聚合支付通道,由第三方支付渠道调用微信或支付宝的接口完成下单,按执行了分帐逻辑;平台启用的直连支付通道,是直接调用微信/支付宝的官方下单接口。

URL: /wx/poly/pay/unifyOrder

Method: PUT

HTTP头部:见《3.3 支付相关API及鉴权

BODY:

重要返回字段:

字段 类型 是否必传 说明
business_order_id String(64) 业务方的订单号,同一应用 app_id下唯一。
total_fee Int 订单总金额,单位:分。
goods_title String(64) 商品标题,业务方不传,中台默认为“付款”
goods_desc String(42) 商品描述,业务方不传,中台默认为“商品”
pay_notify_url String(250) 业务方回调地址;见数据字典《1.3 业务方事件回调
extra JSONOBJECT 业务方回调HTTP BODY;见数据字典《1.3 业务方事件回调

div_members 对象示例:

[{
   member_id:"XX"
   amount: 120
   fee_flag:"N"

},...]

调用第三方渠道分帐支付接口时,分账对象信息 div_members 由中台来完成。不需要业务方传参。

分账对象信息div_members 由支付中台来计算。

数据结构如下:

参数 类型 必填 描述
member_id String(64) Y 分账用户 Member对象 的 id;若是商户本身时,传入0
amount String(14) Y 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
fee_flag String(1) N 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个

返回数据约定:

{
  "code":"200",
  "message":"success",
  "data": {

       "transaction_id": "XXXX",
       "order_no":"XXX",
       "status": "XXX",
        "payinfo":{....}
        ...
  }



}

返回字段说明:

transaction_id: 中台交易ID

status :支付状态, 见《1.1 状态: status

order_no: 业务订单号

payinfo: JSONObject 微信或支付宝的预支付参数。

其中,微信的payinfo 返回字段如下:

字段 类型 是否必返 说明
nonce_str String 生成签名的随机串
out_trade_no String 平台生成的唯一订单号 ,此订单号同步给微信
total_fee String 付款总额
prepay_id String 生成订单后获取预支付id
timeStamp String 时间戳
sign String 微信返回签名

4.5.2 查询支付对象

URL: /wx/poly/pay/query

Method: PUT

HTTP头部:见《3.3 支付相关API及鉴权

BODY:

重要返回字段:

字段 类型 是否必传 说明
order_no String(64) 业务方的订单号,同一应用下唯一。

4.5.2 退款

URL: /wx/poly/pay/refund

Method: PUT

HTTP头部:见《3.3 支付相关API及鉴权

BODY:

字段 类型 是否必传 说明
out_trade_no String(64) 中台方订单号。由中台统一下单后返回给业务方。
refund_amount String(16) 退款金额,RMB单位:分。
notify_url String(250) 业务方回调地址;见数据字典《1.3 业务方事件回调
extra JSONObject 业务方回调HTTP body ; 见数据字典《1.3 业务方事件回调

5 知识储备及参考

5.1 小程序授权

先授权登录 wx.login

wx.login({   success: res => {
             var code = res.code;
             console.log('-->授权code:'+code+');

        }

再由code 获取小程序openid

https://api.weixin.qq.com/sns/component/jscode2session?appid="+appid+"&js_code="+code+"&grant_type=authorization_code

返回:

{"session_key":"i0AYAiSWiE\/CFuo3Lh0LGg==","openid":"oVdDt5YHVN-SIBTaVFxInPc4IzuI"}

6 参考资料

汇付天下API对接:

https://docs.adapay.tech/api/index.html

商户接入指引: https://docs.adapay.tech/help/in-guidelines.html

分帐接口:

https://docs.adapay.tech/api/trade.html#payment

实时分帐业务功能:

https://docs.adapay.tech/api/busiprocess.html#id2

支付方式:

https://docs.adapay.tech/api/paytype_introduce.html#

支付流程:

https://docs.adapay.tech/api/process.html

创建分帐对象

https://docs.adapay.tech/api/busiprocess.html#id2

https://docs.adapay.tech/api/busiprocess.html#id3

结算查询:

https://docs.adapay.tech/api/trade.html#settle-detail-query

原型: https://modao.cc/app/fQuUG9vyriwuyg8BXBe4C8 #支付中台-支付中台

社区支付:

http://arch.smartmideazy.com/apidoc/main-entry/any-pay.html

Copyright © www.remacsmart.com/ 2021 all right reserved,powered by Gitbook该文件修订时间: 2022-12-08 08:55:49

results matching ""

    No results matching ""