代码之家  ›  专栏  ›  技术社区  ›  Maneesh M

如何在iOS应用程序中集成Atom支付网关?

  •  -1
  • Maneesh M  · 技术社区  · 6 年前

    我不熟悉带有扩展的静态库。a、 我正在尝试将atom技术支付网关安装到iOS应用程序。它们提供2个文件1。libAtomPayLib(现场)。一 2、libAtomPayLib(UAT)。一 以及非常简短的文档

    根据他们的文档,我已经添加了。a要项目的文件,“添加了其他链接标志”“$(other\u LDFLAGS)-ObjC”。

    文档中有一点我不理解

    在构建阶段添加捆绑资源lib,选择项目目标(复制捆绑资源)。

    以下代码来自文档

        #import <UIKit/UIKit.h>
    #import "nb.h"
    #import "card.h"
    #import "NSString+DES.h"
    #import "NSData+DES.h"
    
    @interface ViewController : UIViewController <NSXMLParserDelegate,nbDelegate,cardDelegate>
    {
    NSXMLParser *parser;
    }
    @property (weak, nonatomic) IBOutlet UIButton *InitiateRequest;
    @property (nonatomic,retain) NSXMLParser *parser;
    
    -(IBAction)callVC:(id)sender;//Call for all transaction
    
    
    @end
    

    我尝试在viewcontroller中使用此代码。h文件,但我收到错误“nb.h未找到” 我猜这些标题来自库,如果它与项目链接正确的话。h将随处可用。我还添加了文档详细信息

    ATOM Mobile SDK集成

    Atom mobile集成旨在使您能够通过移动应用程序处理支付。

    集成类型:-非无缝:

    安装程序

    •   Create new Group in your project hierarch & add all the files from “payAtom” in it.
    •   Select your Project from Left Panel
    •   Go to targets tab & select the application
    •   Go to Build Setting & select Basic & Combined Tabs
    •   Add the following property as shown below
    

    如果找不到其他链接器标志,则可以执行以下步骤

    •   Select the project file from the project navigator on the far left side of the window.
    
    •   Select the target for where you want to add the linker flag.
    
    •   Select the "Build Settings" tab
    
    •   Choose "All" to show all Build Settings.
    
    •   Scroll down to the "Linking" section, and double-click to the right of where it says "Other Linking Flags".
    •   A box will appear, Click on the "+" button to add a new linker flag.
    
    •   Type "$(OTHER_LDFLAGS) -ObjC" (no quotes) and press enter.
    
    
    
    
    
    •   Add Bundle ”resourcesLib” in Build Phases selecting your project target(Copy Bundle Resources).
    

    集成:

    •   Merchant will design a screen wherein he will accept all the required fields including the bank detail, payment options and card details.
    •   Pass the data to Library as follows in the same format:
    

    ViewController。h文件

    #import <UIKit/UIKit.h>
    #import "nb.h"
    #import "card.h"
    #import "NSString+DES.h"
    #import "NSData+DES.h"
    
    @interface ViewController : UIViewController <NSXMLParserDelegate,nbDelegate,cardDelegate>
    {
    NSXMLParser *parser;
    }
    @property (weak, nonatomic) IBOutlet UIButton *InitiateRequest;
    @property (nonatomic,retain) NSXMLParser *parser;
    
    -(IBAction)callVC:(id)sender;//Call for all transaction
    
    
    @end
    

    ViewController。m文件

    #import "ViewController.h"
    #import "nb.h"
    #import "card.h"
    
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    @synthesize parser;
        •   (void)viewDidLoad { [super viewDidLoad];
    }
    
        •   (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    
    
    
    
    
    
    -(IBAction)callVC:(id)sender
    {
    
    nb *netB = [[nb alloc] init]; netB.myDelegate = self; netB.loginid=@"459"; netB.txnscamt=@"0"; netB.loginid=@"459"; netB.password=@"Test@123"; netB.prodid=@"NSE"; netB.txncurr=@"INR"; netB.clientcode=@"001"; netB.custacc=@"100000036600"; netB.amt=@"100.000"; netB.txnid=@"9Q6";//unique each time
    netB.date=@"23/08/2010%2011:57:00";//unique each time netB.bankid=@"2001"; netB.ru=@"https://paynetzuat.atomtech.in/paynetz/param"; [self presentViewController:netB animated:YES completion:nil];
    }
    
    
    -(void)secondviewcontrollerDissmissed:(NSString *)stringToFirst
    {
    NSString *getResult; getResult = stringToFirst;
    NSLog(@"received---->%@",getResult); //This will return status success or Fail of Transaction
    }
    
    @end
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Maneesh M    6 年前

    这是atom支付网关的一个问题,他们应该提供。h文件以及。文件,但在下载的文件中不可用。因此,我使用了另一种使用web视图的解决方案来集成atom支付网关。我已经为获取付款url创建了一个类。此方法使用网站中用于同一项目的web支付网关。

    import Foundation
    import Alamofire
    import SwiftyXMLParser
    
    class PaymentData {
    
        var totalPrice:String
        var taxId:String
        var userName:String
        var email:String
        var mobile:String
        var userId:String
        var currentDateTimeString:String
        init(totalPrice:String) {
    
            let time = Date().timeIntervalSince1970
            let taxId = "WVC"+String(time)
            let userId = UserDefaults.standard.string(forKey: "UserId")
            let name = UserDefaults.standard.string(forKey: "full_name")
            let phone = UserDefaults.standard.string(forKey: "phone")
            let email = UserDefaults.standard.string(forKey: "email")
    
            self.totalPrice = totalPrice
            self.taxId = taxId
            self.userId = userId!
            self.email = email!
            self.mobile = phone!
            self.userName = name!
            self.currentDateTimeString = NSDate().getStringWith(format: "dd/MM/yyyy")!
    
        }
    
        func getVenderUrl()->String{
            // Create vender url using user details
            var vVenderURL:String = "https://payment.atomtech.in/paynetz/epi/fts?login=test&pass=test@123&ttype=NBFundTransfer&prodid=test&amt=" + "\(totalPrice)"+"&txncurr=INR&txnscamt=0&ru=https://www.test.in/payment-success&clientcode=lisas00940&txnid="+"\(taxId)"+"&date="+"\(currentDateTimeString)"+"&udf1="+"\(userName)"+"&udf2="+"\(email)"+"&udf3="+"\(mobile)"+"&udf4=Bangalore&custacc="+"\(userId)"+"";
    
            vVenderURL = vVenderURL.replacingOccurrences(of: " ", with: "%20")
            print(vVenderURL)
            return vVenderURL
    
        }
    
        func getRedirectUrl(callBack:@escaping (URL)->Void){
            // get url to load in webview
            var xmlURL:String = ""
            var xmlttype:String = ""
            var xmltoken:String = ""
            var xmltempTxnId:String = ""
            var xmltxnStage:String = ""
    
    
            let headers: HTTPHeaders = [
                "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
                "Accept": "application/json"
            ]
    
            // Call api for get payment url to load in webview
            Alamofire.request(getVenderUrl(), method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers)
                .responseString { response in
    
                    var statusCode = response.response?.statusCode
    
                    switch response.result {
                    case .success:
                       // parsing xml data recieved from response, and extracting element required for generating the payment url
                        if let string = response.result.value {
                            print("XML: \(string)")
                            let xml = try! XML.parse(string)
                           print(xml["MMP","MERCHANT","RESPONSE"])
                            xmlURL = xml["MMP","MERCHANT","RESPONSE","url"].text!
                            let params = xml["MMP","MERCHANT","RESPONSE","param"]
    
    
                            for param in params {
    
                                if (param[0].attributes["name"])  == "ttype" {
                                    xmlttype = param.text!
                                }
                                if (param[0].attributes["name"])  == "tempTxnId" {
                                    xmltempTxnId = param.text!
                                }
                                if (param[0].attributes["name"])  == "token" {
                                    xmltoken = param.text!
                                }
                                if (param[0].attributes["name"])  == "txnStage" {
                                    xmltxnStage = param.text!
                                }
    
                            }
    
                            // creating payment url from extracted data
                            var  Atom2Request:String = "\(xmlURL)" + "?ttype=" + "\(xmlttype)" + "&tempTxnId=" + "\(xmltempTxnId)" + "&token=" + "\(xmltoken)" + "&txnStage=" + "\(xmltxnStage)";
                            Atom2Request = Atom2Request.replacingOccurrences(of: " ", with: "%20") //(" ", "%20");
                            print("ATOM 2nd Request URl" + "\(Atom2Request)")
                            callBack(URL.init(string: Atom2Request)!)
    
    
                        }
                    case .failure(let error):
                        statusCode = error._code // statusCode private
                        print("status code is: \(String(describing: statusCode))")
                        print(error)
                    }
            }
    
        }
    }
    

    此类帮助创建用于为atom支付网关生成url的数据,下一步是将此url加载到web视图

    创建视图控制器并在其中添加web视图,然后添加以下代码

    @IBOutlet weak var paymentWebView: UIWebView!
        var paymentAmount:String?
        override func viewDidLoad() {
    
            super.viewDidLoad()
            self.title = "Payment Gateway"
            if paymentAmount != nil {
    
                let paymentData = PaymentData.init(totalPrice: paymentAmount!)
                paymentData.getRedirectUrl(callBack:{ url in
    
                    let request = URLRequest(url: url)
                    self.paymentWebView.loadRequest(request)
    
    
                })
    
            }
    
        }
    
        2
  •  1
  •   Rajshekhar Sahu    4 年前

    在Swift中实现Atom支付网关非常简单。。

    只需按照简单的步骤操作即可。

    1. 从以下链接下载SDK。 https://www.atomtech.in/help-resource/payment-gateway-integration-kits

    2. 解压缩文件。

    3. 运行–testSample。iOS设备中的Xcode中的Xcode proj。不要担心代码在目标C中。

    4. 创建您自己的Swift项目。

    5. 在项目中创建一个包含的文件夹。在include folder下创建另一个嵌套文件夹AtomPayLib。

    6. 拖动所有头文件(.h),包括–resourceLib。将testSample项目绑定到您的项目文件夹AtomPayLib中。不要忘记勾选目标的复选框。

    7. 只需为您的项目创建任何Objective C ViewController类。Xcode将要求您将桥接头添加到项目中。选择“是”。添加桥接标头后,删除新创建的目标类。

    8. 在桥接标题中添加以下两行。 #导入“nb.h” #导入“卡片h”

    9. 在您的–AtomPay–按钮中,您可以在项目中的任何地方使用该按钮,编写以下代码。 委托方法也写在它的下面。不要忘记添加方法。还将一致性“nbDelegate”添加到ViewController类中。

      //MARK: Atom Payment
      
      @IBAction func atomPay(_ sender: Any) 
      {
          var netB = nb()
      
          netB.discriminator = "All"
      
          netB.myDelegate = self
      
          netB.merchantId = "197"
      
          netB.txnscamt = "0"
      
          netB.loginid = "197"
      
          netB.password = "Test@123"
      
          netB.txncurr = "INR"
      
          netB.clientcode="007"
      
          netB.custacc="100000036600"
      
          netB.amt = "100.00"
      
          netB.txnid = "013";
      
          netB.date = "23/08/2019 11:57:00"
      
          netB.bankid = "2001"
      
          netB.signatureRequest = "KEY123657234"
      
          netB.signatureResponse = "KEYRESP123657234"
      
      
      
          netB.prodid = "NSE"
      
          netB.isLive = false
      
          netB.ru = "https://paynetzuat.atomtech.in/mobilesdk/param"
      
      //    netB.customerName = "ABC";
      //    netB.customerEmailID = "abc@gmail.com";
      //    netB.customerMobileNo = "5555555555";
      //    netB.billingAddress = "Kolkata";
      //    netB.optionalUdf9 = "Peter";
      
      self.present(netB, animated: true) {
          print("Completed...")
      }
      

      }

      func secondviewcontrollerDissmissed(_ stringForFirst: String!, 
      withResponseKeys ResponseKeyArray: NSMutableArray!, andResponseValues 
      ResponseValueArray: NSMutableArray!) {
      
      print("received---->%@",stringForFirst!)
      
      
      let deadlineTime = DispatchTime.now() + .seconds(5)
      DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
          print("test")
          //code to be executed on the main queue after delay
      }
      

      }

    10. 在iOS设备上运行应用程序。

    干杯

        3
  •  0
  •   battlmonstr    6 年前

    通常,静态库(如libAtomPayLib.a)只包含代码,而不包含UI资源(如图像、声音、字体、配置文件等)。解决这个问题的一种方法是提供一个资源包。捆绑包实际上是一个包含各种文件的目录,但在macOS上(使用Finder之类的程序),它看起来像一个文件(例如 资源SLIB。捆 )。如果只是将这样的文件添加到项目中,Xcode(默认情况下)实际上会将其添加到“复制捆绑资源”阶段。您可以通过转到目标、选择目标、打开“构建阶段”和展开“复制捆绑资源”来检查这一点。

    xcode screenshot

    构建应用程序后,您可以通过展开“产品”组来确保捆绑包已被复制,右键单击您的示例。应用程序“在Finder中显示”,然后右键单击该文件并“显示包内容”。您应该看到应用程序中复制了哪些文件,包括资源包。

    如果向项目中添加一些“test.a”静态库文件,默认Xcode行为是将其添加到“Linked Frameworks and Libraries”列表中。您可以通过转到目标、选择目标、打开“常规”并向下滚动到“链接的框架和库”来验证它。

    xcode screenshot 2