first blood
This commit is contained in:
184
rnwalletman/README.md
Normal file
184
rnwalletman/README.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# RN WalletMan
|
||||
|
||||
纯 TypeScript 实现的 React Native 钱包绑定库。
|
||||
|
||||
## 安装
|
||||
|
||||
**重要:必须先安装 react-native-webview**
|
||||
|
||||
```bash
|
||||
# 1. 安装 react-native-webview(必需)
|
||||
npm install react-native-webview
|
||||
# 或
|
||||
yarn add react-native-webview
|
||||
|
||||
# 2. iOS 需要 pod install
|
||||
cd ios && pod install && cd ..
|
||||
|
||||
# 3. 安装 rnwalletman
|
||||
npm install ./rnwalletman
|
||||
# 或
|
||||
yarn add ./rnwalletman
|
||||
```
|
||||
|
||||
|
||||
# 使用示例
|
||||
|
||||
## 基础用法
|
||||
|
||||
```tsx
|
||||
import { PaytmBind } from 'rnwalletman';
|
||||
|
||||
<PaytmBind
|
||||
onSuccess={(result) => {
|
||||
// result.type: 'paytm_business'
|
||||
// result.cookie: SESSION cookie
|
||||
// result.xCsrfToken: CSRF token
|
||||
// result.qrData: QR 数据(JSON)
|
||||
|
||||
// 发送到服务端
|
||||
fetch('https://your-api.com/bind', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(result)
|
||||
});
|
||||
}}
|
||||
onError={(error) => {
|
||||
Alert.alert('绑定失败', error);
|
||||
}}
|
||||
/>
|
||||
```
|
||||
|
||||
## 完整示例
|
||||
|
||||
```tsx
|
||||
import React, { useState } from 'react';
|
||||
import { View, Button, Modal } from 'react-native';
|
||||
import { PaytmBind, WalletType } from 'rnwalletman';
|
||||
|
||||
function App() {
|
||||
const [showBind, setShowBind] = useState(false);
|
||||
|
||||
return (
|
||||
<View>
|
||||
<Button title="绑定 Paytm" onPress={() => setShowBind(true)} />
|
||||
|
||||
<Modal visible={showBind} onRequestClose={() => setShowBind(false)}>
|
||||
<PaytmBind
|
||||
onSuccess={(result) => {
|
||||
console.log('绑定成功', result);
|
||||
setShowBind(false);
|
||||
// 保存到服务端
|
||||
}}
|
||||
onError={(error) => {
|
||||
console.error(error);
|
||||
setShowBind(false);
|
||||
}}
|
||||
/>
|
||||
</Modal>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## 返回数据结构
|
||||
|
||||
### Paytm
|
||||
```typescript
|
||||
{
|
||||
type: 'paytm_business',
|
||||
success: true,
|
||||
cookie: 'SESSION_VALUE',
|
||||
xCsrfToken: 'TOKEN',
|
||||
contextData: '...', // 可选
|
||||
qrData: '...' // 可选
|
||||
}
|
||||
```
|
||||
|
||||
### PhonePe
|
||||
```typescript
|
||||
{
|
||||
type: 'phonepe_business',
|
||||
success: true,
|
||||
cookie: 'MERCHANT_USER_A_TOKEN=...;...',
|
||||
xCsrfToken: 'TOKEN',
|
||||
fingerprint: 'fp.fp.fp.fp',
|
||||
qrData: '...' // 可选
|
||||
}
|
||||
```
|
||||
|
||||
### GooglePay
|
||||
```typescript
|
||||
{
|
||||
type: 'googlepay_business',
|
||||
success: true,
|
||||
url: 'https://pay.google.com/...',
|
||||
body: 'f.req=...',
|
||||
cookie: '...',
|
||||
channelUid: '...',
|
||||
openUrl: '...'
|
||||
}
|
||||
```
|
||||
|
||||
### BharatPe
|
||||
```typescript
|
||||
{
|
||||
type: 'bharatpe_business',
|
||||
success: true,
|
||||
cookie: '...',
|
||||
accessToken: '...',
|
||||
merchantId: '...',
|
||||
userName: '...',
|
||||
email: '...', // 可选
|
||||
mobile: '...' // 可选
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**注意**:`react-native-webview` 是 peer dependency,必须在使用 rnwalletman 的项目中安装。
|
||||
|
||||
## 使用
|
||||
|
||||
```tsx
|
||||
import { PaytmBind, PhonePeBind, GooglePayBind, BharatPeBind } from 'rnwalletman';
|
||||
|
||||
function BindPaytmScreen() {
|
||||
return (
|
||||
<PaytmBind
|
||||
onSuccess={(result) => {
|
||||
console.log('绑定成功', result);
|
||||
// result: { type, cookie, xCsrfToken, qrData, ... }
|
||||
// 发送到服务端保存
|
||||
}}
|
||||
onError={(error) => {
|
||||
console.error('绑定失败', error);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function BindPhonePeScreen() {
|
||||
return (
|
||||
<PhonePeBind
|
||||
onSuccess={(result) => {
|
||||
// result: { type, cookie, xCsrfToken, fingerprint, ... }
|
||||
}}
|
||||
onError={(error) => console.error(error)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## 组件
|
||||
|
||||
- `<PaytmBind />` - Paytm Business 绑定
|
||||
- `<PhonePeBind />` - PhonePe Business 绑定
|
||||
- `<GooglePayBind />` - GooglePay Business 绑定
|
||||
- `<BharatPeBind />` - BharatPe Business 绑定
|
||||
|
||||
## 特性
|
||||
|
||||
- ✅ 纯 TypeScript,跨平台
|
||||
- ✅ 使用 react-native-webview
|
||||
- ✅ 自动提取 Cookie/Token
|
||||
- ✅ TypeScript 类型定义
|
||||
- ✅ 无需 Native 代码
|
||||
Reference in New Issue
Block a user