适用于ios应用程序的CCAvenue网关集成套件

嗨,
我开发了一个需要支付网关的应用程序。 我已经在“Paypal”上工作了。 这是成功的,现在我需要整合另一个“ccavenue”的支付网关。 任何人都可以帮助我如何整合那个?
谢谢。

我正在寻找SDK,因为他们已经提到IOS / Android / Windows SDKs可用。 但没有find任何东西。 最后,我起草了一封电子邮件给CCAvenue技术。 支持团队。

然后和他们打过电话,他们说:

  • 我们需要有实际的商家帐户来获得login凭据来下载SDK。
  • 他们不提供任何沙箱testing环境。
  • 过程是,他们将validation商家的网站和其他input的详细信息的商家帐户。
  • 一旦他们完成validation,他们会发送一封激活邮件给商家的注册邮箱。
  • 一旦商家激活他的帐户,他将获得login凭据下载SDK。
  • 有两种types的订阅:自由和特权。(请参阅他们的网站了解更多)
  • 使用SDK,如果商家有免费计划,则只支持INR和USD货币。 如果商家想要添加对其他货币的支持,那么他将不得不要求CCAvenue的相同。 CCAvenue团队将与相关银行核实,如果银行允许交易,则可以通过支付R来激活新币种。 5000每个。
  • 如果商家有特权的计划,那么随着INR,商家可以从支持的27种货币中select任何4种货币。 如果商家想要更多,那么他可以通过支付卢比购买货币。 5000每个。

由于CCAvenue显示服务器端选项,我们需要连接到web视图并加载与iphone屏幕兼容的ccavenue网关。 在我们的应用程序中,我们需要做如下的小事情

首先创build与您的ccavenue网关相关的html文件和参数

<html> <body> <form name='form2' method='post' action='UR URL HERE'> <input type="text" name='Merchant_Id'><br> <input type="text" name='Amount'><br> <input type="text" name='Order_Id'><br> <input type="text" name='Redirect_Url'><br> <input type="text" name='Checksum'><br> <input type="text" name='billing_cust_name'><br> <input type="text" name='billing_cust_address'><br> <input type="text" name='billing_cust_address'><br> <input type="text" name='billing_cust_tel'><br> <input type="text" name='billing_cust_email'><br> <input type="text" name='delivery_cust_name'><br> <input type="text" name='delivery_cust_address'><br> <input type="text" name='delivery_cust_tel'><br> <input type="text" name='delivery_cust_notes'><br> <input type="text" name='Merchant_Param'><br> </form> </body> 

之后,在你的屏幕上加载网页视图

  NSURL *url = [NSURL URLWithString: @"https://www.ccavenue.com/shopzone/cc_details.jsp"]; webView.delegate = self; webView.scalesPageToFit = YES; NSString *strUsername = [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]; NSString *body = [NSString stringWithFormat: @"Merchant_Id=%@&Amount=%@&Order_Id=%@&Redirect_Url=%@&Checksum=%@&billing_cust_name=%@&billing_cust_address=%@&billing_cust_country=%@&billing_cust_tel=%@&billing_cust_email=%@&delivery_cust_name=%@&delivery_cust_address=%@&delivery_cust_tel=%@&delivery_cust_notes=%@&Merchant_Param=%@",@"XXXXX",@"10",@"123456",@"http://us2guntur.com/us2guntur/CCAvenueredirecturl.jsp",@"1234567890",@"Test",@"Hyderabad",@"India",@"1357896437",@"Test1000",@"Guntur",@"234567896",@"",@""]; NSLog(@"%@",body); NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]]; [webView loadRequest: request]; 

CCAvenue的集成页面仅显示服务器端选项。

所以,你将不得不自己实现这个。 您可以将CCAvenue的支付网关集成到您的服务器上,并在设备的Web视图中打开付款页面。 由于您可以控制服务器端实施,因此您可以通过Cookie在OAuth中完成付款确认的详细信息。


CCAvenue支付网关集成在Swift 3中


首先检查这个链接“ https://www.ccavenue.com/inapp_payments.jsp ”进行整合,CCAvenue提供了什么。

请按照以下步骤通过非无缝方法在移动应用程序上实现支付网关:

1.请确保您的公共/传出IP在CCAvenue的结尾已被列入白名单。

2.将GetRSA和ccavResponseHandler文件放在您的服务器上。

3.在您的应用程序中,提及服务器上保存的GetRSA文件的path

4.从您的服务器上保存的应用程序中调用GetRSA以获取RSA公钥。

5.使用获取的公钥商家将encryption参数(金额,货币)。 要encryptionRSA密钥,请执行以下步骤(从步骤1到步骤8)。

步骤1:您必须从CCAvenue网站下载CCAvenue SDK并下载,您必须使用商家帐户凭证login。

第二步:login后,下载SDK进入资源 – >移动集成套件。 请参阅以下屏幕截图。

在这里输入图像说明

第三步:下载,点击下载集成套件,如下图所示。 下载之前select无缝或非无缝。 (查看CCAvenue提供的文档中的详细信息)

