Latest 1.0.2
Homepage https://github.com/homedirectvn/PayDirectSMSCharging-iOS
License MIT
Platforms ios 6.0, requires ARC
Authors

Other language: English

Giới thiệu

PayDirectSMSCharging cung cấp cách thức đơn giản nhất để tích hợp thanh toán cho sms qua đầu số 9029 vào ứng dụng của bạn.

PaySMSCharging iOS SDK hỗ trợ iOS từ 6.0 trở lên

Yêu cầu

Môi trường phát triển

PaySMS Version Minimum iOS Target Notes
1.0.0 6.0 Xcode 6.1 is required. Support armv7, armv7s and arm64 architectures (+ i386 for the simulator)

Tương thích

PayDirectSMSCharging iOS SDK hỗ trợ tất cả iOS từ 6.0 trở lên. Hỗ trợ armv7, armv7s and arm64 architectures (+ i386 cho simulator).

Xcode

Chúng tôi sử dụng Xcode 7.3 để viết project demo và SDK. Bạn có thể gặp một số lỗi nếu mở trên những phiên bản Xcode cũ hơn. Đó là lý do vì sao chúng tôi khuyên bạn sử dụng phiên bản mới nhất (non-beta) khả dụng.

Bắt đầu với project Demo

Bạn cần clone hoặc download repository này về máy của bạn.

Chạy project. Ứng dụng mô tả cho bạn khả năng cũng như cách tích hợp của PaySMS.

4 bước để tích hợp với PayDirectSMSCharging

1. Đăng ký tài khoản (Tạo MO Code)

Việc đầu tiên bạn cần làm là đăng ký tài khoản khách hàng cho PaySMSCharging. Hãy liên hệ qua Email hoặc Skype (kythuat_paydirect). Sau khi có tài khoản, bạn có thể truy cập vào PayDirectSMSCharging dashboard và tích hợp PayDirectSMSCharging với ứng dụng của bạn.

2. Tải SDK

Có rất nhiều cách để tải PayDirectSMSCharging vào project Xcode. Bạn có thể dùng CocoaPods hoặc tự tay tải và thêm framework cùng các thư viện liên quan vào project

Cocoapod (Coming soon)

CocoaPods là cách nhanh nhất để tải và chạy PayDirectSMSCharging trên ứng dụng iOS. Chỉ cần thêm dòng dưới đây vào Podfile và gọi lệnh pod install hoặc pod update

pod 'PayDirectSMSCharging'

Tải PayDirectSMSCharging

Bạn có thể tải iOS SDK ngay từ repo này. Giải nén PayDirectSMSCharging, kéo PayDirectSMSCharging và các framework kèm theo vào project của bạn

3. Tích hợp SDK

Frameworks & Dependencies

PayDirectSMSCharging SDK phụ thuộc vào một số framework khác. Bạn cần thêm chúng vào project của mình. Cụ thể thêm những framework sau:

Framework
SystemConfiguration.framework
CoreMobileServices.framework
CoreTelephony.framework

4. Bắt đầu code

4.1. Import SDK

SDK được import thông qua class PayDirectSMSCharging.h.

#import <PayDirectSMSCharging/PayDirectSMSCharging.h>

4.2. Khởi tạo PDSMSChargingClient

Khi bạn cần sử dụng đến PaySMS SDK, bạn cần khởi tạo một PDSMSChargingClient

    NSString* moCode = @"YOUR_APP_MO_CODE";
    NSString* accountName = @"USER_ACCOUNT_NAME_OR_ID";
    paySMSChargingClient = [[PDSMSChargingClient alloc] initWithMOCode:moCode
                                            accountName:accountName];
    paySMSChargingClient.dataSource = self;

Giá trị accountName nên đặt là gì?

  • Nếu game/app của bạn có user, accountName nên được đặt với giá trị bằng với user id trong hệ thống của bạn.
  • Nếu game/app của bạn không có user, accountName nên được đặt theo device id.
  • accountName chỉ được bao gồm những ký tự từ a-z, A-Z, và 0-9

4.3. Cấu hình/lựa chọn mã dịch vụ Telecom

  • PayDirectSMSCharging cho phép sử dụng nhiều các mã tin nhắn khác nhau như VTC (cho tất cả các mạng Mobilfone, Vinaphone, Viettel), BX (cho mạng Mobilfone và Vinaphone), QK (cho Viettel). Mặc định chúng tôi chọn VTC là mã dịch vụ tin nhắn. Tuy nhiên, bạn có thể lựa chọn mã dịch vụ nào cho game/app của bạn bằng việc phương thức - (NSString * _Nullable)partnerCodeForAmount: (PDSMSAmount * _Nonnull)amount được định nghĩa trong PDSMSChargingClientDataSource:
- (NSString * _Nullable)partnerCodeForAmount:(PDSMSAmount * _Nonnull)amount {
    // You can custom telecom service code here
    // Ex: For Mobifone, there are VTC and BX codes. The default value is VTC,
    // but you can choose the BX code by "return" BX value here.
    if (amount.provider == kPaySMSProviderMobifone) {
        return @"BX";
    }
    // It is also you can choose BX as partner Code for Vinaphone
    else if (amount.provider == kPaySMSProviderVinaphone) {
        // For BX, there is no amount with value == 100K, so,
        // if the amount == 100K, and you choose "BX", it will raise the Assertion
        return @"BX";
    } else if (amount.provider == kPaySMSProviderViettel) {
        // For BX, there is no amount with value == 100K, so,
        // if the amount == 100K, and you choose "BX", it will raise the Assertion
        return @"QK";
    }

    // When this function return null or the listener is nil/NULL,
    // it will using  QK , BX as default for Viettel and Vinaphone/Mobifone partner code
    return nil;
}

4.4. Tạo cú pháp SMS và gửi SMS tới đầu số 9029 (thanh toán qua đầu số 9029)

4.1. Sử dụng UI có sẵn hỗ trợ trong PayDirectSMSCharging SDK

Với phương pháp này, người dùng có thể chọn nhà mạng (telecom) và mệnh giá nạp (par value) cho giao dịch nạp tiền (như hình dưới)

SMS Charging by UI

Để tiến hành thanh toán, bạn cần:

  • Tạo một PaySMSController
    // the paySMSChargingClient you already inited above 
    PaySMSController* paySMSController = [[PaySMSController alloc]  initWithSMSClient:paySMSChargingClient];
    paySMSController.delegate = self;
    // implement PaySMSControllerDelegate for custom the telecom and par value
    [self presentViewController:paySMSController
                       animated:YES
                     completion:nil];                     
  • Để cấu hình/lựa chọn nhà mạng hoặc mệnh giá nạp tiền, bạn có thể implement các hàm được mô tả trong PDSMSChargingControllerDelegate

Chọn nhà mạng: Bạn cần implement hàm (NSArray*)supportedProviders: (PaySMSController * _Nonnull)viewController được mô tả trong PaySMSControllerDelegate để chọn lựa nhà mạng mà game/app hỗ trợ. Ví dụ dưới đây cho phép bạn chỉ cho người dùng chọn Mobilfone và Vinaphone. Chỉ cần không implement hàm này hoặc return giá trị nil/null để game/app cho phép người dùng chọn lựa tất cả các nhà mạng.

/**
 *  This function for developer can set the list of telecom, that the game/app supported
 *  This function is optional, and if the function return null or an empty array list,
 *  the SDK will show all Providers
 *
 *  @param viewController The PaySMSController
 */
- (NSArray*)supportedProviders:(PaySMSController * _Nonnull)viewController {
    //this is an example when you want user choose Mobilfone or Vinaphone only
      NSArray* supportedProviders = @[@(kPaySMSProviderMobifone),
                                    @(kPaySMSProviderVinaphone)];
      return supportedProviders;
}

Chọn mệnh giá: Bạn cần implement hàm availableFairValuesForProvider:inController: được mô tả trong PDSMSChargingControllerDelegate để chọn lựa mệnh giá mà game/app hỗ trợ. Ví dụ dưới đây cho phép bạn chỉ cho người dùng chọn mệnh giá 1K, 5K và 100K. Chỉ cần không implement hàm này hoặc return giá trị nil/null để game/app cho phép người dùng chọn lựa tất cả các mệnh giá hỗ trợ bởi .

/**
 *  This function for developer can set the list of fair values for providers
 *  This function is optional, and if the function return null or an empty array list,
 *  the SDK still show all available fair values
 *
 *  @param viewController The PDVoucherUseCardViewController its delegate of fail
 *  @param result         The selected (and possibly newly created) tokenized payment information.
 */
- (NSArray*)availableFairValuesForProvider:(PDSMSProvider)provider
                              inController:(PDSMSChargingController * _Nonnull)viewController {

    // This is the way you want user to pick some par values only
    // An example with Viettel
    if (provider == kPDSMSProviderViettel) {
        return @[@(kPDSMSParValue1K),
                 @(kPDSMSParValue5K),
                 @(kPDSMSParValue10K)];
    }

    // return nil/NULL/Empty array, the SDK will allows user to choose all par values
    return nil;
}
  • Đối với phương pháp sử dụng giao diện, bạn không cần phải viết code để người dùng chọn lựa nhà mạng hoặc mệnh giá nạp. Để bắt các sự kiện của quá trình nạp tiền qua SMS, bạn cần implement một số hàm sau:

Sự kiện người dùng huỷ thanh toán

