# 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||参数有误||