2017-09-14 13 views
1

誰でもAmexのメッセージングiso8583を実装しましたか?私はポートとIPを持っていますが、ソケットでエコーメッセージ(1804)を送信すると何も応答しません。エンコーディングはEBCDICです。誰かが例を持っていますか?コードは、C#AmexのISO8583

Console.WriteLine("Send Message Echo..."); 
ManageConnection.ManageSocket _manage = new ManageConnection.ManageSocket(IpAmex, PortAmex); 
TupleList<Encoding, string> _request = new TupleList<Encoding, string>(); 
_request.Add(Encoding.GetEncoding(500), "1804"); 
_request.Add(Encoding.UTF8, "2030018000000000"); 
_request.Add(Encoding.GetEncoding(500), "000000"); 
_request.Add(Encoding.GetEncoding(500), "112233"); 
_request.Add(Encoding.GetEncoding(500), "1709141205108318700"); 
var _response = _manage.SendMessageSocket(_request); 
return _response; 


public string SendMessageSocket(TupleList<Encoding, string> _messages) { 
     string _return = String.Empty; 
     try 
     { 
      byte[] bytes = new byte[65000]; 
      IPAddress ipAddress = IPAddress.Parse(IP); 
      IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port); 
      Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      sender.Connect(remoteEP); 
      Console.WriteLine("Enviando mensaje...."); 
      var bytesMessage = GetCompleteMessage(_messages); 
      // This function GetCompleteMessage= byte[] bytesMessage = { 241, 248, 240, 244, 32, 48, 1, 128, 0, 0, 0, 0, 240, 240, 240, 240, 241, 241‌​, 241, 242, 242, 243, 243‌​, 241, 247, 240, 249, 241, 244, 241, 242, 240, 245, 241, 240, 248, 243, 241,‌​248, 247, 240, 240 }; 
      int bytesSent = sender.Send(bytesMessage); 
      Console.WriteLine("Esperando respuesta...."); 
      int bytesRec = sender.Receive(bytes); //Here don't receive nothing 
      int len = Array.IndexOf(bytes, byte.MinValue); 
      var responseString = Encoding.UTF8.GetString(bytes, byte.MinValue, len); 

      sender.Shutdown(SocketShutdown.Both); 
      sender.Close(); 
      return xmlResponseString; 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 
    } 

にメッセージは、私はC#のを理解していないISO8583グローバル・クレジット認証ガイド(GCAG)、

+0

「アメックス」とは何ですか? –

+1

アメリカンエキスプレス - ISO8583 https://en.wikipedia.org/wiki/ISO_8583 –

答えて

2

