web-dev-qa-db-ja.com

iOSアプリケーション用のCCAvenueゲートウェイ統合キット

こんにちは、
支払いゲートウェイを必要とするアプリケーションを開発しました。私はすでに「Paypal」に取り組んでいます。それは成功しました、そして今私は「ccavenue」である別の支払いゲートウェイを統合する必要があります。誰かがそれを統合する方法を教えてもらえますか?
ありがとう。

14
Madhu

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>

その後、画面にWebビューをロードします

  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];
8
Madhu

彼らが言及したように私はSDKを探していました ここ IOS/Android/WindowsSDKが利用可能であると。しかし、何も見つかりませんでした。最後に、CCAvenuetechにメールを作成しました。支援チーム。

それから彼らと電話をしました、そしてこれは彼らが言ったことです:

  • SDKをダウンロードするためのログイン資格情報を取得するには、実際のマーチャントアカウントが必要です。
  • サンドボックステスト環境は提供されません。
  • プロセスは、マーチャントのWebサイトおよびその他の入力された詳細によってマーチャントアカウントを確認することです。
  • 確認が完了すると、販売者の登録済みメールアドレスにアクティベーションメールを送信します。
  • マーチャントがアカウントをアクティブ化すると、SDKをダウンロードするためのログイン資格情報を取得します。
  • サブスクリプションには、無料と特権の2つのタイプがあります(詳細については、Webサイトを参照してください)。
  • SDKでは、マーチャントが無料プランを利用している場合、INRおよびUSD通貨のみがサポートされます。マーチャントが他の通貨のサポートを追加したい場合は、CCAvenueに同じものをリクエストする必要があります。 CCAvenueチームは、関係する銀行に確認します。銀行が取引を許可している場合は、ルピーを支払うことで新しい通貨を有効化できます。それぞれ5000。
  • マーチャントが特権プランを持っている場合、INRとともに、マーチャントはサポートされている27の通貨から任意の4つの通貨を選択できます。商人がもっと欲しいなら、彼はルピーを支払うことによって通貨を購入することができます。それぞれ5000。
15
Bhumi Goklani

CCAvenue PaymentGatewayの統合Swift 3


まず、CCAvenueが提供する統合について、このリンク " https://www.ccavenue.com/inapp_payments.jsp "を確認してください。

シームレスでない方法でモバイルアプリケーションにペイメントゲートウェイを実装するには、以下の手順に従ってください。

1。パブリック/発信IPがCCAvenue側でホイットリストに登録されていることを確認してください。

2。GetRSAファイルとccavResponseHandlerファイルをサーバーに配置します。

3。アプリで、サーバーに保持されているGetRSAファイルのパスを指定します

4。RSA公開鍵をフェッチするためにサーバーに保持されているアプリからGetRSAを呼び出します。

5。フェッチされた公開鍵マーチャントを使用すると、パラメーター(金額、通貨)が暗号化されます。 RSAキーを暗号化するには、次の手順を実行します(手順1から手順8まで)。

ステップ1:CCAvenueWebサイトからCCAvenueSDKをダウンロードする必要があります。ダウンロードするには、マーチャントアカウントの資格情報を使用してログインする必要があります。

ステップ2:ログイン後、SDKをダウンロードするには、[リソース]-> [モバイル統合キット]に移動します。次のスクリーンショットを参照してください。

enter image description here

ステップ3:ダウンロードするには、次のスクリーンショットに示すように、[統合キットのダウンロード]をクリックします。ダウンロードする前に、シームレスまたは非シームレスを選択してください。 (これについての詳細は、CCAvenueが提供するドキュメントで確認してください)

シームレス:マーチャントがシームレスとして構成されている場合、支払いオプションを含むすべての請求/配送の詳細がマーチャントページで受け入れられます。

非シームレス:マーチャントが非シームレスとして構成されている場合、支払いオプションを含む請求/配送の詳細は、CCAvenueのモバイルページで受け入れられます。

enter image description here

ステップ4:SDKキットをダウンロードした後、フォルダー「OpenSSL」をプロジェクトにコピーする必要があります。そうでない場合は、ポッドを使用して「openssl」をインストールすることもできます。

Step5:Openssl /openssl-1.0.1i-iOSフォルダーの下に2つのフォルダーincludeとlibがあります。また、プロジェクトのビルド設定で、[検索パス]-> [ライブラリ]、[検索パス]に移動し、提供されているユーザー/テスト/デスクトップ/ ....を削除し、include /とlib /をこの2つのフォルダーにドラッグアンドドロップします。また、[パス]-> [ユーザーヘッダー検索パス]についても同じことを行う必要があります。

Stop6:この2つのファイル(ダウンロードしたSDKで利用可能なファイル)をプロジェクト「CCTOOL&BASE64」にコピーします。

ステップ7:ブリッジヘッダーのインポート「CCTool.h」を使用します。

Step8:最後に、「CCTool」ファイルにある方法を使用してRSAキーを暗号化します。

6。パラメータを暗号化した後、暗号化された値を他の請求配送の詳細(存在する場合)とともにブラウザ(埋め込み)を介してCCAvenueサーバーに送信しますwebview)投稿。 (すべてのコードをobjective-cからSwiftに変換できなかった場合は、objective-cファイルCCWEBVIEWCONTROLERを使用してください)

7。ユーザーはCCAvenueの請求配送ページにリダイレクトされ、そこで支払いオプションを含む必要な詳細を入力します。

8。必要な詳細を入力した後、彼は銀行のページにリダイレクトされ、そこで自分自身を承認します。

9。承認後、彼はCCAvenueにリダイレクトされ、応答、つまり成功または失敗が、登録時にリターンURLとして構成されたマーチャントページに送信されます。 。

10。次に、応答を復号化する必要があります。応答を解析して、トランザクションのステータスを取得できます。

注:

  • アクセスコードと注文IDは、RSA呼び出し中に渡されたものと同じである必要があります。

  • 注文IDは常に一意である必要があります

  • トランザクションは、RSAキーを受信して​​から60秒以内にCCAvenueサーバーにヒットするはずです。

  • CcavResponseHandlerファイルに投稿された作業キーは、CCAvenueに投稿されたアクセスコードに対応している必要があります。

7
Sagar Sukode

CCAvenueの統合ページ サーバー側のオプションのみを表示します。

したがって、これを自分で実装する必要があります。 CCAvenueの支払いゲートウェイをサーバーに統合し、デバイスのWebビューで支払いページを開くことができます。サーバー側の実装はユーザーが制御できるため、OAuthで行われる方法でCookieを介して支払い確認の詳細を送信できます。

5
Swapnil Luktuke

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
}

応答を読み取るためのWebView 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に条件を追加するだけです。

4
Amit

Swift 3.2の答えが必要な人のために、ここにコードがあります。変換するのに少し時間がかかりました。しかし、ここに行きます。その前に、まだ不明な点がある場合に備えて説明します。

(1)GetRSAファイルをサーバーに配置し、そのリンクをコピーしてアプリに「rsaKeyUrl」として貼り付けます。

(2)「getRsaKeyForCCAvenue()」関数は、サーバーに配置されたファイルを呼び出します。このファイルのIPは事前にホワイトリストに登録されている必要があります。

(3)「getRSA」ファイルはすでに存在するリンクでCCavenueにリクエストを送信します(CCAvenueはホワイトリストに登録されたIPからのリクエストのみを受け入れ、これによりすべてのリクエストを1つの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...")
    }
}
1
The Doctor