GopayCheckoutKit 1.2.0

GopayCheckoutKit 1.2.0

muhammad fauzi masykur 维护。



  • veritrans

Gopay Checkout iOS SDK

iOS库,通过Midtrans API启用GoPay结算流程。

SDK安装

手动安装

  1. 下载此存储库
  2. GopayCheckoutKit.xcframework拖到您的Xcode项目中
  3. 在弹出的菜单中,选择如有需要则复制项创建组,然后点击完成
  4. 构建并运行

cocoapods安装

如果您使用cocoapods,请将以下内容添加到您的.podfile

target 'MyApp' do
  pod 'GopayCheckoutKit'
end

然后运行pod install

SDK集成

对于Swift,您需要在您的AppDelegate.Swift文件以及您计划使用sdk方法的每个类中导入import GopayCheckoutKit

对于Objective-C,您需要在您的AppDelegate.h文件以及您计划使用sdk方法的每个类中导入import GopayCheckoutKit.h

您还需要设置您的应用程序URL方案,该方案用于让SDK自动返回关闭webview并导航到上一屏幕。例如,您的应用程序URL方案应该是类似于myapp://的模式,全部小写。要设置应用程序URL方案,有两种方法可供选择:

  1. 转到项目设置>信息,然后在URL类型部分添加一个新的URL方案。添加类似于myapp或您喜欢的任何名称,全部小写。

  2. 或者,您也可以进入您的info.plist文件并粘贴以下代码,您可以用您喜欢的名称重命名myapp

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myapp</string>
            </array>
        </dict>
    </array>

SDK 初始化

SDK初始化可以在您想开始使用SDK方法时进行。在这个例子中,我们将使用AppDelegate在application:didfinishlaunchingwithoptions:中设置SDK。

从iOS 13开始,Apple引入了SceneDelegate,因此如果您的应用程序目标包含iOS 13及以上版本,您还需要在SceneDelegate文件中的openURLContexts:方法添加handleCallbackUrl

重要提示

对于callbackUrl参数,请使用以下格式的应用程序URL方案myapp://home,通过在应用程序URL方案中添加home,如下面的代码所示:

Obj-C

AppDelegate文件

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...

[GPYClient  initWithMerchantServerURL:MERCHANT_SERVER_URL  merchantId:MERCHANT_ID callbackUrl:@"myapp://home" isLoggingEnabled:NO];

...
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    
    [GPYClient handleCallbackUrl:url];
    return YES;
}

SceneDelegate文件

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
    NSURL *url = URLContexts.allObjects.firstObject.URL;
    [GPYClient handleCallbackUrl:url];
}
Swift

AppDelegate 文件

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
	GPYClient.initWithMerchantServerURL(MERCHANT_SERVER_URL, merchantId: MERCHANT_ID, callbackUrl: "myapp://home", isLoggingEnabled: false)

	return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

	GPYClient.handleCallbackUrl(url)
	
    return true
}

SceneDelegate 文件

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
	if let url = URLContexts.first?.url {
  	 GPYClient.handleCallbackUrl(url)
	}
}

链接账户

Objective-C

GPYPartnerDetails *details = [[GPYPartnerDetails alloc]initWithPhoneNumber:@"8212345678" countryCode:@"62"];

[GPYClient linkAccountWithPaymentType:@"gopay" gopayPartnerDetails:details viewController:self completion:^(GPYLinkAccountResult * _Nullable result, NSError * _Nullable error) {
    if (result) {
        // do something
    } else{
        NSLog(@"error %@", error);
    }
}]; 

Swift

let partnerDetails = GPYPartnerDetails(phoneNumber: "812345678", countryCode: "62")
GPYClient.linkAccount(withPaymentType: "gopay", gopayPartnerDetails: partnerDetails, viewController: self) { (result, error) in
    if (result != nil){
        // do something
    } else {
        // error
    }
}

查询账户和支付信息

Objective-C

[GPYClient enquireAccountWithAccountID:ACCOUNT_ID completion:^(GPYAccountInfo * _Nullable result, NSError * _Nullable error) {
        if (result) {
            // do something
        } else{
            NSLog(@"error %@", error);
        }
    }];