无缝:如果商家configuration为无缝,则在商家页面上接受包括付款选项的所有结算/运输详情。

非无缝:如果商家configuration为非无缝,则在CCAvenue的移动页面上接受包括付款选项的帐单/运送详细信息。

在这里输入图像说明

第四步:下载SDK套件后,必须将文件夹“OpenSSL”复制到您的项目中,否则您也可以使用pods安装“openssl”。

第五步:在Openssl / openssl-1.0.1i-iOS文件夹下会find2个文件夹include和lib。 同样在项目的build立设置下去searchpath – >库,searchpath,删除提供的用户/testing/桌面/ ….和拖放include /和lib /这两个文件夹。 你也必须为Paths-> User Header Search Paths做同样的事情。

Stop6:复制这两个文件(你下载的SDK中可用的文件)给你项目“CCTOOL&BASE64。

第七步:使用桥接头导入“CCTool.h”。

Step8:最后使用“CCTool”文件中的方法encryption你的RSA密钥。

6.对参数进行encryption后,您将通过浏览器(embedded式web视图)post将encryption值与其他收费运输详细信息(如果有)一起发送到CCAvenue服务器。 (如果您不能将所有代码从objective-c转换为swift,请使用objective-c文件CCWEBVIEWCONTROLER)

7.用户将被redirect到CCAvenue的结算发货页面,在那里他将填写所需的详细信息,包括付款选项。

8.填写完所需资料后,他将被redirect到他将授权自己的银行页面。

9.授权后,他将被redirect到CCAvenue,一个响应,即成功或失败将被发送到在注册期间configuration为返回url的商家页面。

10.然后您应该解密响应,然后可以parsing该响应以获取事务状态。

注意 :

  • 访问代码和订单ID应该与在RSA呼叫期间传递的相同。

  • 订单ID应该始终是唯一的

  • 事务处理应在收到RSA密钥后的60秒内打中CCAvenue服务器。

  • 发布在ccavResponseHandler文件中的工作密钥应该对应于发布到CCAvenue的访问代码。

我遵循了Sagar Sukode的所有步骤,并成功实现了CCAvenue的成功。

如果有人需要在swift 2.3中使用CCWEBVIEWCONTROLER:

在ViewDidLoad中:

  let rsaKey = getRsaKeyForCCAvenue() //Encrypting Card Details let myRequestString = "amount=\(AMOUNT)&currency=\(CURRENCY)" let ccTool = CCTool() var encVal = ccTool .encryptRSA(myRequestString, key: rsaKey) let charset = NSCharacterSet(charactersInString: "!*'();:@&=+$,/?%#[]").invertedSet encVal = encVal.stringByAddingPercentEncodingWithAllowedCharacters(charset) //Preparing for a webview call let urlAsString = TRANS_URL let encryptedStr = "\(KEY_MERCHANT_ID)=\(MERCHANT_ID)&\(KEY_ORDER_ID)=\(ORDER_ID)&\(KEY_REDIRECT_URL)=\(REDIRECT_URL)&\(KEY_CANCEL_URL)=\(CANCEL_URL)&\(KEY_ENC_VAL)=\(encVal)&\(KEY_CC_ACCESS_CODE)=\(CC_ACCESS_CODE)&\(KEY_BILLING_NAME)=""&\(KEY_BILLING_ADDRESS)=""&\(KEY_BILLING_ZIP)=""&\(KEY_BILLING_CITY)=""&\(KEY_BILLING_STATE)=""&\(KEY_BILLING_COUNTRY)=""&\(KEY_BILLING_TEL)=""&\(KEY_BILLING_EMAIL)=""" let myRequestData = encryptedStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) let request = NSMutableURLRequest(URL: NSURL(string: urlAsString)!) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type") request.setValue("https://secure.ccavenue.com/", forHTTPHeaderField: "Referer") request.HTTPMethod = "POST" request.HTTPBody = myRequestData ccWebView .loadRequest(request) 