/**
 *  Informs the delegate when the user has decided to cancel out of the Pay by SMS form.
 *
 *  @param viewController The PaySMSController view controller informing its delegate of failure or cancelation.
 */
- (void)userDidCancel:(PDSMSChargingController * _Nonnull)viewController {
    [viewController dismissViewControllerAnimated:YES
                                       completion:nil];

//    [viewController dismissViewControllerAnimated:YES
//                                       completion:^{
//                                           [self.alert cancelAlertWithTitle:nil
//                                                                    message:NSLocalizedString(@"User did cancel", @"User did cancel")
//                                                                cancelTitle:NSLocalizedString(@"OK", @"OK")
//                                                              cancelHandler:^{
//                                                              }];
//                                       }];
}

Sự kiện SMS đã được gửi thành công

/**
 *  Informs the delegate when the SMS did send
 *
 *  @param viewController The PaySMSController view controller informing its delegate of failure or cancelation.
 */
- (void)smsDidSend:(PDSMSChargingController * _Nonnull)viewController {
    [self.alert cancelAlertWithTitle:nil
                             message:NSLocalizedString(@"The SMS did sent", @"The SMS did sent")
                         cancelTitle:NSLocalizedString(@"OK", @"OK")
                       cancelHandler:^{}];
}

Sự kiện SMS không thể gửi được

/**
 *  Informs the delegate when the sms failed
 *
 *  @param viewController The PaySMSController view controller informing its delegate of failure.
 */
- (void)smsFailed:(PDSMSChargingController * _Nonnull)viewController {
    [self.alert cancelAlertWithTitle:nil
                             message:NSLocalizedString(@"Can not send SMS", @"Can not send SMS")
                         cancelTitle:NSLocalizedString(@"OK", @"OK")
                       cancelHandler:^{}];
}

4.2. Sử dụng PaySMSChargingClient để tự tạo cú pháp SMS dựa trên thông số nhà mạng (PDSMSProvider) và mệnh giá thẻ (PDSMSParValue)


    // Init an amount to charge by PaySMS 
    PaySMSAmount* amount = [[PaySMSAmount alloc] init];
    // Set your telecom: Mobilfone/Vinaphone or Viettel. It should be the user's telecom.
    amount.provider = kPaySMSProviderMobifone;
    // The par value to charge by PaySMS: 1K, 2K, 3K, 4K, 5K, 10K, 15K, 20K, 30K, 40K, 50K, 100K
    amount.parValue = kPaySMSParValue1K;

    // Generate the SMS Syntax 
    NSString* smsSyntax = [paySMSChargingClient smsSyntax:amount];

    // In case the par value is not supported by telecom, the smsSyntax returned will be nil
    if (smsSyntax) {
        // It is an example for you can use 'smsSyntax', Alert to user 
        NSString * message = [NSString stringWithFormat:NSLocalizedString(@"The syntax is: %@. Do you want to send to the provider?", @"The syntax is: "%@". Do you want to send to the provider?"),smsSyntax];
        [self.alert alertWithTitle:nil
                           message:message
                            titles:@[NSLocalizedString(@"Yes", @"Yes"),
                                     NSLocalizedString(@"Cancel", @"Cancel")]
                          handlers:@[^{
            // And send SMS by using MFMessageComposeViewController
            if ([MFMessageComposeViewController canSendText]) {
                MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
                messageController.messageComposeDelegate = self;
                [messageController setRecipients:@[@"9029"]];
                [messageController setBody:smsSyntax];

                [self presentViewController:messageController
                                   animated:YES
                                 completion:nil];
            }
        }, ^ {

        }]];
    }

Xin chúc mừng. Bạn đã tích hợp xong cơ bản PayDirectSMSCharging

Hỗ trợ

Vui lòng liên hệ với chúng tôi về những vấn đề chung.

Về những vấn đề kỹ thuật

Trong trường hợp bạn có những vấn đề về kỹ thuật, vui lòng liên hệ với đội kỹ thuật của chúng tôi.
Vui lòng cung cấp những thông tin sau khi liên hệ, chúng sẽ giúp chúng tôi hỗ trợ bạn nhanh hơn rất nhiều.

Latest podspec

{
    "name": "PayDirectSMSCharging",
    "version": "1.0.2",
    "summary": "PayDirectSMSCharging",
    "homepage": "https://github.com/homedirectvn/PayDirectSMSCharging-iOS",
    "license": "MIT",
    "authors": {
        "Homedirect": "[email protected]"
    },
    "platforms": {
        "ios": "6.0"
    },
    "source": {
        "git": "https://github.com/homedirectvn/PayDirectSMSCharging-iOS.git",
        "tag": "1.0.2"
    },
    "vendored_frameworks": "Framework/PayDirectSMSCharging.framework",
    "resources": "Framework/PayDirectSMSCharging.bundle",
    "requires_arc": true
}

Pin It on Pinterest

Share This