Swift

GPYClient.enquireAccount(ACCOUNT_ID) { (result, error) in
 		if (result != nil) {
 		//do something
       	} else {
       	// error
        }
}

禁用/解除账户关联

Objective-C

[GPYClient disableAccountWithAccountID:ACCOUNT_ID completion:^(GPYDisableAccountResult * _Nullable result, NSError * _Nullable error) {
        if (result) {
         // do something
        } else {
            NSLog(@"error %@", error);
        }
    }];

Swift

GPYClient.disableAccount(withAccountID: ACCOUNT_ID) { (result, error) in
	if (result != nil){
     // do something
    } else {
     // error
    }
}

创建交易

Obj-C

GPYGopayDetails *gopayDetails = [[GPYGopayDetails alloc]initWithAccountID:ACCOUNT_ID paymentOptionToken:PAYMENT_OPTION_TOKEN];


GPYTransactionDetails *transDetails = [[GPYTransactionDetails alloc]initWithGrossAmount:@100 orderID:ORDER_ID currency:@"IDR"];

GPYCustomerDetails *customerDetails = [[GPYCustomerDetails alloc]initWithPhoneNumber:@"08123456789" firstName:@"fauzi" lastName:nil email:nil];

GPYItemDetails *itemDetails = [[GPYItemDetails alloc]initWithIthItemID:@"itemId1" name:@"one piece t-shirt" price:@100 quantity:@1 category:@"clothing"];

[GPYClient createTransactionWithPaymentType:@"gopay" viewController:self gopayDetails:gopayDetails transactionDetails:transDetails customerDetails:customerDetails itemDetails:@[itemDetails] completion:^(GPYTransactionResult * _Nullable result, NSError * _Nullable error) {
    
    if (result) {
        // do something
        // Transaction status will be set to "Pending", To actually know the latest transaction status, you should hit get transaction API
    } else {
        NSLog(@"error transaksi %@", error);
    }
}];

Swift

let gopayDetais = GPYGopayDetails(accountID: ACCOUNT_ID ?? "", paymentOptionToken: PAYMENT_OPTIONS_TOKEN ?? "")
let transDetails = GPYTransactionDetails(grossAmount: 200, orderID: "abc111", currency: "IDR")
let cusDetails = GPYCustomerDetails(phoneNumber: "088888888", firstName: "fauzi", lastName: "cihuy", email: "[email protected]")
let itemDetails1 = GPYItemDetails(ithItemID: "aabb1", name: "one piece t-shirt", price: 100, quantity: 1, category: "shirts")
let itemDetails2 = GPYItemDetails(ithItemID: "aabb2", name: "one piece pants", price: 100, quantity: 1, category: "pants")

GPYClient.createTransaction(withPaymentType: "gopay", viewController: self, gopayDetails: gopayDetais, transactionDetails: transDetails, customerDetails: cusDetails, itemDetails: [itemDetails1, itemDetails2]) { (result, error) in
    if (result != nil) {
     	// do something
    } else {
    	// error
    }
}

Gopay 结账响应处理器

此响应处理器用于帮助处理和应对直接调用伙伴API时遇到的webview。

链接账户

Obj-C

[GPYCheckoutProcessor processAccountLinkingWithResponse:linkingResponse viewController:viewController completion:^(GPYLinkAccountResult * _Nullable result, NSError * _Nullable error) {
	if (result) {
		//do something
    } else{
    	// error
    }
}];

Swift

GPYCheckoutProcessor.processAccountLinking(with: RESPONSE, viewController: self) { (result, error) in
    if (result != nil){
        // do something
    } else {
        // error
    }
}

创建交易

Obj-C

[GPYCheckoutProcessor processCreateTransactionWithResponse:transactionResponse viewController:viewController completion:^(GPYTransactionResult * _Nullable result, NSError * _Nullable error) {
	if (result) {
       // do something
    } else {
       // error 
    }
}];

Swift

GPYCheckoutProcessor.processCreateTransaction(with: TRANSACTION_RESPONSE, viewController: self) { (result, error) in
    if (result != nil){
        // do something
    } else {
        // error
    }
}