200 lines
4.5 KiB
Markdown
200 lines
4.5 KiB
Markdown
# 后端接口 TODO 清单 - 支付集成模块
|
||
|
||
## 支付SDK集成说明
|
||
|
||
**文件**: `RoomDetailActivity.java`
|
||
|
||
### 需要集成的支付方式
|
||
1. 微信支付
|
||
2. 支付宝支付
|
||
3. 其他支付方式(可选)
|
||
|
||
## 1. 创建支付订单
|
||
**接口路径**: `POST /api/payment/create`
|
||
**请求参数**:
|
||
```json
|
||
{
|
||
"userId": "string",
|
||
"orderType": "recharge",
|
||
"amount": "number",
|
||
"coinAmount": "number",
|
||
"paymentMethod": "wechat|alipay",
|
||
"rechargeOptionId": "string"
|
||
}
|
||
```
|
||
**返回数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"orderId": "string",
|
||
"orderNo": "string",
|
||
"amount": "number",
|
||
"paymentParams": {
|
||
"appId": "string",
|
||
"partnerId": "string",
|
||
"prepayId": "string",
|
||
"packageValue": "string",
|
||
"nonceStr": "string",
|
||
"timeStamp": "string",
|
||
"sign": "string"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 2. 查询支付状态
|
||
**接口路径**: `GET /api/payment/status/{orderId}`
|
||
**请求参数**: orderId (路径参数)
|
||
**返回数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"orderId": "string",
|
||
"status": "pending|success|failed|cancelled",
|
||
"paidAt": "number",
|
||
"amount": "number"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 3. 支付回调通知
|
||
**接口路径**: `POST /api/payment/callback/wechat` 或 `/api/payment/callback/alipay`
|
||
**说明**:
|
||
- 此接口由支付平台调用,不是前端调用
|
||
- 用于接收支付成功的异步通知
|
||
- 支付成功后更新订单状态和用户金币余额
|
||
|
||
## 4. 获取支付历史
|
||
**接口路径**: `GET /api/payment/history`
|
||
**请求参数**:
|
||
- userId: 用户ID(从token中获取)
|
||
- page (可选): 页码
|
||
- pageSize (可选): 每页数量
|
||
**返回数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": [
|
||
{
|
||
"orderId": "string",
|
||
"orderNo": "string",
|
||
"amount": "number",
|
||
"coinAmount": "number",
|
||
"status": "string",
|
||
"paymentMethod": "string",
|
||
"createdAt": "number",
|
||
"paidAt": "number"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 微信支付集成步骤
|
||
|
||
### 1. 添加依赖
|
||
```gradle
|
||
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
|
||
```
|
||
|
||
### 2. 配置微信支付
|
||
- 在微信开放平台注册应用
|
||
- 获取 AppID 和 AppSecret
|
||
- 配置支付回调URL
|
||
|
||
### 3. 调用支付
|
||
```java
|
||
// 1. 创建支付订单,获取支付参数
|
||
// 2. 调用微信支付SDK
|
||
IWXAPI api = WXAPIFactory.createWXAPI(context, APP_ID);
|
||
PayReq request = new PayReq();
|
||
request.appId = paymentParams.getAppId();
|
||
request.partnerId = paymentParams.getPartnerId();
|
||
request.prepayId = paymentParams.getPrepayId();
|
||
request.packageValue = paymentParams.getPackageValue();
|
||
request.nonceStr = paymentParams.getNonceStr();
|
||
request.timeStamp = paymentParams.getTimeStamp();
|
||
request.sign = paymentParams.getSign();
|
||
api.sendReq(request);
|
||
```
|
||
|
||
### 4. 处理支付结果
|
||
```java
|
||
// 在 WXPayEntryActivity 中接收支付结果
|
||
@Override
|
||
public void onResp(BaseResp resp) {
|
||
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
|
||
if (resp.errCode == 0) {
|
||
// 支付成功
|
||
// 查询订单状态确认
|
||
} else if (resp.errCode == -2) {
|
||
// 用户取消
|
||
} else {
|
||
// 支付失败
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 支付宝支付集成步骤
|
||
|
||
### 1. 添加依赖
|
||
```gradle
|
||
implementation 'com.alipay.sdk:alipaysdk-android:15.8.11'
|
||
```
|
||
|
||
### 2. 配置支付宝
|
||
- 在支付宝开放平台注册应用
|
||
- 获取 AppID 和私钥
|
||
- 配置支付回调URL
|
||
|
||
### 3. 调用支付
|
||
```java
|
||
// 1. 创建支付订单,获取支付参数(orderInfo)
|
||
// 2. 调用支付宝SDK
|
||
PayTask alipay = new PayTask(activity);
|
||
Map<String, String> result = alipay.payV2(orderInfo, true);
|
||
```
|
||
|
||
### 4. 处理支付结果
|
||
```java
|
||
// 解析支付结果
|
||
String resultStatus = result.get("resultStatus");
|
||
if (TextUtils.equals(resultStatus, "9000")) {
|
||
// 支付成功
|
||
// 查询订单状态确认
|
||
} else if (TextUtils.equals(resultStatus, "6001")) {
|
||
// 用户取消
|
||
} else {
|
||
// 支付失败
|
||
}
|
||
```
|
||
|
||
## 支付流程
|
||
|
||
### 充值流程
|
||
1. 用户选择充值金额
|
||
2. 选择支付方式(微信/支付宝)
|
||
3. 调用创建支付订单接口
|
||
4. 获取支付参数
|
||
5. 调用支付SDK发起支付
|
||
6. 用户完成支付
|
||
7. 接收支付结果回调
|
||
8. 查询订单状态确认支付成功
|
||
9. 更新用户金币余额
|
||
10. 显示充值成功提示
|
||
|
||
### 安全建议
|
||
1. 支付参数签名验证
|
||
2. 订单金额二次验证
|
||
3. 防止重复支付
|
||
4. 支付超时处理
|
||
5. 异常订单处理
|
||
|
||
### 错误处理
|
||
- 网络错误: 提示用户重试
|
||
- 支付取消: 关闭支付页面
|
||
- 支付失败: 显示失败原因,允许重试
|
||
- 订单查询失败: 提示联系客服
|