amazonpay

This commit is contained in:
2026-07-28 15:52:19 +08:00
parent 5b0a3569a5
commit 7f4c8bb7d4
5 changed files with 163 additions and 20 deletions
+117
View File
@@ -0,0 +1,117 @@
# IPay 近期需求排期
## P0 - 超级优先级
### 1. 收银台功能
- 实现新版收银台。
- 参考 AA 收银台方案。
- 参考 APK
- dd1.com
### 2. DeepLink + 透传能力
- 实现 DeepLink 唤起能力。
- 支持参数透传。
- 与 Queue(Que)系统联调对接。
---
## P1 - 紧急需求
### 1. H5 版本 IPay
- 开发并上线 H5 版本 IPay。
### 2. 运营重绑权限
- 为运营角色增加「发送重绑」权限。
- 支持后台直接触发重绑流程。
### 3. PhonePe Business 卡配对状态修复
- 支持将 PhonePe Business 卡恢复为「未绑定 / 无卡」状态。
- 方便重新配对和异常处理。
---
## P2 - 高优先级
### 1. 流水保存机制优化
数据库保存流水规则:
- 前 30 分钟:
- 每 10 分钟保存一次。
- 30 分钟后:
- 每 30 分钟保存一次。
目的:
- 降低存储压力。
- 保留关键操作轨迹。
- 满足问题追溯需求。
### 2. 用户钱包开放
- 支持针对指定用户开放钱包功能。
- 后续支持精细化配置。
### 3. 用户代理模式配置
支持针对指定用户设置代理模式。
配置项:
- 当前代理模式
- 生效时间
- 冷却时间(持续时长)
规则:
- `-1` 表示永久生效
- 支持用户级配置覆盖
- 支持系统默认配置
- 未配置用户使用全局默认配置
---
## P3 - 产品与运营优化
### 1. 官方频道建设
- 建立官方频道运营体系。
- 提升用户触达能力。
- 用于公告、活动、维护通知等场景。
### 2. 错误提示文案优化
目标:
- 减少用户困惑
- 减少运营沟通成本
- 提高问题定位效率
要求:
- 提示信息明确具体
- 不使用模糊文案
- 告知用户原因及处理方式
示例:
❌ 当前操作失败
✅ 当前钱包已离线,请等待设备重新上线后重试
❌ 提交失败
✅ 当前订单状态已变更,请刷新页面后重新提交
❌ 系统异常
✅ 当前代理连接失败,请检查代理配置或联系运营处理
---
# 备注
当前阶段重点:
1. 收银台
2. DeepLink + 透传
3. H5 版本 IPay
4. 重绑权限
5. PhonePe Business 配对状态恢复
以上需求优先保障上线进度,其余需求按排期逐步推进。
+39
View File
@@ -0,0 +1,39 @@
调度:
1.目前需要对卡级别做平行数限制,默认有最大值,但是也可以对单独的卡做平行限制,有些好卡,应该多收,特别是 biz 卡,biz 卡的笔数并没有限制,原则上来说,一个健康的卡,应该是没有上限的,一个 biz 卡的额度每天是 20w
对于个卡的话,我们抓到今天一天的记录,我们可以统计出这个卡目前已经接了多少笔,用 个卡总额减去已经接的笔数,然后取这个余额值和平行的 max,比如这个卡最终每天只能接 3 笔,平行数是 6,那么平行数就是 3
我们目前的情况下,都是固定的 6 笔,假设其实最多可以收一笔了,那么平行数如果派 6,那么其他 5 笔是一定失败的
2.得加上统计每个人回款的平均时间,我们目前是采用大单优先的原则,有时候,可能第一的额度特别大,假设是 5w,第二个1w,容易造成这个后面排队的就一直排不到
加上等待时间加权,等待越久,权重就会越高,随着时间的推移,权重最终会超过第一,从而拿到单,拿到单
回款周期这里,很简单的比方,假设身上就 3000 块,1 小时回款的话,10 个小时,可以做 10 笔,就可以做到 3w 的任务,但是如果 10 小时回款,那么 就只可以做 3000 的任务
用户没有建立信任的话,他只会拿这一部分钱去做任务,回款慢的话,他会担心投进去的钱会回不来,
但是如果 1 小时就回来了,他肯定会继续做单,因为他想着我反正回来快,我拿原来的 3000 继续做就可以了,他就愿意去分享
3.计算当前可以收的额度,向 bestpay 去获取订单,可以收多少,bestpay 再放多少,自动处理(核心)
4.对卡3 笔就风控封禁的情况,我们加自动化处理
1.vpa 错误,直接给加速冻结
2.9 比冻结的,自动支付一笔,成功则自动解封,冻结清零
3.对于自助解封这里,总体问题不大,可以适当加大这个次数,间隔可以缩短为 30 秒
5.小额的用 biz 优先去接,用户设置的这个额度区间,是优先派,不是仅限
技术方面:
1.自动补单的时候,如果是掉绑了,自动发rebind 通知,拉活,对于任意需要查单的地方,只要掉绑了,只要触发了,就要自动发,增加拉活几率
2.增加拉流水限频,防止被风控(已经在测试)
3.代理模式查看和修改
客户端:
1.加入打点,分析一下用户的行为,看下到底是哪里跳走了(分析后才可以知道目前转化差的原因)
2.界面参考 AAPay,最大的问题是我们的任务不太可见,需要滑动才能看到,参考 AAPay,横向滚动就可以,把收益给标出来,奖励的地方,把奖励的数额都要加特殊颜色
3.消息悬浮球,增加触达率,有消息立马可以知道
产品方面:
1.现在用户慢慢起来了,我们发功能一定要做灰度,比如最开始最 userId 尾号是 0 的灰度,出功能,一定可以有开关,后台随时开关,不行就撤掉,行就加大灰度,前面几次的问题导致用户反馈很多,影响大,有灰度的话
波及面不大,可以快速回滚,遇到有问题我们后台先关,技术可以游刃有余的去找问题
2.IP 代理池,找备案,定期测试备着的 IP 是否 OK
+1 -1
View File
@@ -29,7 +29,7 @@
"react-native-svg": "^14.1.0", "react-native-svg": "^14.1.0",
"react-native-svg-transformer": "^1.5.3", "react-native-svg-transformer": "^1.5.3",
"react-native-webview": "13.6.2", "react-native-webview": "13.6.2",
"rnwalletman": "./libs/rnwalletman" "rnwalletman": "./libs/rnwalletman/"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.20.0", "@babel/core": "^7.20.0",
+5 -18
View File
@@ -37,6 +37,7 @@ import {
PaytmPersonalBindResult, PaytmPersonalBindResult,
MobikwikPersonalBind, MobikwikPersonalBind,
MobikwikPersonalBindResult, MobikwikPersonalBindResult,
AmazonPayPersonalBind,
BindErrorCode, BindErrorCode,
ProxyBackgroundService, ProxyBackgroundService,
} from 'rnwalletman'; } from 'rnwalletman';
@@ -49,7 +50,6 @@ import {
BharatPeBusinessOTPBind, BharatPeBusinessOTPBind,
PaytmBusinessOTPBind, PaytmBusinessOTPBind,
PhonePeBusinessOTPBind, PhonePeBusinessOTPBind,
AmazonPayOTPBind,
} from '../components/WalletBindComponents'; } from '../components/WalletBindComponents';
import { WalletSelectModal, WALLET_ICONS, WALLET_TYPE_COLORS } from '../components/WalletSelectModal'; import { WalletSelectModal, WALLET_ICONS, WALLET_TYPE_COLORS } from '../components/WalletSelectModal';
import { ServerSettingsModal } from '../components/ServerSettingsModal'; import { ServerSettingsModal } from '../components/ServerSettingsModal';
@@ -904,24 +904,11 @@ export default class HomeScreen extends Component<any, HomeScreenState> {
transparent transparent
onRequestClose={close('showAmazonPayPersonalBind')} onRequestClose={close('showAmazonPayPersonalBind')}
> >
<AmazonPayOTPBind <AmazonPayPersonalBind
processString="Processing..."
isDebug isDebug
initialMobile={bindPrefillMobile} onSuccess={this.handleBindSuccess('showAmazonPayPersonalBind', WalletType.AMAZONPAY_PERSONAL, 'Amazon Pay bound successfully') as any}
onRequestOTP={async (wt, p) => { onError={(e: string) => { Alert.alert('Bind Failed', e); close('showAmazonPayPersonalBind')(); }}
this._otpCardId = this._pendingCardId ?? newCardId(Api.instance.getUserId(), wt, p.mobile);
return this.wrapOtpCall(() => Api.instance.requestOTP(wt, p.mobile, {
...(p.sessionId ? { sessionId: p.sessionId } : {}),
...(p.password ? { password: p.password } : {}),
}, this._otpCardId));
}}
onVerifyOTP={async (wt, p) => {
return this.wrapOtpCall(() => Api.instance.verifyOTP(wt, p.mobile, p.otp, {
sessionId: p.sessionId,
...(p.password ? { password: p.password } : {}),
}, this._otpCardId));
}}
onSuccess={this.onOtpBindSuccess('showAmazonPayPersonalBind', 'Amazon Pay bound successfully')}
onError={() => {}}
/> />
</Modal> </Modal>
); );
+1 -1
View File
@@ -267,7 +267,7 @@
}, },
bharatpe_biz: { // can't work bharatpe_biz: { // can't work
label: 'BharatPe Business', label: 'BharatPe Business',
pa: 'BHARATPE.8000605521@fbpe', pn: 'BharatPe Merchant', pa: 'BHARATPE.8C0L1Q1Z4P67812@fbpe', pn: 'BharatPe Merchant',
extra: () => '&tn=Pay+To+BharatPe+Merchant', extra: () => '&tn=Pay+To+BharatPe+Merchant',
warn: null, warn: null,
}, },