1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| // 本地支付提供商配置
class LocalPaymentProviders {
private providers = new Map<string, LocalPaymentProvider>();
constructor() {
this.registerProviders();
}
// 注册本地支付提供商
private registerProviders(): void {
// 中国:支付宝
this.providers.set('alipay', new AlipayProvider());
// 中国:微信支付
this.providers.set('wechat_pay', new WeChatPayProvider());
// 东南亚:Dana/OVO/Gopay
this.providers.set('dana', new DanaProvider());
this.providers.set('ovo', new OVOProvider());
this.providers.set('gopay', new GopayProvider());
// 韩国:Kakao Pay
this.providers.set('kakao_pay', new KakaoPayProvider());
// 日本:PayPay/Konbini
this.providers.set('paypay', new PayPayProvider());
this.providers.set('konbini', new KonbiniProvider());
// 巴西:Pix
this.providers.set('pix', new PixProvider());
}
// 获取指定地区的支付方式
getPaymentMethods(region: string): PaymentMethod[] {
const methods: PaymentMethod[] = [];
// 通用支付方式
methods.push(
{ id: 'card', name: 'Credit Card', icon: 'card', enabled: true },
{ id: 'paypal', name: 'PayPal', icon: 'paypal', enabled: region !== 'CN' }
);
// 本地支付方式
switch (region) {
case 'CN':
methods.push(
{ id: 'alipay', name: '支付宝', icon: 'alipay', enabled: true },
{ id: 'wechat_pay', name: '微信支付', icon: 'wechat', enabled: true }
);
break;
case 'ID':
methods.push(
{ id: 'dana', name: 'Dana', icon: 'dana', enabled: true },
{ id: 'ovo', name: 'OVO', icon: 'ovo', enabled: true },
{ id: 'gopay', name: 'GoPay', icon: 'gopay', enabled: true }
);
break;
case 'KR':
methods.push(
{ id: 'kakao_pay', name: 'Kakao Pay', icon: 'kakao', enabled: true }
);
break;
case 'JP':
methods.push(
{ id: 'paypay', name: 'PayPay', icon: 'paypay', enabled: true },
{ id: 'konbini', name: 'Konbini', icon: 'konbini', enabled: true }
);
break;
case 'BR':
methods.push(
{ id: 'pix', name: 'Pix', icon: 'pix', enabled: true }
);
break;
}
return methods;
}
}
// 支付宝集成
class AlipayProvider implements LocalPaymentProvider {
name = 'alipay';
supportedRegions = ['CN'];
async createPayment(order: PaymentOrder): Promise<PaymentResult> {
// 调用支付宝API
const params = {
out_trade_no: order.id,
total_amount: order.amount.toString(),
subject: order.description,
notify_url: this.getNotifyUrl()
};
const response = await this.callAPI('alipay.trade.create', params);
return {
paymentId: response.trade_no,
paymentUrl: response.payment_url,
qrCode: response.qr_code
};
}
async queryPayment(paymentId: string): Promise<PaymentStatus> {
const response = await this.callAPI('alipay.trade.query', {
out_trade_no: paymentId
});
return {
status: response.trade_status,
amount: parseFloat(response.total_amount)
};
}
}
|