公共区域:
一:模块存放路径:/static/modules/product/* | 并把编译好的golang模块放入bin目录
下载演示demo golang版本:http://www.rstack.com.cn/download/billing/moduledemo/hyper_demo.tar.gz
二:模块开发步骤:
1:进入rsbilling管理后台》产品接口》添加产品接口,填写好搭建模块测试地址及所需的相关参数保存
2:进入产品配置,添加或则修改产品时使用新添加的产品接口
3:进行产品配置,购买及管理编辑子服务相关服务的设置接口调试
三:基本开发接口说明:
接口通讯方式
在执行模块功能时,rsbilling平台会向模块地址post相应的指令以及验证信息,然后根据模块接口返回相关数据来处理业务逻辑。
模块可接收到的常规接口数据(post)
参数 |
说明 |
action |
相应指令 |
moduleID |
模块id |
moduleName |
模块名称 |
userID |
用户id |
sign |
用于验证当前请求是否合法 md5(moduleid+加密密钥+userid+action)转换小写 |
moduleConfig |
后台产品模块设置的相应参数集 |
isAdmin |
当前操作人是否管理员 true为管理员 false为普通用户 |
resellerMode |
当前是否为代理子用户模式 1=是 0=否 |
resellerID |
代理id |
operatorIP |
操作人ip地址 |
加密密钥:指在后台模块设置的自定义密钥,用于参数传送和接受过程中的加密验证
类型1:内部模块:(如:添加模块后出现如下路径的简称内部模块:/modules/product/hyper/mapi.go)
类似这种情况无需输入加密密钥请留空,系统将自动调用app.conf下enkey密钥,方便模块可以获取enkey作为比 对签名,内部模块必须使用golang语言才能写模块,只需要看将app.conf配置文件中的 enkey读取作为通用的 密钥验证
类型2:外部模块:(如:添加模块后直接选择手工输入,如:http://rstack.io/api.php,这种简称外部模块),
类似这种就必须输入加密密钥了,(这种情况下你的第三方也将知道这个自定义密钥 可以在第三方直接验证签名)外部模块可以使用如asp,php,.net等各种网页语言编写模块
模块响应格式类型
javascript:用于处理客户端(游览器)界面展示和操作,可使用全局变量
json:获取接口信息时,返回的json格式值
操作响应码:0为执行成功,-1为执行错误,格式:-1|错误信息提示
自定义:可自由返回任何相应结果,包括如上三种
错误返回: -1|错误信息详情
四:被动式模块接口 action
当系统执行特定或则显示特写界面时,会自动请求相应的模块接口
被动式接口指令集:
指令名 |
相应格式 |
说明 |
admin_module_config |
javascript |
后台接口管理,。模块自身参数设置 |
admin_product_config |
javascript |
后台产品管理,模块产品参数设置 |
admin_service_config |
javascript |
后台服务管理,服务项目参数配置 |
js_plugin |
javascript |
模块接口开启,自动加载此模块的js插件功能(js_plugin接口),可实现如搜索功能等 |
order_config |
javascript |
前台购买页面,购买参数配置 |
view_service |
javascript |
前台服务管理,查看管理服务 |
order_service |
json |
购买服务时,检测和返回子服务的所需参数 |
activate_service |
json |
开通服务时,激活子无并返回相应的参数 |
renew_service |
json |
续费服务。扣费前的操作,包含价格计算等 |
remove_service |
0|-1 |
删除服务时 同步清理相关的子服务资料 |
update_service |
0|-1 |
同步更新相关服务及子服务的状态资料 |
admin_module_config 指令:javascript 用于自定义设置每个模块在当前系统的参数值格式可额外接受的post数据如下
变量名 |
格式 |
说明 |
subaction |
string |
子命令【指令值】 load_param在模块设置界面中加载说明,及初始化参数,custom_param 自定义模块参数值功能 |
admin_product_config 指令:javascript 用于管理每个产品在当前模块定义的参数,可定时产品标配和升级配置选项,输出的表单项名称前缀为config_或upgrade_时,系统将相应保存到数据库 config 或 upgrade 字段,
可使用javascript全局数据变量如下:
变量名 |
格式 |
说明 |
productData |
json |
当前产品的所有配置信息 |
默认用于输出显示的容器:div:#productconfig
admin_service_config 指令:javascript 用于管理每个用户服务在当前产品模块定义的参数,系统将保存所有容器内的表单项值到数据库,可使用javascript全局数据变量如下
变量名 |
格式 |
说明 |
serviceData |
json |
当前用户服务的所有配置信息 |
productData |
json |
当前服务所属的产品配置信息 |
默认用于输出显示的容器:div:#serviceconfig
js_plugin 指令:javascript 用于接口模块的自定义插件比如在财务上实现第三方搜索功能,需在接口模块勾选 自动加载此模块的js插件功能(js_plugin接口)
order_config 指令:javascript 用于用户购买产品界面的参数配置显示和操作 可使用的javascript全局变量如下
变量名 |
格式 |
说明 |
userData |
json |
当前用户的数据 |
productData |
json |
当前服务属性的产品数据 |
billingMothod |
int |
付款方式,1 周期付款,2 一次性,3 免费试用 |
billingCycle |
int |
付款周期(月),当用户选择时将所选值赋值给变量 |
timeCycle |
int |
0=月,1=天,2=小时 |
normalPrice |
float |
当前产品配置的正常价格,未打折的价格,用户选择完配置后请计算并更新此变量值 |
finalPrice |
float |
当前产品配置的最终价格,已打折的价格,用户选择完配置后请计算并更新此变量值 |
configDetails |
string |
用于客户核对当前购买的产品配置信息,空位不显示 |
默认用于输出显示的容器:form:# orderconfig
view_service 指令:javascript 用于用户前台服务管理界面的显示和管理操作 可使用的javascript全局变量如下
变量名 |
格式 |
说明 |
userData |
json |
当前用户数据 |
productData |
json |
当前服务属性的产品数据 |
productConfig |
json |
当前服务属性的产品config字段数据 |
productUpgrade |
json |
当前服务属性的产品upgrade字段数据 |
serviceData |
json |
当前用户服务数据 |
serviceConfig |
json |
当前用户服务config字段数据 |
默认用于输出显示的容器:div:# viewservice
order_service 指令:json 用于客户付款购买产品服务时,检测客户选择的配置及返回相应的数据 可额外接受到的post数据如下
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1,代表当前服务对应产品是代理上级产品,否则自营产品 |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
billingMethod |
int |
付款方式 1=周期付款,2=一次性付款 |
productID |
int |
产品id |
billingCycle |
int |
付款周期 |
basePrice |
float |
基本配置价格 |
timeCycle |
int |
0=月,1=天,2=小时 |
productName |
string |
产品名称 |
productConfig |
json |
当前产品的标准配置数据 |
productUpgrade |
json |
当前产品的升级配置数据 |
userData |
json |
当前用户数据 |
serviceName |
json |
当前产品服务描述标签 |
其他 |
* |
所有定义在表单内的表单项 |
需要返回的json数据:(注意:如果要支持互相API功能:如果isagentpd=1那么只计算价格返回;否则 获取模块信息和第三方API通信等操作)
key |
格式 |
备注 |
price |
float |
如果没升级选项直接返回表单basePrice原价金额,否则返回(billingCycle * 升级的金额 + basePrice |
upgradePrice |
float |
如果有升级选项那么请返回表单 (billingCycle * 升级的金额),如无升级选项直接返回0 |
serviceName |
string |
未激活状态的服务标题名称 |
customCycles |
int |
是否使用模块自定义的付款周期,0为否,1为是 一般为1 |
其他 |
* |
系统将直接保存这些json格式配置数据 |
注意:键值名称区分大小写
activate_service 指令:json 客户付完款项购买并且订单通过系统自动或则管理员人工审核后,进入激活子服务进程 可额外接受到的post数据如下
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1代表代理上级产品,否则自营产品 |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
serviceID |
int |
当前服务id |
productConfig |
string |
当年产品的JSON配置 |
serviceType |
int |
当前产品服务类型 |
serviceConfig |
json |
当前服务配置,在order_service步骤中所保存的数据 |
userData |
json |
当前用户数据 |
ptName |
string |
产品分组自定义的名称 |
ptEName |
string |
产品分组自定义的标识 |
billingMethod |
int |
1=周期付款 2= 一次性付款 |
billingCycle |
int |
付款周期 如1 代表1个月,结合timeCycle对比当前是月还是天还是小时 |
timeCycle |
int |
0=月 1=天 2=小时 |
必须返回的json数据
key |
格式 |
说明 |
ssid |
int |
子服务的id编号,如模块系统中 空间,域名,云主机等 |
ssname |
string |
子服务名称,可为空或则返回一些如主机名称等,在下次提交后该字段也会被连同ssid一起发给模块 |
asid |
int |
上游服务ID,配合isagentpd=1的话必须返回(上层返回的服务ID号),否则请留空或则为0即可 |
serviceName |
string |
激活状态的服务标题名称 |
其他 |
* |
系统将直接将这些json格式数据保存,一般为反序列化serviceconfig字段加入新的以上字段进去 |
注意:键值名区分大小写
renew_service 指令:json 用于客户续费产品服务扣费前,检测客户当前的服务配置以及所选的续费周期并返回响应的数据, 可额外接受到的post数据如下:
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1,代表当前服务对应产品是代理上级产品,否则自营产品 |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
serviceID |
int |
当前服务的产品id |
ssid |
int |
当前服务产的子id |
ssname |
string |
子服务名称 |
asid |
int |
代表当前产品服务是代理上级产品,该ID位上游网站的对应服务ID,否则等于空或则0 |
basePrice |
float |
当前产品基本配置价格 |
serviceConfig |
json |
用户服务的各项参数 |
billingMethod |
int |
1=周期付款 2= 一次性付款 |
billingCycle |
int |
付款天数 (如1 代表一个月 或1天 或1小时 结合下面字段区分) |
timeCycle |
int |
0=按月 1=按天 2=按小时 |
productID |
int |
当前产品的编号id |
productConfig |
json |
当前产品的标准配置数据 |
productUpgrade |
json |
当前产品的升级配置数据 |
userData |
json |
当前用户数据 |
serviceStatus |
int |
目前产品服务的状态 (-2等待开通,-1正在开通,0正常服务,1暂停服务,2中止服务,3即将到期,4过期停止) |
需要返回的json数据:(注意:如果要支持互相API功能:如果isagentpd=1那么只计算价格返回;否则 获取模块信息和第三方API通信等操作,如果续费操作不会和第三方API通信那么请无视)
key |
格式 |
说明 |
price |
float |
如果没升级选项直接返回表单basePrice原价金额,否则返回(billingCycle * 升级的金额 + basePrice |
upgradePrice |
float |
如果有升级选项那么请返回表单 (billingCycle * 升级的金额),如无升级选项直接返回0 |
remove_service 指令:0|-1 由管理员或则系统本身发出删除服务指令时,同步删除子服务相关资料, 可额外接受到的post数据如下:
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1,代表当前服务对应产品是代理上级产品,否则自营产品 |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
productID |
int |
当前产品id |
serviceID |
int |
当前用户服务id |
ssid |
int |
当前用户服务子id |
ssname |
string |
当前用户服务子名称 |
asid |
int |
代表当前产品服务是代理上级产品,该ID位上游网站的对应服务ID,否则等于空或则0 |
serviceData |
json |
当前服务配置数据 |
serviceConfig |
json |
用户服务的数据 |
响应:0为成功:-1为错误,格式:-1|详细错误信息
update_service 指令:0|-1 在续费或则后台管理更新服务资料等操作时激活此指令同步更新子服务资料 可额外接受到的post数据如下:
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1,代表当前服务对应产品是代理上级产品,否则自营产品 |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
serviceID |
int |
当前用户服务id |
newuserid |
int |
新的用户编号,如果此变量不为空,请判断是否以原id相同进行响应处理【仅限actionfrom=admin才触发】 |
newssid |
int |
新的子服务id,如果此变量不为空,请判断是否以原id相同进行响应处理【仅限actionfrom=admin才触发】 |
productID |
int |
当前产品id |
ssid |
int |
当前用户服务子id |
ssname |
string |
当前用户服务子名称 |
asid |
int |
代表当前产品服务是代理上级产品,该ID位上游网站的对应服务ID,否则等于空或则0 |
serviceStatus |
int |
状态 (-2等待开通,-1正在开通,0正常服务,1暂停服务,2中止服务,3即将到期,4过期停止) |
serviceConfig |
json |
用户服务配置数据 |
serviceData |
json |
用户服务全部配置数据 |
actionFrom |
string |
指令发起来源:admin后台服务编辑操作,renew续费相关操作,autoSuspend过期自动停止操作,adminSubService后台子服务编辑操作
|
其他 |
* |
后台管理界面 admin_service_config接口页面上的表单上传送的数据,仅当actionfrom值为admin时可获取 |
响应:0为成功,-1为错误:格式:-1|详细错误信息
五:主动式模块接口
主动触发动作指令: 接口地址:http://您的财务域名/rconsole?c=module&serviceid=服务id(可选)&productid=产品id(可选)&moduleid=模块id(可选)&show=text(返回文本)&action=指令(可选:默认为custom_action)
注意:什么时候需要用到该主动接口
1:(重要):当您在写view_service接口情况下必须验证 serviceid这个是否不等于0(防止用户跨权限访问),因为那是在财务已验证权限的接口,在该接口您可以自己编写自定义接口如,操作开关机重启等一些操作
2:什么情况下使用productid=?,在一些购买产品需要调用一些远程第三方如 按区域开通选择等通信情况下,都可以使用该模式,但是返回数据可以选一些不重要的,因为那是公共接口,任何用户都能访问并读取该接口
3:什么情况下使用moduleid=?,在一些如js_plugin接口情况下,在平台既没有套餐id也没服务id情况下,可以自己过滤实现获取平台数据交互
指令名 |
响应 |
说明 |
upgrade_service |
json |
升级用户购买的服务配置 |
update_service_data |
json |
更新用户服务配置。包含名称和配置 |
custom_action |
自定义 |
执行自定义的动作指令,返回自定义的响应格式,系统对返回的响应内容不做自动处理 |
主动式接口可额外接受到的post数据如下:
变量名 |
格式 |
说明 |
isagentpd |
int |
如果等于1,代表当前服务对应产品是代理上级产品,否则自营产品(前提必须引用一个如serviceid或则productid主动进入的才能获得) |
agentpd |
int |
代理上级产品对应ID编号(非互相代理请略过该字段) |
operatorID |
int |
操作人用户id |
serviceID |
int |
当前用户服务id |
productID |
int |
当前用户服务产品id |
userData |
int |
当前用户数据 |
productData |
json |
当前产品数据 |
productUpgrade |
json |
当前产品升级数据 |
productConfig |
json |
当前产品配置字段 |
productType |
int |
当前产品类型id |
serviceData |
json |
当前用户服务全部数据 |
serviceConfig |
json |
当前用户服务config字段中数据 |
serviceStatus |
int |
服务状态 (-2等待开通,-1正在开通,0正常服务,1暂停服务,2中止服务,3即将到期,4过期停止) |
ssid |
int |
当前服务子id |
ssname |
string |
当前服务子名称 |
asid |
int |
代表当前产品服务是代理上级产品,该ID位上游网站的对应服务ID,否则等于空或则0 |
isAdmin |
string |
是否管理员 是为小写true 普通用户为false |
isReseller |
string |
判断当前操作人是否为上级代理 true是,false否 |
billingMethod |
int |
1=周期付款 2= 一次性付款 |
billingCycle |
int |
付款周期 如 1 代表 1个(月,天,小时)结合timeCycle确认单位 |
timeCycle |
int |
0=月1=天2=小时
|
fprice |
float |
首次服务的价格
|
price |
float |
当前服务的价格
|
其他 |
* |
其他自定义的post get数据 |
upgrade_service 指令:json 升级用户购买的服务配置,返回json数据,带“*”号必须返回:
key |
格式 |
备注 |
price * |
float |
升级所需费用,进行价格运算时,当productdata中折扣变量discount为负数时使用加减法,大于0时使用乘除法 |
serviceName * |
string |
升级后的服务名称 |
noDiscount |
float |
当前为1时禁止享受价格折扣,也可以从productdata中获取当前套餐默认折扣 |
description |
string |
升级记录的相关描述信息 |
其他 |
自定义 |
其他待保存的服务配置信息 |
update_service_data 指令:json 更新用户服务数据,包括名称和配置 返回的json数据:
key |
格式 |
说明 |
serviceName |
string |
服务名更新 |
说明 |
* |
反序列化 serviceconfig 并更新内部的servicename字段,并转换json传回 |
六:二次开发交流群
官方网站:http://www.rstack.com.cn/ 官方网站(备):http://www.rstack.io/ 二次开发交流群:545410580