1. American Expressが使用するISO8583のような仕様。

  • グローバル電子データは、(GEDC)ターミナルメッセージ仕様、
  • をキャプチャし、

    • グローバル・クレジット認証ガイド(GCAG):

      彼らはサンプルのため、いくつかのカスタマイズされたISO 8583の方言を使用しました

    • 複数のインターフェイス処理(PIP)ターミナルインターフェイス。

    あなたのMTI 1804を見ると、GCAGであり、通常はEBCDICでエンコードされていると思います。

    ご要望のとおり、メッセージの本文が正確ではありません。ネットワークメッセージの16進表現を追加してください。メッセージ本文のエンコーディングに関する潜在的な問題を示すことができます。

    私たちは、ISO8583の方言や財務データに関するオンラインサービスをサポートしています。 こちらはGCAG ISO 8583 message body parserです。 送信メッセージ構造とEBCDICエンコーディングを確認できます。

    2. American Expressホストについて。

    実際にAmexは、ほとんどの場合、グローバルWebサービス(GWS)IPペイメントゲートウェイを使用していますが、実際には、メッセージデータを転送したり処理したりするTCP/IPソケットサービスが多数あることに同意できます。特定のHTTPヘッダーとのHTTPS接続です。

    HTTP/HTTPSデータがGWSを介して転送されるため、EBCDICでエンコードされたメッセージでもASCII 16進文字列として処理されます。

    TCP/IPソケット接続には、追加のメッセージヘッダー、長さバイト、開始および終了のパケットデータが含まれている場合があります。 TCP/IPホストの接続要件を確認してください。

    テストカード認証を使用したAmex ISO 8583メッセージ処理の実際の例として、GCAG host simulatorのフォームに直接HTTPSホストシミュレータサービスを開始してください。

    3。例としてボーナス

    Amex GCAGホストシミュレータで処理されたプライマリビットマップで1804メッセージが修正されました。 YAMLで表されるメッセージ構造。

    --- 
    # Cheef's parser. 
    # Copyright (C) 2008-2017 Alexander Shevelev. https://iso8583.info/ 
    # lib : "/lib/AMEX/GCAG/" - Global Credit Authorization Guide 
    # tool : "host" 
    # stat : 28 nodes, 14 lookup tables, 92.86% passed (13/14) 
    
    host: # AMEX GCAG host simulator 
    - rq:#"F1F8F0F42030018000000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message 
        - MTI: "1804" # Message Type ID. // network management request 
        - DE000: "2030018000000000" # Primary bitmap // 3.11.12.24.25. 
        - BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F8F7F0F0" # Fields at Primary Bitmap 
        - DE003:#"000000" # PC // System Audit Control/Echo Message 
         - S01: "00" # Transaction Code. // Goods and service 
         - S02: "00" # Account, from. // unspecified 
         - S03: "00" # Account, to. // unspecified 
        - DE011: "112233" # STAN. 
        - DE012:#"170914120510" # Date and time, local transaction 
         - date: "170914" # Date, local transaction. // 2017.09.14 
         - time: "120510" # Time, local transaction. // 12:05:10 
        - DE024: "831" # Function code. // echo test. 
        - DE025: "8700" # Message reason code (MRC). 
    - rs:#"F1F8F1F42030010002000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message 
        - MTI: "1814" # Message Type ID. // network management request response 
        - DE000: "2030010002000000" # Primary bitmap // 3.11.12.24.39. 
        - BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F0F0F0" # Fields at Primary Bitmap 
        - DE003:#"000000" # PC // System Audit Control/Echo Message 
         - S01: "00" # Transaction Code. // Goods and service 
         - S02: "00" # Account, from. // unspecified 
         - S03: "00" # Account, to. // unspecified 
        - DE011: "112233" # STAN. 
        - DE012:#"170914120510" # Date and time, local transaction 
         - date: "170914" # Date, local transaction. // 2017.09.14 
         - time: "120510" # Time, local transaction. // 12:05:10 
        - DE024: "831" # Function code. // echo test. 
        - DE039: "000" # Action Code // approved. 
    
    +0

    こんにちは、あなたのコメントのおかげで。 私は上記のパーサーを使用していて、あなたの例で私のことを説明しているようにメッセージを送ってきましたが、結果はありません。 メッセージはシミュレータによって正しく解釈されますが、メッセージを送信したときには何もAmexが応答しません。 これは、ソケットによって送信されるバイトの配列です。 バイト[] _Message = {241,248,240,244,32,48,1,128,0,0,0,0,240,240,240,240,241,241,241,242,242,243,243、 241,247,240,249,241,244,241,242,240,245,241,240,248,243,241,248,247,240,240}。 ありがとうございました –

    +0

    メッセージは、ISO8583グローバルクレジット認定ガイド(GCAG)の –

    +0

    です。元の質問を更新し、サンプルメッセージを16進数で追加してください。要求と応答に関しては、ホスト接続のサポートに連絡する方がよいでしょう。 –

    1

    のためですが、私はJAVAでAMEXを実施しました。 EBCDICでビットマップをエンコードしてはならないと思いますが、その代わりにunhexという内容しかありません。ビットマップとして、私は '2030018000000000'を意味します。

    こちらがお役に立てば幸いです。

    +0

    はい、私の友人、私はすでにそれを作っていますが、うまくいきません....私はJavaの例を1804メッセージ(文字列から文字列への変換を送信前に確認したい) –

    +0

    たとえば、このメッセージをバイト単位で送信します。byte [] _message = {241,248,240,244,32,48,1,128,0,0,0,0,240,240,240,240,241,241 、241,242,242,243,243,241,247,240,249,241,244,241,242,240,245,241,240,248,243,241,248,247,240,240}。 –

    0

    メッセージには、メッセージの内容の長さを表す2バイトが含まれている必要があります。前記2バイトはメッセージから欠落していた。

    +0

    これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 18070162) – ChadT

    +0

    答えとして「ありがとう」を追加しないでください。代わりに、あなたが最も役に立つと思った** [答えを受け入れる](https://stackoverflow.com/help/accepted-answer)**。 - [レビューから](/レビュー/低品質の投稿/ 18070162) – Steven

    関連する問題