14

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

4

6 回答 6

15

我正在搜索 SDK,因为他们在这里提到 IOS/Android/Windows SDK 可用。但是什么也没找到。最后,我起草了一封电子邮件给 CCAvenue 技术。支持团队。

然后打电话给他们,他们是这样说的:

  • 我们需要有实际的商家帐户才能获取登录凭据以下载 SDK。
  • 他们不提供任何沙盒测试环境。
  • 该过程是,他们将通过商家的网站和其他输入的详细信息来验证商家帐户。
  • 完成验证后,他们会向商家注册的电子邮件地址发送一封激活电子邮件。
  • 一旦商家激活他的帐户,他将获得登录凭据以下载 SDK。
  • 订阅有两种类型:免费和特权。(请参阅他们的网站以了解更多信息)
  • 使用 SDK,如果商家有免费套餐,则仅支持 INR 和 USD 货币。如果商家想要添加对任何其他货币的支持,那么他将不得不向 CCAvenue 请求相同的支持。CCAvenue 团队将与相关银行核实,如果银行允许交易,则可以通过支付卢比激活新货币。每人5000。
  • 如果商户有优惠计划,那么除了印度卢比,商户可以从支持的 27 种货币中选择任意 4 种货币。如果商家想要更多,那么他可以通过支付卢比购买货币。每人5000。
于 2015-09-30T10:00:00.197 回答
8

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

首先创建你的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];
于 2014-07-05T06:34:07.673 回答
6

Swift 3 中的 CCAvenue 支付网关集成


首先检查此链接“ https://www.ccavenue.com/inapp_payments.jsp ”进行集成,CCAvenue 提供了什么。

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

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

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

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

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

5.使用获取的公钥商户对参数(金额、币种)进行加密。要加密 RSA 密钥,请执行以下步骤(从步骤 1 到步骤 8)。

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

Step2:登录后,到资源->移动集成工具包下载SDK。请参阅以下屏幕截图。

在此处输入图像描述

步骤 3:要下载,请单击下载集成工具包,如下面的屏幕截图所示。在下载之前选择无缝或非无缝。(在 CCAvenue 提供的文档中查看有关此内容的详细信息)

无缝:如果商家配置为无缝,则商家页面上会接受包括付款选项在内的所有账单/运输详细信息。

非无缝:如果商家配置为非无缝,则在 CCAvenue 的移动页面上接受包括付款选项在内的计费/运输详细信息。

在此处输入图像描述

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

Step5:你会在Openssl/openssl-1.0.1i-iOS文件夹下找到2个文件夹include和lib。同样在项目的构建设置下,选择搜索路径->库,搜索路径,删除提供的用户/测试/桌面/....并拖放包含/和 lib/这两个文件夹。你也必须对 Paths->User Header Search Paths 做同样的事情。

第 6 步:将这两个文件(您下载的 SDK 中可用的文件)复制到您的项目“CCTOOL & BASE64.

Step7:使用桥接头导入“CCTool.h”。

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

6.加密参数后,您将通过浏览器(嵌入式 webview)发布加密值以及其他计费运输详细信息(如果有)到 CCAvenue 服务器。(如果您无法将所有代码从objective-c 转换为swift,请使用objective-c 文件CCWEBVIEWCONTROLER)

7.用户将被重定向到 CCAvenue 的计费运输页面,在那里他将填写所需的详细信息,包括付款选项。

8.填写完所需的详细信息后,他将被重定向到他将授权自己的银行页面。

9.授权后,他将被重定向到CCAvenue,并且会向商家页面发送成功或失败的响应,该页面在注册期间配置为返回url。

10.然后您应该解密响应,然后可以对其进行解析以获取交易状态。

笔记 :

  • 访问代码和订单 ID 应与 RSA 调用期间传递的相同。

  • 订单 ID 应始终是唯一的

  • 交易应在收到 RSA 密钥后 60 秒内到达 CCAvenue 服务器。

  • ccavResponseHandler 文件中发布的工作密钥应与发布到 CCAvenue 的 Accesscode 相对应。

于 2017-02-14T07:44:21.480 回答
5

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

所以,你必须自己实现这个。您可以在您的服务器上集成 CCAvenue 的支付网关,并在设备的 Web 视图中打开支付页面。由于服务器端实现在您的控制之下,您可以通过 cookie 发送付款确认详细信息,就像在 OAuth 中完成的那样。

于 2014-05-26T16:48:56.097 回答
4

我已经按照 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 Delegate 方法:

    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 {
        }
    }

}

只需检查来自后端开发人员的响应字符串,即可在 webViewDidFinishLoad 中添加条件。

于 2017-08-01T04:48:27.107 回答
2

对于任何需要 Swift 3.2 答案的人来说,这里是代码。我花了一段时间来转换它。但是给你。在此之前,让我解释一下,以防事情仍然不清楚。

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

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

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

(4) CCAvenue 检查详细信息并处理请求,如果一切正常,则发送响应并重定向到支付页面。

(5) 重定向 URL 应为“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...")
    }
}
于 2017-11-13T00:11:34.433 回答