全过程分为5部分,分别为购买流程,支付校验流程,支付流程,转账确认流程,承保流程
用户购买流程:
用户在渠道页面选择渠道入口,跳转到融石产品列表页,用户选择产品,融石引导客户进入产品详情页,用户填写投保信息进行报价后,用户点击购买,融石将全局流水号告知渠道,渠道创建订单,并返回会话ID,融石引导到渠道付费页面,用户并准备支付。
支付校验流程
用户在支付前,渠道调用融石,进行支付校验,支付校验成功后,渠道引导用户支付。
支付流程
用户支付成功后,渠道通知融石保单确认购买。
承保流程
融石获得承保结果后,通知渠道,承保通过,渠道告知用户承保成功,承保拒绝,渠道引导用户退款流程。
接口方案
传输方式
HTTPS 传输 端口443
Method:POST
Content-Type:application/json
Encoding:UTF-8
鉴权方法
HTTP头
HTTP头名称 | 字段说明 | 样例 |
---|---|---|
timestamp | 时间戳 | 1490259359789 |
signature | 签名字段 | 此字段为算法见下文 |
名称 | 字段说明 |
---|---|
timestamp | 13位时间戳,需要判断接收到的时间戳 是否在当前时间的前后30分钟,如果不是,将按照无效请求处理 |
signature | String temp = MD5(globalno + "I" + token.upper() + "I" + timestamp) |
globalno | 全局流水号 : S2IQD2017032800001 固定位(S2I) + 渠道商(QD)+ 日期(20170328) + 最大10万(00001) |
token | 令牌,双方各持有一个令牌,接收方将按照自己持有的令牌进行判断,发送方将使用要接收方的令牌进行签名。 令牌在做签名的时候需要全大写。 令牌使用时为提供服务方,用自己令牌做签名验证,而调用方,用对端令牌制作签名 |
令牌持有方 | 令牌号 | 说明 |
---|---|---|
融石科技 | RSXXXXXXXXXXXXXX | 此项为配置项,在上线前统一修改,请勿写死在代码中 |
渠道方 | QDXXXXXXXXXXXXXX | 此项为配置项,在上线前统一修改,请勿写死在代码中 |
返回结构
{statusCode:"000000",error:"错误信息",result:JSON}
在statusCode 为000000时,说明业务成功返回,此时result为返回结果,为必填项。
反之,说明业务失败返回,此时error为返回的错误信息,为必填项。
以下为接口形式,里面所用的接口地址,将在上线部署时统一更换
购买流程接口
1. 进入产品页面
渠道——>融石
http://www.rongstone.com/s2i/guide.html
time=1490259359789 为防止缓存
source=XXXXXXXX:来源
project=XXXXXXXXX:产品
data=XXXXXXXXXX:随路数据
backurl=http://callback.html: 回调地址
http://www.rongstone.com/s2i/guide.html?source=dhinsurance&project=XXXXX&data=XXXXXXX
&backurl=http://callback.html&time= 1490259359789
2. 创建订单信息
融石——>渠道
https://www.qd.com/createorderinfo
RequestBody:
{
globalno: "S2IQD2018080800123", //全局流水号 (用这个做签名)
project: "dh2tpylxrs", //产品信息
name: "张德智", //姓名
data: "XXXXXXXXXX", //随路数据
sumpre: "5242.58" //总费用
sellsumpre: "3842.58" //销售费用 (收用户此费用)
}
ResponseBody:
{
statusCode: "000000", //成功返回 6个0
error: "", //错误信息
result: "g3k2d3h5v4t3j1j" //返回sessionid
}
3. 引导购买页
融石——>渠道
http://www.qd.com/buy.html
time=1490259359789 为防止缓存
globalno=S2IQD2018080800123:全局流水号
sessionid= g3k2d3h5v4t3j1j:会话Id
reason=
%E8%BD%A6%E8%BE%86%E4%BF%A1%E6%81%AF%E9%94%99%E8%AF%AF 这个是"投保信息错误"的URL编码
data=XXXXXXXXX:随路数据
投保成功调用如下
http://www.qd.com/buy.html?globalno=S2IQD2018080800123&sessionid=g3k2d3h5v4t3j1j
&data=XXXXXXXXXX&reason=&time=1490259359789
投保失败调用如下
http://www.ceair.com/buy.html?sessionid=&data=XXXXXXXXXXXX&reason=%E8%BD%A6%E8%BE%86%E4%BF%A1%E6%81%AF%E9%94%99%E8%AF%AF&time=1490259359789
其他参数,渠道可以自行确定
支付校验流程接口
4. 支付校验
渠道——>融石
https://www.rongstone.com/checkorderpaystatus
RequestBody:
{
globalno: "S2IDH2017032800001", //全局流水号
sessionid: "g3k2d3h5v4t3j1j" //会话ID
}
ResponseBody:
{
statusCode: "000000", //成功返回 6个0
error: "", //错误信息
result: "ok" //返回ok
}
支付流程接口
5. 购买成功请求
渠道——>融石
https://www.rongstone.com/receivetransferrequest
RequestBody:
{
globalno: "S2IDH2017032800001", //全局流水号
sessionid: "g3k2d3h5v4t3j1j" //会话ID
consumepayno:"123213", //消费订单号
consumepaytype:"alipay", //消费类型
consumesumpre:"4242.58", //收取用户的总价(现金+积分*兑换率)
score:"2000", //用户使用积分对应的现金数量
cash:"3242.58", //用户使用现金数量
}
ResponseBody:
{
statusCode: "000000", //成功返回 6个0
error: "", //错误信息
result: "ok" //返回ok
}
承保流程接口
7. 发送承保结果
融石——>渠道
https://www.ceair.com/receiveacceptanceresult
RequestBody:
{
globalno: "S2IDH2017032800001", //全局流水号
result:"success", //success 为承保成功,为fault 为承保失败
reason:"" //承保成功的时候 此项为空,payresult 承保失败的时候 此项为失败原因
}
ResponseBody:
{
statusCode: "000000", //成功返回 6个0
error: "", //错误信息
result: "ok" //返回ok
}
如果承保失败,提供失败原因。方便用户后续操作后,可以重新购买车险
8. 订单详情页面
渠道——>融石
http://www.rongstone.com/order.html
time=1490259359789 为防止缓存
globalno=S2IDH2017032800001:全局流水号
sessionid=g3k2d3h5v4t3j1j:会话ID
backurl=http://www.rongstone.com/111.html: 回调地址
http://www.rongstone.com/order.html?globalno=S2IDH2017032800001&sessionid=g3k2d3h5v4t3j1j&backurl=http://www.rongstone.com/111.html&time= 1490259359789
断链重发策略
重发条件
1、当调用接口时,timeout时长为:65秒
2、返回的HTTP状态码 不是200 (此时需要记录日志)
重发策略
5秒、1分钟、5分钟,当需要重发时,将有3次重发机会,如果仍然不能正确返回(HTTP状态码为200)将进行报警处理,具体报警处理方式不做统一说明。
签名相关说明
- 调用端 使用对端所属的Token进行签名。
- 服务端 使用自己所属的Token进行验签。
例如 渠道请求支付校验到融石,这里渠道就是调用端,所以要用融石的Token进行签名发送给融石,而融石这个时候是服务端,所以要用自己的Token(融石)进行验签。
服务器白名单
- 接口在做服务端时,被调用时,需要用对端的服务器白名单进行服务器验证,这里的白名单可以是列表,只有在列表中的服务器访问才能通过白名单验证。