# 配置拉取

机具注册到主体,由主体管理员绑定对应商户后,通过此接口查看机具配置

# 请求方法

POST(application/json)

# 请求地址

https://payapi.weixiao.qq.com/configv2

注:若私有化部署,接口地址域名变更私有化域名

# 参数说明

# 响应说明

{
    "code": 0,
    "message": "",
    "data": {
        "risk_model": [
            {
                "order_amount": "50000",
                "amount": "50000",
                "order_num": "20",
                "level": "0"
            },
            {
                "order_amount": "50000",
                "amount": "50000",
                "order_num": "5",
                "level": "1"
            },
            {
                "order_amount": "5000",
                "amount": "10000",
                "order_num": "1",
                "level": "2"
            }
        ],
        "identity": [],
        "merchant": {
            "name": "测试商户",
            "id": "1013957946_1941239759",
            "free_rule": "(EnName NOT LIKE 'wb[_]%' AND EnName NOT LIKE 'wf[_]%' AND EnName NOT LIKE '%[0-9]%') OR (EnName LIKE 'TXLS%' )",
            "free_durings": "[{\"begin\":\"07:00:00\",\"end\":\"10:10:00\"}]"
        },
        "pos": {
            "can_pay": "0",
            "offline_can_pay": "1",
            "max_offline_time": "172800",
            "max_order_amount": "50000",
            "max_offline_amount": "100000000",
            "refund_latest_time": "1607616000",
            "preferred_offline_num": "4000",
            "max_time_out_order_num": "50",
            "quota_order_amount": "0",
            "wallet_offline_pay_switch": 1
        },
        "code_rule": {
            "secret": "RQyjkKSCTCPOBJMI",
            "public_key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSq/Tsn95Z5Bxxxxxxxxxxmj7pRo\npu5n1W23Qi5W+rDQswIDAQAB\n-----END PUBLIC KEY-----\n",
            "prev_public": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGn6xxxxxxxxxIKxrLYmhTwIDAQAB\n-----END PUBLIC KEY-----\n",
            "next_public": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGxxxxxxxxwO\njU/GAVX8pKF+Ac/zGwIDAQAB\n-----END PUBLIC KEY-----\n",
            "prev_rule": "{\"version\":\"v003\",\"f\":{\"s\":\"10\",\"l\":\"4\",\"v\":{\"identity_type\":{\"s\":\"0\",\"l\":\"8\"},\"entrusts\":{\"s\":\"8\",\"l\":\"1\"},\"risk\":{\"s\":\"9\",\"l\":\"4\"},\"channel\":{\"s\":\"13\",\"l\":\"4\"},\"ars\":{\"s\":\"17\",\"l\":\"1\"}}},\"u\":{\"s\":\"14\",\"d\":\"|\",\"v\":{\"card_number\":\"0\",\"remark\":\"1\"}}}",
            "rule": "{\"version\":\"v003\",\"f\":{\"s\":\"10\",\"l\":\"4\",\"v\":{\"identity_type\":{\"s\":\"0\",\"l\":\"8\"},\"entrusts\":{\"s\":\"8\",\"l\":\"1\"},\"risk\":{\"s\":\"9\",\"l\":\"4\"},\"channel\":{\"s\":\"13\",\"l\":\"4\"},\"ars\":{\"s\":\"17\",\"l\":\"1\"}}},\"u\":{\"s\":\"14\",\"d\":\"|\",\"v\":{\"card_number\":\"0\",\"remark\":\"1\"}}}",
            "next_rule": "{\"version\":\"v003\",\"f\":{\"s\":\"10\",\"l\":\"4\",\"v\":{\"identity_type\":{\"s\":\"0\",\"l\":\"8\"},\"entrusts\":{\"s\":\"8\",\"l\":\"1\"},\"risk\":{\"s\":\"9\",\"l\":\"4\"},\"channel\":{\"s\":\"13\",\"l\":\"4\"},\"ars\":{\"s\":\"17\",\"l\":\"1\"}}},\"u\":{\"s\":\"14\",\"d\":\"|\",\"v\":{\"card_number\":\"0\",\"remark\":\"1\"}}}"
        },
        "timestamp": "1607686466",
        "md5": "92009a514b8e69b56b0222a8d6df5e82"
    }
}

