# CCPay.js 实现文档
### 调试
可以把本地的跑起来
### 环境判断
客户端需要在 Webview 的 UA 上面加上 CCTip 的信息,还有客户端的版本号,如下:
`CCTipBox/1.2.3`
另外需要加上语言信息,如下:
`Language/zh-cn`
最终格式如下:
```
Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 CCTipBox/1.2.3 Language/zh-cn
```
### 交互通道
#### JS 请求移动端(JS -> 移动端)
Android 环境中,js 最终的调用方式为 `window.CCPayNativeBridge.postMessage`
iOS 环境中,js 最终的调用方式为 `window.webkit.messageHandlers.CCPayNativeBridge.postMessage`
#### 移动端响应请求(移动端 -> JS)
webview 里面的 js 会在全局暴露一个对象,名为 `CCPayNativeClientCallJS` ,客户端回调或发送事件时,调用该函数,并传入相应的参数即可。 `window.CCPayNativeClientCallJS({name: 'jeff', age: 20})` 。
客户端代码类似于 `excutedJavaScript("window.CCPayNativeClientCallJS({name: 'jeff', age: 20})")`
### 数据格式
完全兼容 JSON-RPC 2.0,无 namespace(以后看需要再加)
#### 请求
必须有 id/method/params
```json
{
jsonrpc: '2.0',
id: 'xyz-123', // 随机字符串,唯一识别一组请求/响应
method: 'someMethodCall',
params: {
}
}
```
#### 响应
必须有 id,result 或者 error,没有 method
```json
{
jsonrpc: '2.0',
id: 'xyz-123',
result: {},
error: {
message: 'message',
code: 123,
errorno: '12360123', // 不在 jsonrpc 的协议里面,是我们自定义的字段,把后台的 errorno 透传
data: {}
}
}
```
#### 事件/通知
必须有 method,params,没有 id
```
{
jsonrpc: '2.0',
method: 'someMethod',
params: {}
}
```
### 接口
#### 登录 login
用户登录 h5 接口,并下发 access_token。[后台 login 接口文档](https://yapi.eospark.com/project/47/interface/api/430)
```
{
"jsonrpc": "2.0",
"id": "login_3",
"method": "login",
"params": {
"app_id": "app_idfdfdfdfdf"
}
}
```
响应,基本透传后台的接口。
```
{
"jsonrpc": "2.0",
"id": "login_3",
"result": {
"sys_id": "", // 用户在我们平台 id
"access_token": "", // token
"expire_at": 1234567 // 秒级时间戳
}
}
```
#### 获取用户信息 requestUserInfo
```
{
"jsonrpc": "2.0",
"id": "requestUserInfo_2",
"method": "requestUserInfo",
"params": {
"app_id": "",
}
}
```
响应
```
{
"jsonrpc": "2.0",
"id": "requestDeposit_3",
"result": {
"sys_id": "893sfdjdu38dj389dj3",
"nickname": "God",
"avatar": "https://baidu.com/a.png",
"sns_platform": "wechat", // 即 platform
"sns_id": "fdfdsxx", // 即bot_id
}
}
```
#### 充值 requestDeposit
请求
```
{
"jsonrpc": "2.0",
"id": "requestDeposit_3",
"method": "requestDeposit",
"params": {
"app_id": "",
"symbol": "BCH"
}
}
```
响应
```
// 用户成功充值的响应
{
"jsonrpc": "2.0",
"id": "requestDeposit_3",
"result": {
"record_id": "recordidfdfdfdfdfd",
"symbol": "BCH",
"amount": "29.3333" // 注意,是字符串,且是人类可读的(非最小单位)
}
}
```
```
// 用户取消充值的响应
{
"jsonrpc": "2.0",
"id": "requestDeposit_3",
"result": null
}
```
#### 新页面打开url openUrl
请求
```
{
"jsonrpc": "2.0",
"id": "openUrl_4",
"method": "openUrl",
"params": {
"url": "https://my.cctip.io"
}
}
```
响应
```
// 新页面打开url的响应
{
"jsonrpc": "2.0",
"id": "openUrl_4",
"result": {
"result": true
}
}
```
### 错误码
||code||含义||
||1001||无权限||
||2001||参数有误||