You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android原生代码封装为Titanium模块集成Square支付SDK

Titanium集成Square SDK生成支付Token实现方案

问题背景

使用Titanium开发移动应用,需集成Square移动端SDK生成银行卡支付的payment token,再将token发送至后端完成支付。Square仅提供原生Android/iOS集成方案,需通过自定义Titanium模块实现集成。


Android自定义模块实现步骤

1. 初始化Titanium Android模块项目

通过Titanium CLI创建模块项目:

ti create --type module --platform android --name squarepayments --id com.yourcompany.squarepayments

2. 集成Square In-App Payments SDK

在模块的build.gradle文件中添加Square依赖:

dependencies {
    implementation 'com.squareup.sdk.in-app-payments:card-entry:1.5.1'
}

3. 编写模块核心逻辑

创建SquarePaymentsModule.java文件,实现SDK初始化、卡片输入界面调用及Token回调:

package com.yourcompany.squarepayments;

import org.appcelerator.kroll.KrollModule;
import org.appcelerator.kroll.annotations.Kroll;
import org.appcelerator.titanium.TiApplication;
import com.squareup.sdk.in-app-payments.CardEntry;
import com.squareup.sdk.in-app-payments.InAppPaymentsSdk;
import com.squareup.sdk.in-app-payments.models.CardTokenizationParameters;
import com.squareup.sdk.in-app-payments.models.CardTokenizationResult;
import java.util.HashMap;

@Kroll.module(name="Squarepayments", id="com.yourcompany.squarepayments")
public class SquarePaymentsModule extends KrollModule {

    private static final String SQUARE_APP_ID = "你的Square应用ID";

    @Kroll.onAppCreate
    public static void onAppCreate(TiApplication app) {
        // 初始化Square SDK
        InAppPaymentsSdk.initialize(app, SQUARE_APP_ID);
    }

    @Kroll.method
    public void startCardEntry() {
        CardTokenizationParameters params = CardTokenizationParameters.builder().build();

        CardEntry.startCardEntryActivity(TiApplication.getAppCurrentActivity(), params,
                (cardTokenizationResult) -> {
                    // 成功获取Token,回调至Titanium
                    fireEvent("tokenReceived", new HashMap<String, Object>() {{
                        put("token", cardTokenizationResult.getToken());
                    }});
                },
                (errorCode, errorMessage) -> {
                    // 错误回调
                    fireEvent("error", new HashMap<String, Object>() {{
                        put("code", errorCode);
                        put("message", errorMessage);
                    }});
                });
    }
}

4. 配置权限

在模块的AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

iOS自定义模块实现步骤

1. 创建Titanium iOS模块项目

通过CLI生成模块:

ti create --type module --platform ios --name squarepayments --id com.yourcompany.squarepayments

2. 集成Square SDK

在模块的Podfile中添加CocoaPods依赖:

pod 'SquareInAppPaymentsSDK'

执行pod install完成依赖安装。

3. 编写模块核心逻辑

创建SquarepaymentsModule.m文件:

#import "SquarepaymentsModule.h"
#import <SquareInAppPaymentsSDK/SquareInAppPaymentsSDK.h>

@implementation SquarepaymentsModule

NSString *const SQUARE_APP_ID = @"你的Square应用ID";

- (id)init
{
    self = [super init];
    if (self) {
        // 初始化Square SDK
        [SQIPInAppPaymentsSDK initializeWithApplicationID:SQUARE_APP_ID];
    }
    return self;
}

- (void)startCardEntry:(id)args
{
    SQIPCardEntryViewController *cardEntryVC = [[SQIPCardEntryViewController alloc] init];
    cardEntryVC.delegate = self;
    
    UIViewController *rootVC = [[[UIApplication sharedApplication] delegate] window].rootViewController;
    [rootVC presentViewController:cardEntryVC animated:YES completion:nil];
}

#pragma mark - SQIPCardEntryViewControllerDelegate
- (void)cardEntryViewController:(SQIPCardEntryViewController *)viewController didObtainCardToken:(SQIPCardToken *)cardToken
{
    // 发送Token回调
    [self fireEvent:@"tokenReceived" withObject:@{@"token": cardToken.token}];
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

- (void)cardEntryViewController:(SQIPCardEntryViewController *)viewController didFailWithError:(NSError *)error
{
    // 错误回调
    [self fireEvent:@"error" withObject:@{@"code": @(error.code), @"message": error.localizedDescription}];
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

@end

Titanium应用中使用模块

1. 引入模块

在tiapp.xml中声明模块:

<modules>
    <module platform="android">com.yourcompany.squarepayments</module>
    <module platform="ios">com.yourcompany.squarepayments</module>
</modules>

2. 调用模块代码示例

var squarePay = require('com.yourcompany.squarepayments');

// 监听Token获取成功事件
squarePay.addEventListener('tokenReceived', function(e) {
    Ti.API.info('获取到支付Token: ' + e.token);
    // 将Token发送至后端处理支付
    sendTokenToBackend(e.token);
});

// 监听错误事件
squarePay.addEventListener('error', function(e) {
    Ti.API.error('支付错误: ' + e.message + ' 错误码: ' + e.code);
    alert('支付失败: ' + e.message);
});

// 打开卡片输入界面
function openCardEntry() {
    squarePay.startCardEntry();
}

// 发送Token到后端的示例函数
function sendTokenToBackend(token) {
    var xhr = Ti.Network.createHTTPClient({
        onload: function() {
            Ti.API.info('后端支付处理完成');
            alert('支付成功');
        },
        onerror: function() {
            Ti.API.error('后端处理失败');
            alert('支付失败,请重试');
        },
        timeout: 10000
    });
    xhr.open('POST', '你的后端支付接口地址');
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify({paymentToken: token}));
}

内容的提问来源于stack exchange,提问作者Ankush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:45:10