# 响应参数

参数名 类型 必填 描述
data object Y 业务数据
code int Y 业务状态 0 为成功 10001 机具未注册 10002 未绑定商户
message string Y 业务提示

# data

参数名 类型 必填 描述
risk_model list Y 风控模型(离线策略)
identity list Y 身份类型支付策略(离线策略)
pos object Y 机具配置策略
merchant object Y 商户信息
code_rule object Y 离线解码规则
timestamp int Y 配置更新时间
md5 string Y 配置的md5值(在代扣下单接口中需要提交这个值)
card object Y 实体卡相关配置
update int Y 是否有可用更新(0:没有;1:有更新)
# risk_model

风控模型,系统会根据特定规则,给当前机具下发0-9档规则,等级对应数据中的level。

风控规则跟着风险等级,不同的等级,对应的离线支付单笔限额、离线支付总额、离线支付总笔数都是不一样的。

若当前机具网络状态是离线,机具需要通过码里面的risk(若无则为0)来判定当前的风控等级,若当前消费者的离线未上传订单笔数和汇总金额超出了对应的等级的订单笔数和汇总金额限制,则提示交易失败,订单金额限制类似。

参数名 类型 必填 描述
amount int Y 汇总金额限制
order_amount int Y 订单金额限制
order_num int Y 订单笔数限制
level int Y 风控等级
offline int Y 是否支持离线消费。0:不支持,1:支持

上述amount、order_amount、order_num几个参数都是以单一消费者为单位进行限制,一个消费者的消费参数达到限制后不能继续消费。同时当前机具未上传的离线消费的总金额不能超过pos数据的max_offline_amount字段指定的金额。

配置下发的risk_model数据,每条规则以字符串拼接的方式给到,机具需要自行拆分对应的字段。

机具离线情况下,应该首先根据配置参数pos.offline_can_pay判断是否可离线消费,再根据当前消费用户的风控级别取risk_model配置里面的offline字段的值判断当前用户是否可以进行离线消费。

risk_model单条数据格式:level,offline,order_number,amount,order_amount

risk_model内容示例: ​{ "risk_model":[ "0,1,20,50000,20000", "1,1,5,50000,20000", "2,0,1,10000,5000" ] } ​

# merchant
参数名 类型 必填 描述
id string Y 商户id
name string Y 商户名称
# identity
[
    {
        "type": "1",
        "time_limit": [
            "20190402,06301930,21302300",
            "20190403,00002359",
            "20190404,00002359",
            "20190405,00002359",
            "20190406,04002359",
            "20190407,04002359",
            "20190408,00002359"
        ]
    },
    {
        "type": "7",
        "time_limit": [
            "20190402,00002359",
            "20190403,00002359",
            "20190404,00002359",
            "20190405,00002359",
            "20190406,04002359",
            "20190407,04002359",
            "20190408,00002359"
        ]
    },
    {
        "type": "13",
        "time_limit": [
            "20190402,00002359",
            "20190403,00002359",
            "20190404,00002359",
            "20190405,00002359",
            "20190406,04002359",
            "20190407,04002359",
            "20190408,00002359"
        ]
    }
]

消费时间段限制,后台会下发未来7天的时间段限制,格式为20190402,06301930,21302300,表示当前身份类型在20190402当天的06:30到19:30和21:30到23:00这两个时间段内不能消费。机具需要根据解码获取到的用户身份类型,判断当前用户是否在不允许消费的时间段内,如果在,则拒绝消费。同时要注意,消费时间段可以有多个

参数名 类型 必填 描述
type int Y 身份类型
time_limit list Y 消费时间段限制(离线策略)
# pos

