pay-sdk-react
Version:
A cross-platform payment SDK for React, supporting Alipay, WeChat Pay, PayPal, Stripe, Payssion, and Airwallex, compatible with H5, PC, and App environments.
1,079 lines (867 loc) • 28.3 kB
Markdown
<div align="center">
[English](./README.md) | 简体中文
</div>
# 特征
## 全面
支持支付宝、微信、PayPal、Stripe、Payssion、空中云汇(Airwallex)等主流支付方式,覆盖绝大部分业务场景。
## 跨端适配
H5、PC、App跨端 场景均可用,适配多端,满足多样化业务需求。
## TypeScript 友好
所有组件均由 TypeScript 编写,类型安全,开发体验优秀。
## 多种承接形式
支持支付按钮、弹窗、二维码、表单、popup、modal、蒙层等多种支付承接方式,灵活组合,满足不同业务场景。
# 安装
[npm package](https://www.npmjs.com/package/pay-sdk-react)
```shell
# 使用 npm
npm install pay-sdk-react
# 使用 yarn
yarn add pay-sdk-react
# 使用 pnpm
pnpm add pay-sdk-react
```
## 示例
### 基础使用
```typescript
import React from 'react';
import ReactDOM from 'react-dom';
import { PayButton, PaymentMethod } from 'pay-sdk-react';
import 'pay-sdk-react/dist/css/index.min.css';
function App() {
return (
<PayButton payMethod={PaymentMethod.PaypalH5} paypalUrl={''}, />
);
}
ReactDOM.render(<App />, document.getElementById('app'));
```
### 按需加载
使用 babel-plugin-import
#### 1. 安装
```shell
npm i babel-plugin-import -D
```
#### 2. 添加配置:组件和样式的按需加载
在 babel 配置中加入:
```js
plugins: [
[
'babel-plugin-import',
{
libraryName: 'pay-sdk-react',
libraryDirectory: 'es',
camel2DashComponentName: false,
style: true, // 样式按需加载
},
],
];
```
# 支付场景与用法
## 支付宝
### PC 端
#### 方式一:使用 PayButton
引入 PayButton 按钮,点击唤起支付弹窗,展示支付宝二维码。用户扫码完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const AlipayComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { formHtml: res.htmlStr };
};
return (
<div className="alipay-component">
<h3>PayButton-基础用法</h3>
<PayButton payMethod={PaymentMethod.AlipayPc} createOrder={createOrder}>
Pay Button
</PayButton>
</div>
);
};
export default AlipayComponent;
```
#### 方式二:Alipay.Button
引入 Alipay,Alipay.Button 点击唤起支付弹窗,展示支付宝二维码。用户扫码完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { Alipay } from 'pay-sdk-react';
const AlipayComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { formHtml: res.htmlStr };
};
return (
<div className="alipay-component">
<h3>Alipay.Button - modal</h3>
<Alipay.Button createOrder={createOrder}>alipay Button</Alipay.Button>
</div>
);
};
export default AlipayComponent;
```
#### 方式三:自定义按钮
使用自定义按钮,调用支付弹窗组件,展示二维码。用户扫码完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { useRef, useState } from 'react';
import { Alipay, AlipayModalRef } from 'pay-sdk-react';
const formHtml = '<form ... />';
const AlipayComponent = () => {
const modalRef = useRef<AlipayModalRef>(null);
const [modalVisible, setModalVisible] = useState(false);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
modalRef.current?.open({ formHtml: res.htmlStr });
};
return (
<div className="alipay-component">
<h3>自定义 Button - visible 参数唤起 modal</h3>
<button onClick={() => setModalVisible(true)}>自定义 Button</button>
<Alipay.Modal
visible={modalVisible}
onClose={() => setModalVisible(false)}
alipayProps={{ formHtml }}
/>
<h3>自定义 Button - ref open 方法唤起 modal</h3>
<button onClick={() => createOrder()}>自定义 Button</button>
<Alipay.Modal ref={modalRef} />
</div>
);
};
export default AlipayComponent;
```
#### 方式四:自定义承接
直接引入二维码组件,自定义承接方式&展示时机。用户扫码完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { Alipay } from 'pay-sdk-react';
const formHtml = '<form ... />';
const AlipayComponent = () => {
return (
<div className="alipay-component">
<Alipay formHtml={formHtml} />
</div>
);
};
export default AlipayComponent;
```
### H5 端
#### 方式一:PayButton
引入支付按钮,点击唤起等待支付弹窗(或蒙层),自动提交 iframe 表单唤起支付宝 App,无 App 时跳转浏览器。用户完成支付后,支付宝会通知业务后端支付结果。等待结果承接:支持弹窗和蒙层两种方式。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const MAlipayComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { formHtml: res.htmlStr };
};
return (
<div className="m-alipay-component">
<h3>PayButton-基础用法</h3>
<PayButton
payMethod={PaymentMethod.AlipayH5}
createOrder={createOrder}
displayType={'modal'}
>
Pay Button
</PayButton>
</div>
);
};
export default MAlipayComponent;
```
#### 方式二:MAlipay.Button
引入 MAlipay.Button 按钮,点击唤起等待支付弹窗(或蒙层),自动提交 iframe 表单唤起支付宝 App,无 App 时跳转浏览器。用户完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { MAlipay } from "pay-sdk-react";
const MAlipayComponent = () => {
const createOrder = async() => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { formHtml: res.htmlStr };
}
return (
<div className="m-alipay-component">
<h3>Alipay Button - mask</h3>
<MAlipay.Button
displayType={'mask'}
createOrder={createOrder}
>
Alipay Button
</MAlipay.Button>
</div>
);
};
export default MAlipayComponent;
```
#### 方式三:自定义表单
引入 MAlipay 表单组件,自定义触发表单时机。用户完成支付后,支付宝会通知业务后端支付结果。
```typescript
import { MAlipay } from "pay-sdk-react";
const formHtml = "";
const MAlipayComponent = () => {
return (
<div className="yfm-m-alipay-component">
<h3>Alipay 表单</h3>
<MAlipay formHtml={formHtml} />
</div>
);
};
export default MAlipayComponent;
```
## 微信
### PC 端
#### 方式一:PayButton
引入支付按钮,点击唤起支付弹窗,展示微信二维码。用户扫码完成支付后,微信会通知业务后端支付结果。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const WechatComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { wechatUrl: res.url };
};
return (
<div className="wechat-component">
<h3>PayButton-基础用法</h3>
<PayButton payMethod={PaymentMethod.WechatPc} createOrder={createOrder}>
Pay Button
</PayButton>
</div>
);
};
export default WechatComponent;
```
#### 方式二:Wechat.Button
引入 Wechat.Button 按钮,点击唤起支付弹窗,展示微信二维码。用户扫码完成支付后,微信会通知业务后端支付结果。
```typescript
import { Wechat } from 'pay-sdk-react';
const WechatComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { wechatUrl: res.url };
};
return (
<div className="wechat-component">
<h3>Wechat.Button - modal</h3>
<Wechat.Button createOrder={createOrder}>Wechat Button</Wechat.Button>
</div>
);
};
export default WechatComponent;
```
#### 方式三:自定义按钮
使用自定义按钮,调用支付弹窗组件,展示二维码。用户扫码完成支付后,微信会通知业务后端支付结果。
```typescript
import { useRef, useState } from 'react';
import { Wechat, WechatModalRef } from 'pay-sdk-react';
const wechatUrl = 'weixin://wxpay...';
const WechatComponent = () => {
const modalRef = useRef<WechatModalRef>(null);
const [modalVisible, setModalVisible] = useState(false);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
modalRef.current?.open({ wechatUrl: res.url });
};
return (
<div className="wechat-component">
<h3>自定义 Button - visible 参数唤起 modal</h3>
<button onClick={() => setModalVisible(true)}>自定义 Button</button>
<Wechat.Modal
visible={modalVisible}
onClose={() => setModalVisible(false)}
wechatProps={{ wechatUrl }}
/>
<h3>自定义 Button - ref open 方法唤起 modal</h3>
<button onClick={() => createOrder()}>自定义 Button</button>
<Wechat.Modal ref={modalRef} />
</div>
);
};
export default WechatComponent;
```
#### 方式四:自定义承接
直接引入二维码组件,自定义承接和唤起方式。用户扫码完成支付后,微信会通知业务后端支付结果。
```typescript
import { Wechat } from 'pay-sdk-react';
const wechatUrl = 'weixin://wxpay/...';
const WechatComponent = () => {
return (
<div className="wechat-component">
<h3>直接使用 Wechat - 用户自定义承接方式&展示时机</h3>
<Wechat wechatUrl={wechatUrl} />
</div>
);
};
export default WechatComponent;
```
### H5 端
#### 方式一:PayButton
引入支付按钮,点击唤起等待支付弹窗(或蒙层),自动打开微信支付链接,微信内浏览器自动唤起支付。用户完成支付后,微信会通知业务后端支付结果。等待结果承接:支持弹窗和蒙层两种方式。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const MWechatComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { wechatUrl: res.url };
};
return (
<div className="m-wechat-component">
<h3>PayButton - 基础用法</h3>
<PayButton payMethod={PaymentMethod.WechatH5} createOrder={createOrder}>
Pay Button
</PayButton>
<h3>PayButton - mask</h3>
<PayButton
payMethod={PaymentMethod.WechatH5}
createOrder={createOrder}
displayType="mask"
>
Pay Button
</PayButton>
</div>
);
};
export default MWechatComponent;
```
#### 方式二:MWechatButton
引入 MWechatButton 按钮,点击唤起等待支付弹窗(或蒙层),自动打开微信支付链接,微信内浏览器自动唤起支付。用户完成支付后,微信会通知业务后端支付结果。
```typescript
import { MWechatButton } from 'pay-sdk-react';
const wechatUrl = 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?...';
const MWechatComponent = () => {
return (
<div className="m-wechat-component">
<h3>wechat Button - modal</h3>
<MWechatButton displayType={'modal'} modalProps={{ payUrl: wechatUrl }}>
Wechat Button
</MWechatButton>
</div>
);
};
export default MWechatComponent;
```
## PayPal
引入支付按钮,点击唤起支付,自动打开 PayPal 支付链接,同时展示等待支付结果蒙层。PayPal 支付完成后,PayPal 官方会重定向到业务指定的结果页面,重定向地址由业务后端服务调用 PayPal 官方创建支付订单 API 时传入。
### 方式一:PayButton
引入支付按钮,点击唤起支付,自动打开 PayPal 支付链接,同时展示等待支付结果蒙层。用户完成支付后,PayPal 会重定向到业务指定的结果页面。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const PaypalComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { wechatUrl: res.url };
};
return (
<div className="paypal-component">
<h3>PayButton-基础用法</h3>
<PayButton payMethod={PaymentMethod.PaypalH5} createOrder={createOrder}>
Pay Button
</PayButton>
<h3>PaypalButton - 不自动打开第三方支付页面 - 新tab</h3>
<PayButton
payMethod={PaymentMethod.PaypalH5}
createOrder={createOrder}
maskProps={{ autoOpenWindow: false }}
>
Pay Button
</PayButton>
</div>
);
};
export default PaypalComponent;
```
### 方式二:PaypalButton
引入 PaypalButton 按钮,点击唤起支付,自动打开 PayPal 支付链接,同时展示等待支付结果蒙层。用户完成支付后,PayPal 会重定向到业务指定的结果页面。
```typescript
import { PaypalButton } from 'pay-sdk-react';
const paypalUrl = 'https://www.sandbox.paypal.com/checkoutnow?...';
const PaypalComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { wechatUrl: res.url };
};
return (
<div className="paypal-component">
<h3>PaypalButton - 自动打开第三方支付页面 - 当前tab</h3>
<PaypalButton
createOrder={createOrder}
maskProps={{ openMode: 'replace' }}
>
Paypal Button
</PaypalButton>
<h3>PaypalButton - 不自动打开第三方支付页面 - 新tab</h3>
<PaypalButton
createOrder={createOrder}
maskProps={{ autoOpenWindow: false }}
>
Paypal Button
</PaypalButton>
<h3>Paypal Button - 不自动打开第三方支付页面 - 当前tab</h3>
<PaypalButton
maskProps={{
payUrl: paypalUrl,
autoOpenWindow: false,
openMode: 'href',
}}
>
Paypal Button
</PaypalButton>
</div>
);
};
export default PaypalComponent;
```
## Stripe
引入支付组件,使用 Stripe 支付。Stripe 支付完成后,Stripe 官方会重定向到业务指定的结果页面,重定向地址由业务后端服务调用 Stripe 官方创建支付订单 API 时传入。
### 方式一:PayButton
引入支付按钮,点击唤起支付 modal 或 popup,展示 Stripe 支付表单。用户完成支付后,Stripe 会重定向到业务指定的结果页面。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const StripeComponent = () => {
const createOrder = async () => {
return await fetch('/create-order', {
method: 'POST',
});
};
return (
<div className="stripe-component">
<h3>PayButton-基础用法</h3>
<PayButton payMethod={PaymentMethod.StripeH5} createOrder={createOrder}>
Pay Button
</PayButton>
</div>
);
};
export default StripeComponent;
```
### 方式二:Stripe.Button
引入 Stripe.Button 按钮,点击唤起支付 modal 或 popup,展示 Stripe 支付表单。用户完成支付后,Stripe 会重定向到业务指定的结果页面。
```typescript
import { Stripe } from 'pay-sdk-react';
const StripeComponent = () => {
const createOrder = async () => {
return await fetch('/create-order', {
method: 'POST',
});
};
return (
<div className="stripe-component">
<h3>Stripe.Button</h3>
<Stripe.Button createOrder={createOrder}>Stripe Button</Stripe.Button>
</div>
);
};
export default StripeComponent;
```
### 方式三:自定义唤起 popup - 推荐 移动端 使用
使用自定义按钮,调用 Stripe.Popup 组件,展示 Stripe 支付表单。用户完成支付后,Stripe 会重定向到业务指定的结果页面。
```typescript
import { useRef, useState } from 'react';
import { Stripe, StripePopupRef } from 'pay-sdk-react';
const options = {
stripeKey: '***',
clientSecret: '***',
} as const;
const StripeComponent = () => {
const popupRef = useRef<StripePopupRef>(null);
const [popupVisible, setPopupVisible] = useState(false);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
popupRef.current?.open(res);
};
return (
<div className="stripe-component">
<h3>自定义 button-visible 参数唤起 popup</h3>
<button onClick={() => setPopupVisible(true)}>自定义 button</button>
<Stripe.Popup
visible={popupVisible}
onClose={() => setPopupVisible(false)}
stripeProps={options}
/>
<h3>自定义 button-ref open 方法唤起 popup</h3>
<button onClick={() => createOrder()}>自定义 button</button>
<Stripe.Popup ref={popupRef} />
</div>
);
};
export default StripeComponent;
```
### 方式四:自定义唤起 modal - 推荐 PC 端使用
使用自定义按钮,调用 Stripe.Modal 组件,展示 Stripe 支付表单。用户完成支付后,Stripe 会重定向到业务指定的结果页面。
```typescript
import { useRef, useState } from 'react';
import { Stripe, StripeModalRef } from 'pay-sdk-react';
const options = {
stripeKey: '***',
clientSecret: '***',
} as const;
const StripeComponent = () => {
const modalRef = useRef<StripeModalRef>(null);
const [modalVisible, setModalVisible] = useState(false);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
modalRef.current?.open(res);
};
return (
<div className="stripe-component">
<h3>自定义 button-visible 参数唤起 modal</h3>
<button onClick={() => setModalVisible(true)}>自定义 button</button>
<Stripe.Modal
visible={modalVisible}
onClose={() => setModalVisible(false)}
stripeProps={options}
/>
<h3>自定义 button-ref open 方法唤起 modal</h3>
<button onClick={createOrder}>自定义 button</button>
<Stripe.Modal ref={modalRef} />
</div>
);
};
export default StripeComponent;
```
### 方式五:Stripe 表单
引入 Stripe 表单组件,自定义承接和展示时机。用户完成支付后,Stripe 会重定向到业务指定的结果页面。
```typescript
import { Stripe } from 'pay-sdk-react';
const options = {
stripeKey: '***',
clientSecret: '***',
} as const;
const StripeComponent = () => {
return (
<div className="stripe-component">
<h3>Stripe表单</h3>
<Stripe {...options} />
</div>
);
};
export default StripeComponent;
```
## 空中云汇(Airwallex)
引入支付组件,使用空中云汇支付。空中云汇支付完成后,空中云汇支付组件会回调 onSuccess 方法,业务执行后续逻辑。
### 方式一:PayButton
引入支付按钮,点击唤起 popup 承接表单(推荐移动端),PC 端推荐唤起 modal。用户完成支付后,空中云汇支付组件会回调 onSuccess 方法,业务执行后续逻辑。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const AirwallexComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return {
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: res.currency,
intent: {
id: res.intentId,
client_secret: res.client_secret,
},
client_secret: res.client_secret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
};
};
return (
<div className="airwallex-component">
<h3>PayButton-基础用法</h3>
<PayButton
payMethod={PaymentMethod.Airwallex}
payMode="embedded"
displayType="popup"
createOrder={createOrder}
>
Pay Button
</PayButton>
</div>
);
};
export default AirwallexComponent;
```
### 方式二:自定义唤起 popup
使用自定义按钮,调用 Airwallex.Popup 组件,展示空中云汇支付表单。用户完成支付后,空中云汇支付组件会回调 onSuccess 方法,业务执行后续逻辑。
```typescript
import { useRef, useState } from 'react';
import { Airwallex, AirwallexPopupRef } from 'pay-sdk-react';
const intentId = '***';
const clientSecret = '***';
const options = {
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: 'USD',
intent: {
id: intentId,
client_secret: clientSecret,
},
client_secret: clientSecret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
} as const;
const AirwallexComponent = () => {
const [popupVisible, setPopupVisible] = useState(false);
const popupRef = useRef<AirwallexPopupRef>(null);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
popupRef.current?.open({
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: res.currency,
intent: {
id: res.intentId,
client_secret: res.client_secret,
},
client_secret: res.client_secret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
});
};
return (
<div className="airwallex-component">
<h3>自定义 button - visible 参数唤起 popup</h3>
<button onClick={() => setPopupVisible(true)}>自定义 button</button>
<Airwallex.Popup
visible={popupVisible}
onClose={() => setPopupVisible(false)}
airwallexProps={options}
/>
<h3>自定义 button - ref open 方法唤起 popup</h3>
<button onClick={createOrder}>自定义 button</button>
<Airwallex.Popup ref={popupRef} />
</div>
);
};
export default AirwallexComponent;
```
### 方式三:唤起 modal
使用自定义按钮,调用 Airwallex.Modal 组件,展示空中云汇支付表单。用户完成支付后,空中云汇支付组件会回调 onSuccess 方法,业务执行后续逻辑。
```typescript
import { useRef, useState } from 'react';
import { Airwallex, AirwallexModalRef } from 'pay-sdk-react';
const intentId = '***';
const clientSecret = '***';
const options = {
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: 'USD',
intent: {
id: intentId,
client_secret: clientSecret,
},
client_secret: clientSecret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
} as const;
const AirwallexComponent = () => {
const [modalVisible, setModalVisible] = useState(false);
const modalRef = useRef<AirwallexModalRef>(null);
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
modalRef.current?.open({
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: res.currency,
intent: {
id: res.intentId,
client_secret: res.client_secret,
},
client_secret: res.client_secret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
});
};
return (
<div className="airwallex-component">
<h3>自定义 button-visible 参数唤起 modal</h3>
<button onClick={() => setModalVisible(true)}>自定义 button</button>
<Airwallex.Modal
visible={modalVisible}
onClose={() => setModalVisible(false)}
airwallexProps={options}
/>
<h3>Airwallex.button - ref open 方法唤起 modal</h3>
<button onClick={createOrder}>自定义button</button>
<Airwallex.Modal ref={modalRef} />
</div>
);
};
export default AirwallexComponent;
```
### 方式四:自定义承接
引入 Airwallex 表单组件,自定义承接和展示时机。用户完成支付后,空中云汇支付组件会回调 onSuccess 方法,业务执行后续逻辑。
```typescript
import { Airwallex } from 'pay-sdk-react';
const intentId = '***';
const clientSecret = '***';
const options = {
type: 'fullFeaturedCard',
initOptions: {
env: 'demo',
locale: 'en',
},
options: {
currency: 'USD',
intent: {
id: intentId,
client_secret: clientSecret,
},
client_secret: clientSecret,
},
onSuccess: () => {
window.location.replace('支付成功结果页');
},
} as const;
const AirwallexComponent = () => {
return (
<div className="airwallex-component">
<h3>Airwallex表单</h3>
<Airwallex {...options} />
</div>
);
};
export default AirwallexComponent;
```
### 方式五:Airwallex.Button
引入支付按钮,点击打开第三方支付链接,同时唤起等待支付结果蒙层。用户完成支付后,空中云汇会重定向到业务指定的结果页面。
```typescript
import { Airwallex } from 'pay-sdk-react';
const AirwallexComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { airwallexUrl: res.url };
};
return (
<div className="airwallex-component">
<h3>Airwallex.Button</h3>
<Airwallex.Button payMode={'redirect'} createOrder={createOrder}>
Airwallex Button
</Airwallex.Button>
</div>
);
};
export default AirwallexComponent;
```
## Payssion
引入支付组件,使用 Payssion 支付。Payssion 支付完成后,Payssion 官方会重定向到业务指定的结果页面,重定向地址由业务后端服务调用 Payssion 官方创建支付订单 API 时传入。
### 方式一:PayButton
引入支付按钮,点击打开第三方支付链接,同时唤起等待支付结果蒙层。用户完成支付后,Payssion 会重定向到业务指定的结果页面。
```typescript
import { PayButton, PaymentMethod } from 'pay-sdk-react';
const PayssionComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { payssionUrl: res.url };
};
return (
<div className="payssion-component">
<h3>PayButton-基础用法</h3>
<PayButton payMethod={PaymentMethod.Payssion} createOrder={createOrder}>
Pay Button
</PayButton>
<h3>Pay Button - 不自动打开第三方支付页面</h3>
<PayButton
createOrder={createOrder}
maskProps={{ autoOpenWindow: false }}
>
Pay Button
</PayButton>
</div>
);
};
export default PayssionComponent;
```
### 方式二:PayssionButton
引入 PayssionButton 按钮,点击打开第三方支付链接,同时唤起等待支付结果蒙层。用户完成支付后,Payssion 会重定向到业务指定的结果页面。
```typescript
import { PayssionButton } from 'pay-sdk-react';
const PayssionComponent = () => {
const createOrder = async () => {
const res = await fetch('/create-order', {
method: 'POST',
});
return { payssionUrl: res.url };
};
return (
<div className="payssion-component">
<h3>Payssion Button - 自动打开第三方支付页面 - 当前tab</h3>
<PayssionButton
createOrder={createOrder}
maskProps={{ openMode: 'replace' }}
>
Payssion Button
</PayssionButton>
<h3>PaypalButton - 不自动打开第三方支付页面 - 新tab</h3>
<PayssionButton
createOrder={createOrder}
maskProps={{ autoOpenWindow: false }}
>
Payssion Button
</PayssionButton>
<h3>PayssionButton - 不自动打开第三方支付页面 - 当前tab</h3>
<PayssionButton
createOrder={createOrder}
maskProps={{ autoOpenWindow: false, openMode: 'href' }}
>
Payssion Button
</PayssionButton>
</div>
);
};
export default PayssionComponent;
```