方法获取rsaKey:

  func getRsaKeyForCCAvenue() -> String { //Getting RSA Key let rsaKeyDataStr = "\(KEY_CC_ACCESS_CODE)=\(CC_ACCESS_CODE)&\(KEY_ORDER_ID)=\(ORDER_ID)" let requestData = rsaKeyDataStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) let rsaRequest = NSMutableURLRequest(URL: NSURL(string: RSA_KEY_URL)!) rsaRequest .setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type") rsaRequest.HTTPMethod = "POST" rsaRequest.HTTPBody = requestData let rsaKeyData: NSData? = try? NSURLConnection.sendSynchronousRequest(rsaRequest, returningResponse: nil) var rsaKey = NSString(data: rsaKeyData!, encoding: NSASCIIStringEncoding) let strNewRSA = rsaKey as! String let range: Range<String.Index> = strNewRSA.rangeOfString("<")! let index: Int = strNewRSA.startIndex.distanceTo(range.startIndex) rsaKey = strNewRSA.substringToIndex(range.startIndex) rsaKey = rsaKey?.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()) rsaKey = "-----BEGIN PUBLIC KEY-----\n\(rsaKey!)\n-----END PUBLIC KEY-----\n" return rsaKey as! String } 

Web View委托方法来读取响应:

  func webViewDidFinishLoad(webView: UIWebView) { let webString = webView.request?.URL?.absoluteString if (webString! as NSString).containsString("PaymentCCAvenue/ReturnAPI") { let html = webView .stringByEvaluatingJavaScriptFromString("document.documentElement.outerHTML") if (html! as NSString).containsString("Success") { } else if (html! as NSString).containsString("Failure") { } else { } } } 

只需检查后端开发人员的响应string,以在webViewDidFinishLoad中添加条件。

对于需要Swift 3.2的人来说,这里是代码。 花了我一段时间来转换。 但是,你走了。 在此之前,让我解释一下,如果事情还不清楚。

(1)将您的GetRSA文件放在服务器上,然后将该链接作为“rsaKeyUrl”复制并粘贴到您的应用程序中。

(2)“getRsaKeyForCCAvenue()”函数调用放置在服务器上的文件,其IP必须事先列入白名单。

(3)“getRSA”文件向已经在其中的链接请求CCavenue(这很重要,因为CCAvenue只接受来自白名单IP的请求,这使得所有的请求只能从一个IP路由。

(4)CCAvenue检查细节并处理请求,如果一切都检查,则发送响应并redirect到付款页面。

(5)redirectURL应该是“ccavResponseHandler”文件的链接,它具有您的访问代码并转换响应。

SWIFT中的代码3.2

1)获取RSA密钥

 func getRsaKeyForCCAvenue() -> String { //Getting RSA Key let rsaKeyDataStr = "access_code=\(accessCode)&order_id=\(orderId)" let requestData = rsaKeyDataStr.data(using: String.Encoding.utf8, allowLossyConversion: false) var request = URLRequest(url: URL(string: rsaKeyUrl)!) let rsaRequest = NSMutableURLRequest(url: URL(string: rsaKeyUrl)!) rsaRequest .setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type") rsaRequest.httpMethod = "POST" rsaRequest.httpBody = requestData let rsaKeyData: NSData? = try? NSURLConnection.sendSynchronousRequest(rsaRequest as URLRequest, returning: nil) as NSData var rsaKey = NSString(data: rsaKeyData! as Data, encoding: String.Encoding.ascii.rawValue) rsaKey = rsaKey?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) as NSString? // rsaKey = rsaKey?.trimmingCharacters(in: NSCharacterSet.newlines) as? NSString rsaKey = "-----BEGIN PUBLIC KEY-----\n\(rsaKey!)\n-----END PUBLIC KEY-----\n" as NSString print(rsaKey) return rsaKey! as String } 

2)super.viewDidLoad()之后的代码

  let rsaKey = getRsaKeyForCCAvenue() //Encrypting Card Details let myRequestString = "amount=\(VQ_MOUNT)&currency=\(currency)" let ccTool = CCTool() var encVal :NSString = ccTool.encryptRSA(myRequestString, key: (rsaKey as NSString) as String!) as NSString let charset : String = "!*'();:@&=+$,/?%#[]" encVal = CFURLCreateStringByAddingPercentEscapes(nil, encVal as CFString, nil, (charset as CFString), CFStringBuiltInEncodings.UTF8.rawValue) as String as NSString //Preparing for a webview call let urlAsString = TRANS_URL var encryptedStr = "merchant_id=\(merchantId)&order_id=\(orderId)&redirect_url=\(redirectUrl)&cancel_url=\(cancelUrl)&enc_val=\(encVal)&access_code=\(accessCode)" let myRequestData = NSData.init(bytes: encryptedStr.cString(using: .utf8), length: encryptedStr.characters.count) as Data let request = NSMutableURLRequest(url: URL(string: urlAsString)!) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type") request.setValue(TRANS_URL, forHTTPHeaderField: "Referer") request.httpMethod = "POST" request.httpBody = myRequestData viewWeb.loadRequest(request as URLRequest) 

3)最后是webViewDidFinishLoad()的实现

  func webViewDidFinishLoad(_ webView: UIWebView) { let webString = webView.request?.url?.absoluteString if ((webString as NSString?)?.range(of: "/ccavResponseHandler.jsp"))?.location != NSNotFound { let html: String? = webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML") var transStatus = "Not Known" if (((html as NSString?)?.range(of: "Aborted"))?.location != NSNotFound) || (((html as NSString?)?.range(of: "Cancel"))?.location != NSNotFound) { transStatus = "Transaction Cancelled" } else if (((html as NSString?)?.range(of: "Success"))?.location != NSNotFound) { transStatus = "Transaction Successful" } else if (((html as NSString?)?.range(of: "Fail"))?.location != NSNotFound) { transStatus = "Transaction Failed" } var controller = storyboard?.instantiateViewController(withIdentifier: "CCResultViewController") as? CCResultViewController controller?.transStatus = transStatus controller?.modalTransitionStyle = .crossDissolve present(controller ?? UIViewController(), animated: true) }else { print("Something went wrong...") } }