服务流程
Tips:
- 反欺诈服务为实时服务,用户可以在支付授权前和支付授权后请求反欺诈风险评估:
- 对于支付授权前请求的,输出结果为:欺诈风险评分和支付决策建议(通过、拒绝、加强验证)
- 对于支付授权后请求的,输出结果为:欺诈风险评分和支付决策建议(拦截、请款)
- 支持对商户进行定制化策略调优:接口对接完毕后2-4周的策略调优时间,商户对整体表现满意(支付成功率和欺诈率)后,开始计费
- 商户需要向跨拒通传输相关数据,主要包括:
- BasicInfo:支付参考号、金额、币种等
- UserInfo:邮箱、账号名称等
- ClientInfo:商品类型、商品数量等
- ChannelInfo:卡号、有效期、持卡人名称、授权信息(AvsResult、CvcResult、ECI等)
- ExtraInfo:收货地址等交易信息
获取 API 签名
描述:签名字段生成用于调用接口时的请求头传递,主要是“Authorization”签名字段值的生成。
步骤一:拼接规范请求串
- CanonicalRequest =
- HTTPRequestMethod + '\n' +
- CanonicalURI + '\n' +
- CanonicalQueryString + '\n' +
- CanonicalHeaders + '\n' +
- SignedHeaders + '\n' +
- HashedRequestPayload
字段名称
解释
HTTPRequestMethod
HTTP 请求方法(GET、POST )。此示例取值为 POST。
CanonicalURI
URI 参数,API 3.0 固定为正斜杠(/)。
CanonicalQueryString
发起 HTTP 请求 URL 中的查询字符串,对于 POST 请求,固定为空字符串"",对于 GET 请求,则为 URL 中问号(?)后面的字符串内容,例如:Limit=10&Offset=0。 注意:CanonicalQueryString 需要参考 RFC3986 进行 URLEncode,字符集 UTF8,推荐使用编程语言标准库,所有特殊字符均需编码,大写形式。
CanonicalHeaders
参与签名的头部信息,至少包含 host 和 content-type 两个头部,也可加入自定义的头部参与签名以提高自身请求的唯一性和安全性。 拼接规则:头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:value\n 格式拼接;多个头部,按照头部 key(小写)的 ASCII 升序进行拼接。此示例计算结果是 content-type:application/json; charset=utf-8\nhost:cvm.tencentcloudapi.com\n。** 注意:content-type 必须和实际发送的相符合,有些编程语言网络库即使未指定也会自动添加 charset 值,如果签名时和发送时不一致,服务器会返回签名校验失败。**
SignedHeaders
参与签名的头部信息,说明此次请求有哪些头部参与了签名,和 CanonicalHeaders 包含的头部内容是一一对应的。content-type 和 host 为必选头部。 拼接规则:头部 key 统一转成小写;多个头部 key(小写)按照 ASCII 升序进行拼接,并且以分号(;)分隔。此示例为 content-type;host
HashedRequestPayload
请求正文(Requestpayload,即 body,此示例为 {"Limit": 1, "Filters": [{"Values": ["\u672a\u547d\u540d"], "Name": "instance-name"}]})的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(RequestPayload))),即对 HTTP 请求正文做 SHA256 哈希,然后十六进制编码,最后编码串转换成小写字母。对于 GET 请求,RequestPayload 固定为空字符串。此示例计算结果是 35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064。
根据以上规则,示例中得到的规范请求串如下:
- POST
- /
- content-type:application/json; charset=utf-8
- host:cvm.tencentcloudapi.com
- content-type;host
- 35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064
步骤二:拼接待签名字符串
- StringToSign =
- Algorithm + \n +
- RequestTimestamp + \n +
- CredentialScope + \n +
- HashedCanonicalRequest
Algorithm
签名算法,目前固定为 TC3-HMAC-SHA256。
RequestTimestamp
请求时间戳,即请求头部的公共参数 X-TC-Timestamp 取值,取当前时间 UNIX 时间戳,精确到秒。此示例取值为 1551113065。
CredentialScope
凭证范围,格式为 Date/service/tc3_request,包含日期、所请求的服务和终止字符串(tc3_request)。Date 为 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,必须与调用的产品域名一致。此示例计算结果是 2019-02-25/ra/tc3_request。
HashedCanonicalRequest
前述步骤拼接所得规范请求串的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))。
注意
- Date 必须从时间戳 X-TC-Timestamp 计算得到,且时区为 UTC+0。如果加入系统本地时区信息,例如东八区,将导致白天和晚上调用成功,但是凌晨时调用必定失败。假设时间戳为 1551113065,在东八区的时间是 2019-02-26 00:44:25,但是计算得到的 Date 取 UTC+0 的日期应为 2019-02-25,而不是 2019-02-26。
- Timestamp 必须是当前系统时间,且需确保系统时间和标准时间是同步的,如果相差超过五分钟则必定失败。如果长时间不和标准时间同步,可能导致运行一段时间后,请求必定失败,返回签名过期错误。
- 根据以上规则,示例中得到的待签名字符串如下:
- TC3-HMAC-SHA256
- 1551113065
- 2019-02-25/cvm/tc3_request
- 5ffe6a04c0664d6b969fab9a13bdab201d63ee709638e2749d62a09ca18d7031
步骤三:计算签名(伪代码)
- SecretKey = "Gu5t9xGAR***********EXAMPLE"
- byte[] secretDate = hmac256(("TC3"+ SecretKey).getBytes(UTF8), date);
- byte[] secretService = hmac256(secretDate, service);
- byte[] secretSigning = hmac256(secretService, "tc3_request");
- String signature = DatatypeConverter.printHexBinary(hmac256(secretSigning, stringToSign)).toLowerCase();
- out.println(signature);
派生出的密钥 SecretDate、SecretService 和 SecretSigning 是二进制的数据,可能包含不可打印字符,此处不展示中间结果。
字段名称
解释
SecretKey
原始的 SecretKey,即 Gu5t9xGAR***********EXAMPLE
date
即 Credential 中的 Date 字段信息。此示例取值为 2019-02-25
service
即 Credential 中的 Service 字段信息。此示例取值为 ra
步骤四:拼接Authorization
按如下格式拼接 Authorization:
- String Authorization =
- Algorithm + ' ' +
- 'Credential=' + SecretId + '/' + CredentialScope + ', ' +
- 'SignedHeaders=' + SignedHeaders + ', ' +
- 'Signature=' + Signature
字段名称
解释
Algorithm
签名方法,固定为 TC3-HMAC-SHA256。
SecretId
密钥对中的 SecretId,即 AKIDz8krbsJ5**********mLPx3EXAMPL。
CredentialScope
见上文,凭证范围。此示例计算结果是 2019-02-25/ra/tc3_request。
SignedHeaders
见上文,参与签名的头部信息。此示例取值为 content-type;host
Signature
签名值。
反欺诈接口字段
一、接口描述
- 接口请求域名:
美西:rce.na-siliconvalley.securego.com
- 请求方式:POST
Content-Type :application/json
二、Transaction Check API【风险检查】
1. 输入参数 – Header
参数名称
类型
必选
描述
X-TC-Action
String
required
公共参数,本接口取值:DescribeRiskControl
X-TC-Version
String
required
公共参数,本接口取值:2020-02-26
X-TC-Region
String
required
公共参数,详见产品支持的 地域列表。暂时仅支持:
1、ap-singapore
2、na-siliconvalley
X-TC-Timestamp
String
required
Uinx 时间戳,精度:秒
Host
String
required
本接口取值: 请求域名
Authorization
String
required
请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。
本接口采用新版本的加密方法生成该字段,加密方法详见对应文件夹对应demo
1 .1 输入参数-body
参数名称
类型
必选
描述
BizCryptoData
InputRiskControlData
requried
业务数据加密参数
1.2 InputRiskControlData【加密数据】
参数名称 | 类型 | 必选 | 描述 |
IsAuthorized | String | 是 | 是否授权:1已授权,否则未授权。
调用全栈式风控引擎接口服务时,客户需先明确授权 |
CryptoType | String | 是 | 加密类型:1: AES加密 |
CryptoContent | String | 是 | 加密内容。非空时接口采用加密模式,详细步骤见下“加密说明” |
加密说明:
- 接口通过BizCryptoData参数,支持采用加密模式传递业务参数。
- 当CryptoContent非空时,接口触发加密模式。以AES加密为例,加密步骤如下:
- 向wetech申请获得账号的ClientID,进行base64编码,得到AES密钥key。当key大于等于32字节时,取前32字节为key;大于等于24字节时,取前24字节为key;大于等于16字节时,取前16字节为key
- 以步骤1中得到的密钥key,对业务数据对象进行AES加密。加密算法模式为AES/ECB/PKCS7Padding。业务数据对象为InputDescribeRiskControl参数的json字符串【json示例见:5.2、InputDescribeRiskControl_json格式】。
- 对步骤2中AES加密得到的字节数组进行base64编码,得到最终加密后的业务参数请求字符串,即CryptoContent。
2.InputDescribeRiskControl 【加密前明文数据】
参数名称 | 类型 | 必选 | 描述 |
PostTime | Uint64 | 是 | 用户操作时间戳,精确到秒 |
BasicInfo | BasicInfo | 是 | 详情见: BasicInfo |
UserInfo | UserInfo | 是 | 详情见: UserInfo |
ClientInfo | ClientInfo | 是 | 详情见: ClientInfo |
ChannelInfo | ChannelInfo | 是 | 详情见: ChannelInfo |
SceneInfo | SceneInfo | 是 | 详情见: SceneInfo |
ExtraInfo | ExtraInfo | 是 | 详情见: ExtraInfo |
2.1 BasicInfo
参数名称 | 类型 | 必选 | 描述 |
Scene | String | 是 | 固定值,固定值,场景:transaction |
Command | String | 是 | 固定值,有两种取值
pre-check :第一次调用风险检查服务;
post-check :同一笔交易,第一次调用风险检查服务得到风控返回的决策后,再去银行做完授权后,还想再做一次风险检查一次的时候,使用这个命令字(用来区别于第一次)
注:正常完整的信用卡交易分预授权(authorize)和请款 (capture)两步,预授权成功后,得到银行授权结果(授权结果,3D 结果,CVV 结果等),还可以结合银行返回的结果,再进行一次风险检查 |
ReqTime | String | 是 | 平台传值,当笔请求时间(UTC0 时间戳,单 位 秒) |
Reference | String | 可选 | 平台值,策略文件,为空时使用默认配置
*建议不同场景使用不同文件 |
AppID | String | 是 | 固定值,具体应用ID。WeTech提供的appId |
Details | Array of InputBasicInfoDetails | 可选 | 详情见:2.1.1 InputBasicInfoDetails |
2.1.1 InputBasicInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详情见:2.1.1.1 InputBasicInfoDetailsKey |
Value | String | 取值 |
2.1.1.1 InputBasicInfoDetailsKey
基本信息 | |||
参数名称 | 类型 | 必选 | 描述 |
ReqBillNo | String | 是 | 业务传值,业务订单号,单次请求的唯一 |
Amount | String | 是 | 业务传值,应付交易金额(元) |
Currency | String | 可选 | 业务传值,应付交易金额对应币种 |
RcUUID | String | 可选 | 平台值,同一笔交易标识,一般一笔交易多次请求时使用,取值为第一次请求风控时返回得UUID |
2.2 UserInfo
参数名称 | 类型 | 描述 |
Details | InputUserInfoDetails | 详情见:2.2.1 InputUserInfoDetails |
2.2.1 InputUserInfoDetails
参数名称 | 必选 | 描述 |
Key | String | 详情见:2.2.1.1 InputUserInfoDetailsKey |
Value | String | 取值 |
2.2.1.1 InputUserInfoDetailsKey
账号信息 | |||
参数名称 | 类型 | 必选 | 描述 |
UserID | String | 是 | 业务传值,发货号码; |
UserIDType | String | 是 | 业务传值,发货号码类型,与 UserID 成对出现 1. 自身平台注册的 (email、phone 注册)填具体注册类型, 2. 第三方注册的 填具体注册平台 facebook, google 等 |
UserEmail | String | 可选 | 业务传值,邮箱,*信用卡类必填 |
UserMobile | String | 可选 | 业务传值,手机号 |
LoginID | String | 可选 | 业务传值,登录号码 |
LoginIDType | String | 可选 | 业务传值,注册类型,与 LoginID 成对出现 1. 自身平台注册的 (email、phone 注册)填具体注册类型, 2. 第三方注册的 填具体注册平台 facebook, google 等 |
2.3 ClientInfo
参数名称 | 类型 | 描述 |
Details | InputClientInfoDetails | 详情见:2.3.1 InputClientInfoDetails |
2.3.1 InputClientInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详细见:2.3.1.1 InputClientInfoDetailsKey |
Value | String | 取值 |
2.3.1.1 InputClientInfoDetailsKey
设备信息 | |||
参数名称 | 类型 | 必选 | 描述 |
UserIP | String | 是 | 业务传值,当前用户 IP |
DeviceID | String | 可选 | 业务传值,设备ID |
SessionID | String | 可选 | 业务传值,会话ID(嵌入JS获取到得RC_session 值见前端集成) |
UserAgent | String | 可选 | 业务传值,浏览器类型(eg. Mozilla/5.0 (Windows NT 10.0; Win64; x64)) |
AcceptLang | String | 可选 | 业务传值,用户客户端语言 |
物品信息 | |||
ProductID | String | 是 | 平台传值,物品 ID |
ProductType | String | 可选 | 平台传值,物品类型(digital, physical) |
ProductItemNum | String | 可选 | 平台传值,物品数量 |
2.4 ChannelInfo
参数名称 | 类型 | 描述 |
Details | InputChannelInfoDetails | 详情见:2.4.1 InputChannelInfoDetails |
2.4.1 InputChannelInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详细见:2.4.1.1 InputChannelInfoDetailsKey |
Value | String | 取值 |
2.4.1.1 InputChannelInfoDetailsKey
渠道信息 | |||
参数名称 | 类型 | 必选 | 描述 |
Channel | String | 是 | 平台传值,支付渠道:iap/gwallet/adyen |
ChannelBillNo | String | 可选 | 平台传值,渠道订单号,单笔交易的唯一 |
信用卡,卡号信息 | |||
CardNo | String | 是 | 业务传值,卡号前 6 后 4(eg. 425361****1234) |
CardNoMd5 | String | 是 | 业务传值,业务传值,完整卡号的 md5加密值,32位小写十六进制字符串,
例:字符串 1234567890 —— 对应MD5 e807f1fcf82d132f9bb018ca6738a19f |
CardBin | String | 是 | 业务传值,卡号前 6 位 |
CardExpirationY | String | 是 | 业务传值,卡有效期(年)YYYY |
CardExpirationM | String | 是 | 业务传值,卡有效期(月)MM |
CardHolderFirstName | String | 是 | 业务传值,持卡人(名) |
CardHolderLastName | String | 是 | 业务传值,持卡人(姓) |
账单地址信息 | |||
BillingCountry | String | 可选 | 业务传值,国家 |
BillingPostCode | String | 可选 | 业务传值,邮政编码 |
BillingState | String | 可选 | 业务传值,省/州 |
BillingCity | String | 可选 | 业务传值,城市 |
BillingStreet1 | String | 可选 | 业务传值,街道地址 |
BillingStreet2 | String | 可选 | 业务传值,房间门牌号 |
授权后银行回带信息 | |||
ReasonCode | String | 是 | 业务传值,结果码 |
ReasonMsg | String | 是 | 业务传值,结果描述(银行侧返回的原始结果描述,类似 51: Insufficient funds/over credit limit / Not sufficient funds 这样的,要从收单行侧拿到) |
3DOffered | String | 是 | 业务传值,是否要验证 3D (true,false) |
LiabilityShift | String | 是 | 业务传值,是否有责任转移,信用卡网关回传 的(true,false) |
GateWay | String | 可选 | 业务传值,信用卡网关, adyen/checkout/worldpay 等 |
GateWayPSP | String | 可选 | 业务传值,信用卡网关回传的订单 |
3DResponsed | String | 可选 | 业务传值,3D 验证结果 |
AvsResult | String | 可选 | 业务传值,AVS 验证结果 |
CvcResult | String | 可选 | 业务传值,CVC 验证结果 |
ECI | String | 可选 | 业务传值,eci 值, 信用卡网关回传的 |
CAVV | String | 可选 | 业务传值,cavv 值, 信用卡网关回传的 |
CavvAlgorithm | String | 可选 | 业务传值,cavv 算法代码 |
AuthCode | String | 可选 | 业务传值,授权结果码, 信用卡网关回传的 |
2.5 SceneInfo
参数名称 | 类型 | 描述 |
Details | InputSceneInfoDetails | 待补充【该参数目前取空】 |
2.5.1 InputSceneInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 字段名称 |
Value | String | 取值 |
2.6 ExtraInfo
参数名称 | 类型 | 描述 |
Details | InputExtraInfoDetails | 详情见:2.6.1 InputExtraInfoDetails |
2.6.1 InputExtraInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详细见:2.6.1.1 InputExtraInfoDetailsKey |
Value | String | 取值 |
2.6.1.1 InputExtraInfoDetailsKey
自定义 – 登录信息 | |||
参数名称 | 类型 | 必选 | 描述 |
LoginIDCountry | String | 可选 | 业务传值,登录用户注册国家 |
LoginIDRegTime | String | 可选 | 业务传值,登录用户注册时间(UTCO 秒时间戳) |
LoginAge | String | 可选 | 业务传值,登录用户年龄 |
LoginGender | String | 可选 | 业务传值,登录用户性别 |
LoginNickname | String | 可选 | 业务传值,登录用户昵称 |
LoginRalname | String | 可选 | 业务传值,登录用户真实 |
LoginEmail | String | 可选 | 业务传值,登录用户邮箱 |
LoginMobile | String | 可选 | 业务传值,登录用户手机号 |
自定义 - 发货信息 | |||
ShippingFirstName | String | 可选 | 业务传值,收货人(名) |
ShippingLastName | String | 可选 | 业务传值,收货人(姓) |
ShippingCountry | String | 可选 | 业务传值,收货人国家 |
ShippingPostCode | String | 可选 | 业务传值,收货人所在地邮政编码 |
ShippingState | String | 可选 | 业务传值,收货人所在省/州 |
ShippingCity | String | 可选 | 业务传值,收货人所在城市 |
ShippingStreet1 | String | 可选 | 业务传值,收货人所在地街道地址 |
ShippingStreet2 | String | 可选 | 业务传值,收货人所在地房间号 |
自定义 – 交易信息 | |||
CardHash | String | 可选 | 业务传值,卡哈希(midasbuy 场景专有) |
CardContractID | String | 可选 | 业务传值,签约 ID,用于确认是否签约卡 |
WebsiteCountry | String | 可选 | 平台传值,网站入口区域 |
UserRegisterCountry | String | 可选 | 业务传值,用户注册国家 |
UserActiveCountry | String | 可选 | 业务传值,用户活跃国家 |
自定义 – 平台信息 | |||
ClientBillNo | String | 可选 | 平台传值,平台序列号,单次请求的唯一 |
ClientIP | String | 可选 | 平台传值,业务服务器ip地址 |
SubChannel | String | 可选 | 平台传值,支付子渠道 |
3.输出参数
参数名称 | 必选 | 描述 |
Data | OutputRiskControl | 业务总出参 |
RequestId | String | 唯一请求 ID,每次请求都会返回。 |
3.1 OutputRiskControl
参数名称 | 类型 | 描述 |
UUid | String | 当前请求ID |
Code | Uint64 | 返回码。0 表示成功,非 0 标识失败错误码。 |
Message | String | UTF-8 编码,出错消息。 |
Value | OutputRiskControlInfo | 业务出参 |
3.1.1 OutputRiskControlInfo
参数名称 | 类型 | 描述 |
ResultCode | Uint64 | 结果码(建议处理方式):
0:通过,
1:不通过,
2:二次验证
其他:系统错误 |
Action | String | 当ResultCode=2时:
3ds:信用卡3D验证,
graphic:图形验证,
email:邮箱验证,
mobile:手机验证 |
ResultInfo | String | 结果描述:
result_code = 0时返回‘ok’
result_code = 1时返回拒绝信息
其他时,返回系统错误信息 |
Reference | String | 当前策略文件ID |
ReferenceIdle | String | 比对策略文件ID |
Score | Uint64 | 分值总和 |
ScoreItems | OutputRiskControlScoreItems | 分值明细,json格式 |
4. 示例
4.1 输入示例
java**POST / HTTP/1.1** **Host:** rce.na-siliconvalley.wetech-rc.com **Content-Type: application/json** **X-TC-Timestamp: 1695817824** **X-TC-Region: na-siliconvalley(美西)** **X-TC-Region: ap-singapore(新加坡)** **X-TC-Version: 2020-02-26** **X-TC-Action: DescribeRiskControl** **Authorization: TC3-HMAC-SHA256 Credential=AKIDY1LTQp34sTs44vbP6bv41kfQzLWZP2Rc/2023-09-27/ra/tc3_request,SignedHeaders=content-type;host, Signature=4bb7f1650e41000ce2c38b961d86c42946b6c9e02ba2928ae8e75b0f46ff26d5** ***Header字段含义与签名生成方法见文件夹对应demo文件*** **<公共请求参数>** **{** "BizCryptoData":{ "IsAuthorized":"1", "CryptoType": "1", "CryptoContent":" V8PkNLOWRJkD3WpjUu4s2hxR5ydckO6xvawfoa00kaf8iNtp3arnKw/6Qz18++HrMXEAoD6mNiUXsYSBlBvWmYRAhNjzwz3RQ51SG92VL+1CG6rWNsSfKkwqAnUvWQig3Zr7wLivbS3hKf6uvrfRG0/RLN5qiJnoPbCVuZinA8So4DOd+kbxvuIk+kogswKqF9M2R12brCtN8OciZvvHdA60sJVkL0TxPZYSikWT4rkSKTkiCM6F2vGYg7MQVgCHYMCJ7q0BcSHl5HWCyucVvYye2MXpBUccrxlT88frOV99aD50wW3MWmFFRhPlwrbKQTdkttASGOuuKwySR/FKJt3uFsCIBPPER+S02vA8P2OvHzHnPoGFECRRuacqy+q7zIoBtE1NF09Q7Od4qSyeAp+kBrZeyH8qAmQi1RpO61lHuL3xCNUmHPyZyF8k9vV6K3SkaKyEfeFdN9wRDRRDfcT3c74+yw0AzAsvYtybblPwKz+r2CEV2iUfiPVJ1c3fsPOptWiE0wgCHblVxCtqwHbZA5i0A/cGgonu4LWAJmjsLdC6KMq3p9OytUpOdyGef7WknVmVJW/qn+ARcppHnYyTimg9Hjlv72hbJcnJCIO2Gwcv/1YPVbpWJ2nZRwRLGi1/kTgy+bEFvoKFUSiQyuzJOzmhsXbMKikhbdBRRM30Hy8YaK67M+sOr2smU0Xt3dbWT8iY5pRcgXTxYKf74UMyvETlXUAqOjLCJKF/0+1pZoyftaclOa8vKF0Diszu/ETTIm16JpXSs7mrHS+s3007wUVE9FGxhAYy5lr9G+oNNlHU7jRoQPPZiT4B6y7M3bEkpjXl8/qGa5UwhL19gLopuhZb+/kuUGr3WFlt8lYn4oQ7Tcjz5EXOu9f0DP2li6/NWSoCROEHl26wI4MtpmxjxoEN4mprL1A9hf2daylij77TaK8Gyz3nrJZc20Qdq20kr09U4AFvVq5jZbAbkK72GdaZKHPk8YhHCvo/PRTAIqR91nOEaehRLeJhQsTPDQYjwYD0C6BSUB2urIMwFX9GAxVGDvnXhfSF9HSEISaIwI0d0pExq1tKiQD5hv9XdUTveG5A2DaWuTOQ+4zKlQ==" **}** **}**
4.2 InputDescribeRiskControl_json格式示例
java## 参数:BizCryptoData.CryptoContent加密前数据格式: { "PostTime":1666347446, "BasicInfo":{ "Scene":"transaction", "Command":"post-check", "Reference":"", "ReqTime":"1666347446", "AppID":"Test01", "Details":[ {"Key":"ReqBillNo","Value":"16460183922615638888"}, {"Key":"ReqType","Value":"order"}, {"Key":"Amount","Value":"10"}, {"Key":"Currency","Value":"CNY"} ]}, "UserInfo":{ "Details":[ {"Key":"UserID","Value":"123456"}, {"Key":"UserIDType","Value":"facebook"}, {"Key":"UserIP","Value":"23.12.79.213"}, {"Key":"UserEmail","Value":"bengong@midas.com"} ]}, "ClientInfo":{ "Details":[ {"Key":"ClientBillNo","Value":"16460183922615638455"}, {"Key":"ClientIP","Value":"127.0.0.1"} ]}, "ChannelInfo":{ "Details":[ {"Key":"Channel","Value":"adyen"}, {"Key":"ChannelBillNo","Value":"16460183922615638455"}, {"Key":"CardBin","Value":"512312"}, {"Key":"CardMd5","Value":"12345"} ]}, "SceneInfo":{}, "ExtraInfo":{}} ## 参数:BizCryptoData.CryptoContent加密前数据格式: { "PostTime":1666347446, "BasicInfo":{ "Scene":"transaction", "Command":"post-check", "Reference":"", "ReqTime":"1666347446", "AppID":"Test01", "Details":[ {"Key":"ReqBillNo","Value":"16460183922615638888"}, {"Key":"ReqType","Value":"order"}, {"Key":"Amount","Value":"10"}, {"Key":"Currency","Value":"CNY"} ]}, "UserInfo":{ "Details":[ {"Key":"UserID","Value":"123456"}, {"Key":"UserIDType","Value":"facebook"}, {"Key":"UserIP","Value":"23.12.79.213"}, {"Key":"UserEmail","Value":"bengong@midas.com"} ]}, "ClientInfo":{ "Details":[ {"Key":"ClientBillNo","Value":"16460183922615638455"}, {"Key":"ClientIP","Value":"127.0.0.1"} ]}, "ChannelInfo":{ "Details":[ {"Key":"Channel","Value":"adyen"}, {"Key":"ChannelBillNo","Value":"16460183922615638455"}, {"Key":"CardBin","Value":"512312"}, {"Key":"CardMd5","Value":"12345"} ]}, "SceneInfo":{}, "ExtraInfo":{}}
4.3、 输出示例
java{ "Response":{ "Data":{ "UUid":"b7715263-659f-f315-745d-20e325e8556c", "Code":0, "Message":"OK", "Value":{ "ResultCode":"0", "Action":"", "ResultInfo":"OK", "Reference":"", "ReferenceIdle":"", "Score":"", "ScoreItems":[] }} ,"RequestId":"d12839f7-ae86-497f-a2f2-9687f0e6581d" } }
三.Transaction Notify API 【结果通知】
一笔订单必须至少调用一次
1.输入参数 – Header
参数名称 | 类型 | 必选 | 描述 |
X-TC-Action | String | 是 | 公共参数,本接口取值:DescribeRiskNotify |
X-TC-Version | String | 是 | 公共参数,本接口取值:2020-02-26 |
X-TC-Region | String | 是 | 公共参数,详见产品支持的 地域列表。暂时仅支持:
1、ap-singapore
2、na-siliconvalley |
X-TC-Timestamp | String | 是 | Uinx 时间戳,精度:秒 |
Host | String | 是 | 本接口取值:请求域名 |
Authorization |
String | 是 | 请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。
本接口采用新版本的加密方法生成该字段,加密方法详见对应文件夹demo |
1.1输入参数-body
参数名称 | 类型 | 必选 | 描述 |
BizCryptoData | InputRiskNotifyData | 是 | 业务数据加密参数 |
1.2 InputRiskNotifyData
参数名称 | 类型 | 必选 | 描述 |
IsAuthorized | String | 是 | 是否授权:1已授权,否则未授权。
调用全栈式风控引擎接口服务时,客户需先明确授权 |
CryptoType | String | 是 | 加密类型:1: AES加密 |
CryptoContent | String | 是 | 加密内容。非空时接口采用加密模式,详细步骤见下“加密说明” |
加密说明:
- 接口通过BizCryptoData参数,支持采用加密模式传递业务参数。
- 当CryptoContent非空时,接口触发加密模式。以AES加密为例,加密步骤如下:
- 获取ClientID,进行base64编码,得到AES密钥key。当key大于等于32字节时,取前32字节为key;大于等于24字节时,取前24字节为key;大于等于16字节时,取前16字节为key
- 以步骤1中得到的密钥key,对业务数据对象进行AES加密。加密算法模式为AES/ECB/PKCS7Padding。业务数据对象为InputDescribeRiskNotify参数的json字符串【json示例见:4.2、InputDescribeRiskNotify_json格式】。
- 对步骤2中AES加密得到的字节数组进行base64编码,得到最终加密后的业务参数请求字符串,即CryptoContent。
2. InputDescribeRiskNotify【加密前明文数据】
参数名称 | 类型 | 必选 | 描述 |
PostTime | Uint64 | 是 | 用户操作时间戳,精确到秒 |
BasicInfo | BasicInfo | 是 | 详情见:BasicInfo |
UserInfo | UserInfo | 是 | 详情见:UserInfo |
ClientInfo | ClientInfo | 是 | 详情见:ClientInfo |
ChannelInfo | ChannelInfo | 是 | 详情见:ChannelInfo |
SceneInfo | SceneInfo | 是 | 详情见:SceneInfo |
ExtraInfo | ExtraInfo | 是 | 详情见:ExtraInfo |
2.1 BasicInfo
参数名称 | 类型 | 必选 | 描述 |
Scene | String | 是 | 平台传值,固定值,场景:transaction |
Command | String | 是 | 平台传值,固定值,命令字:
common(交易结果)/fraud(欺诈)/chargeback(拒付) |
AppID | String | 可选 | 业务传值,固定值。WeTech提供的appId |
ReqTime | String | 是 | 平台传值,当笔请求时间(UTC0 时间戳,单 位 秒) |
Details | 可选 | 详情见:2.1.1 InputBasicInfoDetails |
2.1.1 InputBasicInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详情见:2.1.1.1 InputBasicInfoDetailsKey |
Value | String | 取值 |
2.1.1.1 InputBasicInfoDetailsKey
基本信息 | |||
参数名称 | 类型 | 必选 | 描述 |
RcUUID | String | 是 | 平台传值,下单阶段风控返回的 UUID(发货前 的检查需要带) |
TxnResult | String | 是 | 平台传值,支付结果( 0 成功,1 失败) |
ReqBillNo | String | 可选 | 业务传值,业务订单号 |
Amount | String | 可选 | 业务传值,实付交易金额(元), |
Currency | String | 可选 | 业务传值,实付交易金额对应币种 |
2.2 UserInfo
参数名称 | 类型 | 描述 |
Details | InputUserInfoDetails | 详情见:2.2.1 InputUserInfoDetails |
2.2.1 InputUserInfoDetails
参数名称 | 必选 | 描述 |
Key | String | 详情见:2.2.1.1 InputUserInfoDetailsKey |
Value | String | 取值 |
2.2.1.1 InputUserInfoDetailsKey
账号信息 | |||
参数名称 | 类型 | 必选 | 描述 |
UserID | String | 是 | 业务传值,发货号码,*交易和活动类必填 |
UserIDType | String | 是 | 业务传值,发货号码类型,与 UserID 成对出现:
1. 自身平台注册的 (email、phone 注册)填具体注册类型,;
2. 第三方注册的 填具体注册平台 facebook, google 等; |
2.3 ClientInfo
参数名称 | 类型 | 描述 |
Details | InputClientInfoDetails | 待补充【该参数目前取空值】 |
2.3.1 InputClientInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 字段名称 |
Value | String | 取值 |
2.4 ChannelInfo
参数名称 | 类型 | 描述 |
Details | InputChannelInfoDetails | 详情见:2.4.1 InputChannelInfoDetails |
2.4.1 InputChannelInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 详细见:2.4.1.1 InputChannelInfoDetailsKey |
Value | String | 取值 |
2.4.1.1 InputChannelInfoDetailsKey
渠道信息 | |||
参数名称 | 类型 | 必选 | 描述 |
Channel | String | 是 | 平台传值,支付渠道:iap/gwallet/adyen |
ChannelBillNo | String | 是 | 平台传值,渠道订单号,单笔交易的唯一 |
银行回调信息 | |||
3DOffered | String | 是 | 业务传值,是否要验证 3D (true,false) |
LiabilityShift | String | 是 | 业务传值,是否有责任转移,信用卡网关回传 的(true,false) |
GateWay | String | 可选 | 业务传值,信用卡网关, adyen/checkout/worldpay 等 |
GateWayPSP | String | 可选 | 业务传值,信用卡网关回传的订单 |
ReasonCode | String | 可选 | 业务传值,银行结果码 |
ReasonMsg | String | 可选 | 业务传值,银行结果描述 |
3DResponsed | String | 可选 | 业务传值,3D 验证结果 |
AvsResult | String | 可选 | 业务传值,AVS 验证结果 |
CvcResult | String | 可选 | 业务传值,CVC 验证结果 |
ECI | String | 可选 | 业务传值,eci 值, 信用卡网关回传的 |
CAVV | String | 可选 | 业务传值,cavv 值, 信用卡网关回传的 |
CavvAlgorithm | String | 可选 | 业务传值,cavv 算法代码 |
AuthCode | String | 可选 | 业务传值,授权结果码, 信用卡网关回传的 |
2.5 SceneInfo
参数名称 | 类型 | 描述 |
Details | InputSceneInfoDetails | 待补充【该参数目前取空值】 |
2.5.1 InputSceneInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 字段名称 |
Value | String | 取值 |
2.6 ExtraInfo
参数名称 | 类型 | 描述 |
Details | InputExtraInfoDetails | 待补充【该参数目前取空值】 |
2.6.1 InputExtraInfoDetails
参数名称 | 类型 | 描述 |
Key | String | 字段名称 |
Value | String | 取值 |
3.输出参数
参数名称 | 类型 | 描述 |
Data | OutputRiskControl | 业务总出参 |
RequestId | String | 唯一请求 ID,每次请求都会返回。 |
3.1 OutputRiskNotify
参数名称 | 类型 | 描述 |
UUid | String | 当前请求ID |
Code | Uint64 | 返回码。0 表示成功,非 0 标识失败错误码。 |
Message | String | UTF-8 编码,出错消息。 |
Value | OutputRiskNotifyInfo | 业务出参 |
3.1.1 OutputRiskNotifyInfo
参数名称 | 类型 | 描述 |
ResultCode | Uint64 | 通知结果:
0:成功,
1:失败,
其他:系统错误 |
ResultInfo | String | 结果描述:
result_code = 0时返回‘ok’
result_code = 1时返回错误信息 |
4.示例
4.1 输入示例
java**POST / HTTP/1.1** **Host:** rce.na-siliconvalley.wetech-rc.com **Content-Type: application/json** **X-TC-Timestamp: 1695817824** **X-TC-Region: na-siliconvalley(美西)** **X-TC-Region: ap-singapore(新加坡)** **X-TC-Version: 2020-02-26** **X-TC-Action: DescribeRiskNotify** **Authorization: TC3-HMAC-SHA256 Credential=AKIDY1LTQp34sTs44vbP6bv41kfQzLWZP2Rc/2023-09-27/ra/tc3_request,SignedHeaders=content-type;host, Signature=4bb7f1650e41000ce2c38b961d86c42946b6c9e02ba2928ae8e75b0f46ff26d5** ***Header字段含义与签名生成方法见文件夹对应demo文件*** **<公共请求参数>** **{** "BizCryptoData ":**{** "CryptoType":"1", "IsAuthorized":"1", "CryptoContent":" LkwODPti5do9X1wN2RgVBrflPTOuk5QCMOslhTTmb8T8iNtp3arnKw/6Qz18++HrMXEAoD6mNiUXsYSBlBvWmcuEsJ3MEEp4QP2kNTDAtIGtHjk7kZOoVngx+o33Mt4aHrK+9HTpX68ekfObqPmt7/nRlgVgFh4YzNzNr3B8uQ4qWlAuqn96T6jsY/J3DOe8tHh6aLDw3qqZMqL0LuYk/63e7gwNKCAfIyhZ+k6oZAkd+Xt7UIX0uuwWFdhjkPEU7DbXv7F14/Xtw4zIYrePh3wFn+OAWVZhASql6XlQvIY9DSLP7PGYfnnQdKmJeQuDLLxaSLL3Xum043exoaAJrpFM0b5UfGYTSw6NjxK4Wa1BN2S20BIY664rDJJH8Uom3e4WwIgE88RH5LTa8Dw/Y68fMec+gYUQJFG5pyrL6rvMigG0TU0XT1Ds53ipLJ4Cn6QGtl7IfyoCZCLVGk7rWUe4vfEI1SYc/JnIXyT29XordKRorIR94V033BENFEN9xPdzvj7LDQDMCy9i3JtuU/ArP6vYIRXaJR+I9UnVzd+0i4vBpn4uqXKV1bcDRDDMjpbRFUcYW+UDFWeVaoOXTQ02UdTuNGhA89mJPgHrLszdsSSmNeXz+oZrlTCEvX2Auim6Flv7+S5QavdYWW3yVsEO9Ib84vn82IigvnIeVIbyijaltAFiTgXukXY/+tA2Khr34MRN6riHe6/sdC4qkDxWoU16hKuP4Rt6H0ipiaAMwi6A6jEtM+J/pBWS1zIDD0jpisPnJaX0yL/34qB7tRGWvS8D5CbzpMMiDsfT7kdzyypS9aqVtdETkm9JJ0oXl+843mrJaXjNZq3T7ZK6C5up3ZS/08c/LPSI4ftjDiaGuq2mrqGPvpYKcWtNDoaK/cOQJHKowdL8yY89//L1bQ==" **}** **}**
4.2 InputDescribeRiskNotify_json格式示例:
java## 参数:BizCryptoData.CryptoContent加密前数据格式: { "PostTime":1665658696, "BasicInfo":{ "Scene":"transaction", "Command":"fraud", "AppID":"CloudTest", "ReqTime":"1665658696", "Details":[ {"Key":"ReqBillNo","Value":"16460183922615638888"}, {"Key":"TxnResult","Value":"0"}, {"Key":"Amount","Value":"10"}, {"Key":"Currency","Value":"CNY"} ] }, "UserInfo":{ "Details":[ {"Key":"UserID","Value":"123456"}, {"Key":"UserIDType","Value":"facebook"} ] }, "ChannelInfo":{ "Details":[ {"Key":"Channel","Value":"creditcard"}, {"Key":"ChannelBillNo","Value":"16460183922615638455"}, {"Key":"3DOffered","Value":"false"}, {"Key":"LiabilityShift","Value":"false"} ] }, "ClientInfo":{}, "SceneInfo":{}, "ExtraInfo":{} }
4.3、 输出示例
java{ "Response":{ "Data":{ "UUid":"49ef4763-ea95-36a0-7e56-75e9be51cb47", "Code":0, "Message":"OK", "Value":{ "ResultCode":"0", "ResultInfo":"OK" } },"RequestId":"5f3036d2-674b-4137-ba2e-e7806507d9a4" } }