中国银联手机支付控件(含安卓Pay)原生 React Native 包

React Native 2020-04-20 阅读 145 评论 0

react-native-china-unionpay  是中国银联支付 - 手机支付控件(含安卓Pay)的 React Native 插件。

银联手机支付控件 是中国银联推出的手机支付产品,用户在银联签约商户的手机客户端进行付款时,可选择银联云闪付进行安全、便捷的支付产品。

安装

React Native 0.60 或以上

yarn add react-native-china-unionpay
cd ios && pod install # for iOS

React Native 0.59 以下

yarn add react-native-china-unionpay
react-native link react-native-china-unionpay

iOS 配置

  • 在工程 info.plist 设置中添加一个 URL Types 回调协议,用于在支付完成后返回商户客户端。请注意 URL Schemes 需要是唯一的。

增加 URL Types

  • http 请求设置(ats) 在测试环境测试时,需要在工程对应的 plist 文件中添加 NSAppTransportSecurity Dictionary 并同时设置里面NSAllowsArbitraryLoads 属性值为 YES,具体设置可参 照以下截图:

NSAllowsArbitraryLoads 属性值为 YES

向 Apple 发布正式版本时请删除此设置。

  • 添加协议白名单

在 Xcode7.0 之后的版本中进行开发,需要在工程对应的 plist 文件中,添加 LSApplicationQueriesSchemes Array 并加入 uppaysdk、uppaywallet、uppayx1、 uppayx2、uppayx3 五个 item,具体设置可参考以下截图:

添加 LSApplicationQueriesSchemes

或者直接添加如下代码到 plist 文件中:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>uppaysdk</string>
    <string>uppaywallet</string>
    <string>uppayx1</string>
    <string>uppayx2</string>
    <string>uppayx3</string>
</array>
  • AppDelegate.m 的 下面 @end 前面添加下面代码
// iOS 9.x or newer
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

// iOS 8.x or older
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

使用

引入 react-native-china-unionpay。

import {Unionpay, UnionpayEmitter, UNIONPAY_MODAL_PRODUCTION, UNIONPAY_MODAL_DEVELOPMENT} from 'react-native-china-unionpay';

使用 Unionpay.startPay() 方法调用支付。

使用 UnionpayEmitter 侦听支付回调的事件,在 componentWillUnmount 取消侦听事件。如下: 

export default class App extends Component {
    constructor(props) {
        super(props);
        this.onUnionPayResponse = this._onUnionPayResponse.bind(this);
    }

    componentDidMount() {
        UnionpayEmitter.on("UnionPayResponse", this.onUnionPayResponse);
    }

    componentWillUnmount() {
        this.isMount = false;
        UnionpayEmitter.removeListener('UnionPayResponse', this.onUnionPayResponse);
    }

    _onUnionPayResponse(data) {
        console.log(data);
    }
}

测试银行卡号

参考官网的 测试环境的测试卡信息 ,用于测试使用。

示例代码

参考 example ,或者 下载 安装安卓的 apk,直接运行示例。

最后更新 2020-04-20