mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 12:57:32 +08:00
363 lines
6.9 KiB
Markdown
363 lines
6.9 KiB
Markdown
# 建行生活 uni-app 前端集成指南
|
||
|
||
## 概述
|
||
|
||
本文档介绍了如何在 Shopro uni-app 前端项目中集成建行生活功能,包括用户登录、支付、专属页面等功能。
|
||
|
||
## 已实现的前端功能
|
||
|
||
### 1. 平台集成模块
|
||
|
||
**位置**: `/frontend/sheep/platform/provider/ccblife/`
|
||
|
||
- `index.js` - 建行生活平台核心模块
|
||
- 环境检测(检测是否在建行App内)
|
||
- JSBridge 初始化和管理
|
||
- 用户信息获取
|
||
- 自动登录
|
||
- 支付调起
|
||
- 原生方法调用
|
||
|
||
- `api.js` - API 接口封装
|
||
- URL 跳转登录
|
||
- 自动登录
|
||
- 支付串生成
|
||
- 支付回调
|
||
|
||
### 2. 支付集成
|
||
|
||
**位置**: `/frontend/sheep/platform/pay.js`
|
||
|
||
已在现有支付系统中添加了建行支付(ccb)支持:
|
||
|
||
```javascript
|
||
// 支付方式现在支持
|
||
payment = ['wechat','alipay','ccb','money','offline']
|
||
```
|
||
|
||
### 3. 平台识别
|
||
|
||
**位置**: `/frontend/sheep/platform/index.js`
|
||
|
||
系统会自动识别建行生活环境:
|
||
- 平台名称:`CcbLife`
|
||
- 提供商:`ccb`
|
||
- 平台标识:`ccblife`
|
||
|
||
### 4. 建行专属页面
|
||
|
||
**位置**: `/frontend/pages/ccblife/index.vue`
|
||
|
||
建行生活专属页面,展示:
|
||
- 建行用户信息
|
||
- 专属优惠活动
|
||
- 专享商品
|
||
- 建行特色功能
|
||
|
||
## 使用指南
|
||
|
||
### 1. 检测建行环境
|
||
|
||
```javascript
|
||
import sheep from '@/sheep';
|
||
|
||
// 检查是否在建行App内
|
||
if (sheep.$platform.provider === 'ccb') {
|
||
console.log('在建行生活App内');
|
||
}
|
||
|
||
// 或直接使用平台对象
|
||
import CcbLifePlatform from '@/sheep/platform/provider/ccblife/index';
|
||
|
||
if (CcbLifePlatform.isInCcbApp) {
|
||
console.log('在建行生活App内');
|
||
}
|
||
```
|
||
|
||
### 2. 获取建行用户信息
|
||
|
||
```javascript
|
||
import CcbLifePlatform from '@/sheep/platform/provider/ccblife/index';
|
||
|
||
// 获取用户信息
|
||
CcbLifePlatform.getUserInfo().then(result => {
|
||
if (result.code === 0) {
|
||
console.log('用户信息:', result.data);
|
||
// data包含: ccb_user_id, mobile, nickname, avatar
|
||
}
|
||
}).catch(error => {
|
||
console.error('获取用户信息失败:', error);
|
||
});
|
||
```
|
||
|
||
### 3. 自动登录流程
|
||
|
||
平台会自动处理登录流程,无需手动调用:
|
||
|
||
1. 用户从建行App进入H5页面
|
||
2. 系统自动检测建行环境
|
||
3. 自动获取用户信息并登录
|
||
4. 保存Token到本地存储
|
||
|
||
手动触发登录:
|
||
|
||
```javascript
|
||
import CcbLifePlatform from '@/sheep/platform/provider/ccblife/index';
|
||
|
||
// 手动触发自动登录
|
||
CcbLifePlatform.autoLogin();
|
||
```
|
||
|
||
### 4. 建行支付集成
|
||
|
||
#### 在订单支付页面
|
||
|
||
```javascript
|
||
// 支付方式选择
|
||
const payMethods = [
|
||
{
|
||
value: 'wechat',
|
||
name: '微信支付',
|
||
icon: 'wechat'
|
||
},
|
||
{
|
||
value: 'alipay',
|
||
name: '支付宝',
|
||
icon: 'alipay'
|
||
},
|
||
{
|
||
value: 'ccb',
|
||
name: '建行支付',
|
||
icon: 'ccb',
|
||
// 只在建行App内显示
|
||
show: sheep.$platform.provider === 'ccb'
|
||
}
|
||
];
|
||
```
|
||
|
||
#### 发起支付
|
||
|
||
```javascript
|
||
import sheep from '@/sheep';
|
||
|
||
// 调起支付
|
||
sheep.$platform.pay('ccb', 'goods', orderSN);
|
||
```
|
||
|
||
### 5. 监听事件
|
||
|
||
```javascript
|
||
// 监听登录成功事件
|
||
uni.$on('ccb:login:success', (data) => {
|
||
console.log('建行用户登录成功', data);
|
||
// 更新UI或执行其他操作
|
||
});
|
||
|
||
// 在页面销毁时移除监听
|
||
onUnmounted(() => {
|
||
uni.$off('ccb:login:success');
|
||
});
|
||
```
|
||
|
||
### 6. 条件编译
|
||
|
||
在需要区分平台的代码中使用条件编译:
|
||
|
||
```javascript
|
||
// #ifdef H5
|
||
import CcbLifePlatform from '@/sheep/platform/provider/ccblife/index';
|
||
|
||
if (CcbLifePlatform.isInCcbApp) {
|
||
// 建行App内的特殊处理
|
||
}
|
||
// #endif
|
||
```
|
||
|
||
## 页面路由配置
|
||
|
||
在 `pages.json` 中添加建行相关页面:
|
||
|
||
```json
|
||
{
|
||
"pages": [
|
||
{
|
||
"path": "pages/ccblife/index",
|
||
"style": {
|
||
"navigationBarTitleText": "建行生活",
|
||
"navigationBarBackgroundColor": "#F51C13",
|
||
"navigationBarTextStyle": "white"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 测试流程
|
||
|
||
### 1. 本地测试
|
||
|
||
```bash
|
||
# 进入前端目录
|
||
cd frontend
|
||
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 运行H5
|
||
npm run dev:h5
|
||
```
|
||
|
||
### 2. 模拟建行环境
|
||
|
||
在浏览器中添加URL参数模拟建行环境:
|
||
```
|
||
http://localhost:3000/#/pages/index/index?from=ccblife&ccbParamSJ=xxx
|
||
```
|
||
|
||
### 3. 真机测试
|
||
|
||
1. 使用 HBuilderX 打包H5应用
|
||
2. 部署到测试服务器
|
||
3. 在建行生活App内访问测试地址
|
||
|
||
## 注意事项
|
||
|
||
### 1. 平台判断优先级
|
||
|
||
系统按以下优先级判断平台:
|
||
1. 建行生活 (`CcbLife`)
|
||
2. 微信公众号 (`WechatOfficialAccount`)
|
||
3. 普通H5 (`H5`)
|
||
|
||
### 2. JSBridge 兼容性
|
||
|
||
- iOS:使用 WebViewJavascriptBridge
|
||
- Android:使用 window.mbspay 对象
|
||
|
||
### 3. 支付流程
|
||
|
||
1. 用户选择建行支付
|
||
2. 调用后端生成支付串
|
||
3. 通过JSBridge调起建行收银台
|
||
4. 支付完成后回调通知后端
|
||
5. 更新订单状态
|
||
|
||
### 4. 错误处理
|
||
|
||
```javascript
|
||
try {
|
||
const result = await CcbLifePlatform.payment(options);
|
||
// 处理成功
|
||
} catch (error) {
|
||
if (error.code === -1) {
|
||
// 不在建行App内
|
||
uni.showToast({
|
||
title: '请在建行生活App内使用',
|
||
icon: 'none'
|
||
});
|
||
} else {
|
||
// 其他错误
|
||
console.error(error);
|
||
}
|
||
}
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### Q: 如何判断是否在建行App内?
|
||
|
||
```javascript
|
||
import sheep from '@/sheep';
|
||
|
||
// 方式1:通过平台对象
|
||
if (sheep.$platform.provider === 'ccb') {
|
||
// 在建行App内
|
||
}
|
||
|
||
// 方式2:直接使用建行平台模块
|
||
import CcbLifePlatform from '@/sheep/platform/provider/ccblife/index';
|
||
if (CcbLifePlatform.isInCcbApp) {
|
||
// 在建行App内
|
||
}
|
||
```
|
||
|
||
### Q: 自动登录失败怎么办?
|
||
|
||
1. 检查是否在建行App内
|
||
2. 确认后端接口正常
|
||
3. 查看控制台错误信息
|
||
4. 清除本地缓存重试
|
||
|
||
```javascript
|
||
// 清除缓存
|
||
uni.removeStorageSync('token');
|
||
uni.removeStorageSync('userInfo');
|
||
|
||
// 重新触发登录
|
||
CcbLifePlatform.autoLogin();
|
||
```
|
||
|
||
### Q: 支付无响应?
|
||
|
||
1. 确认在建行App内
|
||
2. 检查JSBridge是否就绪
|
||
3. 验证支付串格式
|
||
4. 查看原生日志
|
||
|
||
```javascript
|
||
// 检查JSBridge状态
|
||
CcbLifePlatform.ready(() => {
|
||
console.log('JSBridge已就绪');
|
||
});
|
||
```
|
||
|
||
### Q: 如何调试?
|
||
|
||
在建行平台模块中开启调试模式:
|
||
|
||
```javascript
|
||
// frontend/sheep/platform/provider/ccblife/index.js
|
||
const config = {
|
||
debug: true // 开启调试
|
||
};
|
||
```
|
||
|
||
## 扩展开发
|
||
|
||
### 添加新的原生方法调用
|
||
|
||
```javascript
|
||
// 在 CcbLifePlatform 中添加新方法
|
||
async customMethod() {
|
||
return new Promise((resolve, reject) => {
|
||
this.callNative('customMethod', {
|
||
// 参数
|
||
}, (result) => {
|
||
if (result.success) {
|
||
resolve(result);
|
||
} else {
|
||
reject(result);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
```
|
||
|
||
### 添加新的API接口
|
||
|
||
```javascript
|
||
// 在 api.js 中添加
|
||
newApi: (data) => {
|
||
return request({
|
||
url: '/ccblife/newApi',
|
||
method: 'POST',
|
||
data: data
|
||
});
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
*文档版本:1.0.0*
|
||
*最后更新:2025-01-17*
|
||
*作者:Billy* |