中文简体 English
IVY云存储支付接入
版本记录:
修订日期 | 版本号 | 修改人 | 描述 |
---|---|---|---|
2019-05-10 | V1.0 | 陈汉镇 | 创建初稿 |
2019-08-22 | V1.1 | 徐凯 | H5页面入口参数增加 |
2019-09-09 | V1.2 | 徐凯 | 1.新增3.1/3.2 os参数;2.新增3.3/3.4 ios和android接入说明 |
2019-12-14 | V1.3 | 杨昭炎 | 文档在线发布 |
1. 简要说明
为简化订单与支付相关接口的对接,我司提供订单与支付的相关H5页面,App根据需求传入相应参数即可进入订单与支付页面,在完成购买服务流程之后,需要对购买的服务进行授权激活的操作。
2. 业务流程
2.1 支付购买流程
支付购买流程:
当用户支付成功后激活设备失败时,APP补偿激活设备流程:
2.2 流程说明
- 步骤一:
用户在App中点击购买云服务,跳转至设备选择页,该页需要App厂商自行设计完成,用于用户选择需要进行购买云服务的设备; - 步骤二:
用户选择设备后,将H5入口url参数填充完成,然后在App中打开此Url; - 步骤三:
进入H5页面后,App需要全程监听H5中的跳转路径,当路径中包含fosPayClose或activateDevice时,需要将H5页面关闭 - 步骤四:
当H5页面关闭,App需要调用接口检查用户是否有未激活的服务,当不存在未激活的服务时,流程结束; - 步骤五:
当用户存在未激活的服务,需要调用接口查询写入设备的云服务信息,然后将其写入设备,如果此写入设备失败,则重复此步骤直至写入设备成功; - 步骤六:
云服务信息写入设备成功后,调用激活云服务接口完成激活服务流程,完成后设备端可使用授权服务;
3. H5页面入口及参数说明
3.1 海外支付(海外用户)
入口地址:
https://{host}/mobile/store_product?clientId=&openId=&accessToken=&ipcName=&ipcMac=&language=&country=&oemCode=
参数名 | 参数说明 |
---|---|
clientId | 厂商clientId |
openId | 用户openId |
accessToken | 用户accessToken |
ipcName | 设备名称 |
ipcMac | 设备mac地址(请剔除地址中的英文冒号) |
Language | ‘CHS’-中文,’ENU’-英语, ‘FRA’-法语, ‘GER’-德语, ‘ITL’-意大利语, ‘ESP’-西班牙语; |
Country | 用户注册所选择的国家 |
oemCode | 用户所属厂商oemCode |
hideTit | 隐藏标题栏,可选,默认不隐藏,值为1时隐藏标题栏 |
os | 系统类型 [ios, android, wap] ios: IOS移动应用 ,android: 安卓移动应用,wap: WAP网站应用 |
注意:{host}配置如下:
- 测试环境为:sandboxt-web.ivyiot.io
- 线上环境为:www.myfoscam.com
支付方式:
- WorldPay支付(银行卡)和PayPal支付
- 其中PayPal测试支付账号为:
账号:389506244-foscam@qq.com 密码:12345678
3.2 国内支付(国内用户)
入口地址:https://{host}/mobile/store_product_cn?
clientId=&openId=&accessToken=&ipcName=&ipcMac=&language=&oemCode=
参数名 | 参数说明 |
---|---|
clientId | 厂商clientId |
openId | 用户openId |
accessToken | 用户accessToken |
ipcName | 设备名称 |
ipcMac | 设备mac地址(请剔除地址中的英文冒号) |
Language | ‘CHS’-中文,’ENU’-英语, ‘FRA’-法语, ‘GER’-德语, ‘ITL’-意大利语, ‘ESP’-西班牙语; |
oemCode | 用户所属厂商oemCode |
hideTit | 隐藏标题栏,可选,默认不隐藏,值为1时隐藏标题栏 |
os | 系统类型 [ios, android, wap] ios: IOS移动应用 ,android: 安卓移动应用,wap: WAP网站应用 |
注意:{host}配置如下:
- 测试环境为:test.myfoscam.cn
- 线上环境为:www.myfoscam.cn,支付方式为微信支付
3.3 iOS接入说明
3.3.1 使用UIWebView加载H5页面
根据国内外用户,分别加载对应的支付页面,具体URL请参照3.H5页面入口及参数说明,通过UIWebView加载请求,并设置代理。
3.3.2 在UIWebView代理中处理服务器返回
在[UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]中处理以下请求:
“fosPlayClose”: 支付完成,退出当前页面;
“wx.tenpay.com”: 检测到该字段,需要通过[[UIApplication sharedApplication] canOpenURL:[NSURL URLString:@”weixin://“]]检查手机是否已安装微信应用。未安装提示用户先安装微信;
“BuildID.foscam.cn”: 表示已跳转到微信开始支付,将当前链接中的”BuildID.foscam.cn”替换成”https://“形成新的链接,重新加载新的链接。
3.3.3 其它配置
在TARGETS配置URL Types,在Identifier中填入当前App的BuildID,在URL Schemes中填入BuildID.foscam.cn;
3.4 Android接入说明
3.4.1 使用WebView加载H5页面
根据国内外用户,分别加载对应的支付页面,具体URL请参照3.H5页面入口及参数说明,通过WebView加载请求,并设置代理。
3.4.2 在WebView代理中处理服务器返回
在shouldOverrideUrlLoading方法中处理以下请求:
“fosPlayClose”: 退出当前页面;
“weixin://wap/pay?”: 检测到该字段来跳转微信,跳转前需要通过获取所有已安装程序的包信息来判断是否已安装微信应用。未安装提示用户先安装微信;
“activateDevice”: 表示完成支付然后激活设备退出当前界面。
3.4.3 其它配置
在shouldOverrideUrlLoading配置Referer:
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put(“Referer”, BuildConfig.URL_CN_PAY_REALM_ANME);
view.loadUrl(url, extraHeaders);
4. 激活服务相关接口
4.1 获取用户未激活的服务
接口描述:
- 查询用户所有未激活的授权记录
请求URL:
- https://{HOST}/gateway?service=permission.query_user_not_active
请求方式:
- GET
请求头:
- 无
请求参数:
参数名 | 数据类型 | 是否必须 | 说明 | 长度 |
---|---|---|---|---|
clientId | String | 必选 | appKey | 40 |
openId | String | 必选 | openId(用户标志) | 40 |
accessToken | String | 必选 | accessToken | 40 |
supportBpi | int | 必选 | 是否支持Bpi:0不支持 1支持 | 1 |
返回示例:
{
"errorCode":"",
"data":[
{
"grantId":222222,
"ipcMac":"ipcMac",
"permissionCode":"permissionCode",
"permissionName":"permissionName",
"permissionType":1,
"permissionValue":0,
"grantStatus":1,
"userTag":"userTag",
"streamId":"streamId",
"belongServer":"belongServer",
"initTime":1565847960000,
"channelCount":0
},
{
"grantId":111111,
"ipcMac":"ipcMac",
"permissionCode":"permissionCode",
"permissionName":"permissionName",
"permissionType":1,
"permissionValue":0,
"grantStatus":1,
"userTag":"userTag",
"belongServer":"belongServer",
"initTime":1565847960000,
"channelCount":0
}
],
"sysDate":1576289329443
}
返回参数说明:
参数名 | 说明 |
---|---|
errorCode | 错误码,成功时为空值 |
failureDetails | 失败原因 |
data | 返回json对象 |
data.grantId | 授权记录id |
data.ipcMac | 设备mac |
data.permissionCode | 权限代码 |
data.permissionName | 权限名称 |
data.permissionType | 1, 服务授权类型,1付费,2赠送,3免费 |
data.grantStatus | 权限状态, 1, 权限状态,为支付完成,等待服务激活中, 该服务需要先将设备激活;.3为授权成功 |
data.usreTag | 用户对应服务的tag |
data.streamId | 云存储流ID |
data.belongServer | 基础服务代号 |
data.initTime | 服务购买时间 |
sysDate | 系统时间, 1970到现在的秒数 |
错误码说明:
基础返回码 | 说明 |
---|---|
FC_SERVICE_NOT_IMPLEMENT(009999) | 该api不存在或者未实现 |
FC_INVALID_PARAMETER(000006) | 请求参数错误 |
FC_SYSTEM_ERROR(000099) | 系统错误 |
4.2 云平台激活权限
接口描述:
- 激活设备单个权限
请求URL:
- https://{HOST}/gateway?service=permission.active
请求方式:
- POST
请求头:
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
Content-Type | 是 | string | 请求类型: application/x-www-form-urlencoded |
请求参数:
参数名 | 数据类型 | 是否必须 | 说明 | 长度 |
---|---|---|---|---|
clientId | String | 必选 | appKey | 40 |
openId | String | 必选 | openId(用户标志) | 40 |
accessToken | String | 必选 | accessToken | 40 |
grantId | long | 必选 | 授权记录号,通过查询订单未激活授权记录接口获得 | 20 |
ipcMac | String | 必选 | 设备mac地址 | 20 |
exceptionInfo | String | 可选 | 异常信息 | 1024 |
appClientVersion | String | 可选 | APP版本信息 | 50 |
返回示例:
{
"errorCode":"",
"failureDetails":""
}
返回参数说明:
参数名 | 说明 |
---|---|
errorCode | 错误码,成功时为空值 |
failureDetails | 失败原因 |
错误码说明:
基础返回码 | 说明 |
---|---|
FC_SERVICE_NOT_IMPLEMENT(009999) | 该api不存在或者未实现 |
FC_INVALID_PARAMETER(000006) | 请求参数错误 |
FC_SYSTEM_ERROR(000099) | 系统错误 |
业务返回码 | 说明 |
PERMISSION_GRANTID_RECORD_NOT_EXISTS(883202) | 授权记录不存在 |
PERMISSION_GRANTID_RECORD_NOT_MATCH_IPCMAC(883204) | 授权记录与IPC不匹配 |
PERMISSION_GRANT_STATUS_CANNOT_ACTIVE(883203) | 该授权记录状态不正确,不允许激活 |