can_pay 当前机具是否允许发起支付及允许消费的方式。 可用二进制进位的方式进行理解:

0: 不允许消费 // 0000 1: 只允许刷码消费 // 0001 2: 只允许刷卡消费 // 0010 3: 允许刷码消费和刷卡消费 // 0011

一般情况下,can_pay的值为0、1、3, 当can_pay的值为2或者3的时候,需要解析配置参数card里面的内容。

offline_can_pay: 是否允许离线支付,当这个参数为0时,机具不允许发起离线订单逻辑

max_offline_amount: 机具最大离线订单总金额,当前机具所有未完成的订单总金额不能大于这个值

max_order_amount: 机具单笔订单最大金额,在线离线都适用。

refund_latest_time: 订单最晚可退款时间,订单下单时间大于当前参数,则可以发起退款。

preferred_offline_num: 优先离线笔数,机具在设置允许离线情况下参数生效,如果未上传订单数小于参数,则优先离线消费。

quota_order_amount: 定额消费金额,若该值不为0,代表机具已开始定额消费,不允许随机消费,适用场景(校园小巴刷码等),若不支持定额消费, 忽略该字段即可

can_mix_pay:聚合支付开关,目前用于控制微信原生码、支付宝原生码支付

wallet_offline_pay_switch: 余额、补贴离线支付开关

当前机具支付配置信息

参数名 类型 必填 描述
can_pay int Y 是否允许支付 0:不允许,1:只允许刷码;2:只允许刷卡;3:允许刷码和刷卡
offline_can_pay int Y 是否允许离线支付 0 不允许;1 允许
max_offline_amount int Y 机具最大离线订单总额
max_order_amount int Y 单笔订单最大金额
refund_latest_time int Y 订单最晚可退款时间
preferred_offline_num int Y 优先离线订单笔数
quota_order_amount int Y 机具定额消费额(单位:分)0 表示不开启
can_mix_pay int Y 是否允许聚合支付 0-不能消费;1-支持全部;2-只支持支付宝;4-只支持微信
pay_query_timeout int Y 免密支付查询的超时时间
confirm_pay_query_timeout int Y 非免密支付查询的超时时间
wallet_offline_pay_switch int Y 是否支持余额、补贴离线支付,0-不支持;1-支持
# code_rule
参数名 类型 必填 描述
secret string Y totp密钥
public_key string Y rsa当前公钥
prev_public string Y rsa上个公钥
next_public string Y rsa下个公钥
prev_rule string Y 上个解码规则
rule string Y 当前解码规则
next_rule string Y 下个解码规则
# card (pos.can_pay的值为2或者3时才取值)
{
 "card": {
  "type": 1, 
  "rule": null,
  "max_daily_amount": 1000000,
  "category": 1,
  "partitions": "6,7,8,9",
  "rule_tass": {
   "secret": "efa6cab5b836d347920910432f1b7b0dc7503dc8f7ad0c31307a2b27418d7379",
   "secret_fm": "9cabc9bacd46a7339f0961302d1e0b0d0066f51dd9372c2c4b87b19054fadd19",
   "m1_secret_fm": "9cabbec3b332a534e30e67395f1d020e65135d1e7f77c65d39afd14127f016ab"
  }
 }
}
参数名 类型 必填 描述
type int Y 卡类型,0为旧卡,直接读取物理卡号;1为新卡,需要拿rule里的秘钥去解卡判断有效性。
rule object Y 解卡规则
max_daily_amount int Y 每日最大消费金额
category int Y 学校使用的卡类型 1: M1 卡 ; 其他默认为 CPU 卡
partitions string Y M1 卡使用的扇区
rule_tass object Y CPU/M1卡初始密钥
# rule_tass
参数 说明
m1SecretFm M1 卡初始秘钥
secretFm CPU 卡初始秘钥
secret 国密CPU 卡初始秘钥(一般不使用)
# rule
参数 说明
public_key 公钥
secret 私钥