0

私はこれに数日間取り組んでいますが、理解できません。ColdFusion を使用して WSDL Web サービス要求を EchoSign に送信するために必要なデータ構造を作成しようとしています。単純な構造 (testPing および testEchoFile の動作) の送信には問題はありませんが、ドキュメントの送信に必要な構造 (sendDocument) のようなネストされた構造を試みると、「パラメーターを使用した Web サービス操作 sendDocument ... が見つかりません」と言って失敗します。多くの試みの1つ:

<cfset strFilePath = "#ExpandPath("tempupload/file.pdf")#" />
<cffile action="readbinary" file="#strFilePath#" variable="FileData" >
<cfscript>
apiKey = "MY_API_KEY";

documentCreationInfo = structNew();
documentCreationInfo.recipients = structNew();
    documentCreationInfo.recipients.recipientInfo = arrayNew(1);
    documentCreationInfo.recipients.recipientInfo[1] = structNew();
    documentCreationInfo.recipients.recipientInfo[1].email = "myemail@gmail.com";
    documentCreationInfo.recipients.recipientInfo[1].role = "SIGNER";
documentCreationInfo.name = "test";
documentCreationInfo.fileInfos = structNew();
    documentCreationInfo.fileInfos.fileInfo = arrayNew(1);
    documentCreationInfo.fileInfos.fileInfo[1] = structNew();
    documentCreationInfo.fileInfos.fileInfo[1].fileName = "file.pdf";
    documentCreationInfo.fileInfos.fileInfo[1].file = #FileData#;
documentCreationInfo.signatureType = "ESIGN";
documentCreationInfo.signatureFlow = "SENDER_SIGNATURE_NOT_REQUIRED";

ws = createObject("webservice", "https://secure.echosign.com/services/EchoSignDocumentService16?wsdl");

response = ws.sendDocument(apiKey = '#apiKey#', documentCreationInfo = #documentCreationInfo#);
</cfscript>

他のプログラミング言語を使用した例を見てきましたが、ColdFusion によって作成された配列と構造体の処理が異なるようで、あまり役に立ちませんでした。SOAP XML を作成する必要はありません。どんな助けでも大歓迎です。


わかりやすくするために、ColdFusion を使用し、EchoSign と通信し、sendDocument コマンドを使用するときに送信する必要があるデータの構造を次に示します。

<cfset strFilePath = "#ExpandPath("tempupload/file.pdf")#" />
<cffile action="readbinary" file="#strFilePath#" variable="FileData" >

    <cfscript>
        apiKey = "MY_API_KEY";

            documentCreationInfo = structNew();
            documentCreationInfo.recipients = structNew();
                documentCreationInfo.recipients.recipientInfo = arrayNew(1);
                documentCreationInfo.recipients.recipientInfo[1] = structNew();
                documentCreationInfo.recipients.recipientInfo[1].email = "recipient@gmail.com";
                documentCreationInfo.recipients.recipientInfo[1].role = "SIGNER";
            documentCreationInfo.name = "test";
            documentCreationInfo.fileInfos = structNew();
                documentCreationInfo.fileInfos.fileInfo = arrayNew(1);
                documentCreationInfo.fileInfos.fileInfo[1] = structNew();
                documentCreationInfo.fileInfos.fileInfo[1].fileName = "file.pdf";
                documentCreationInfo.fileInfos.fileInfo[1].file = #FileData#;
            documentCreationInfo.signatureType = "ESIGN";
            documentCreationInfo.signatureFlow = "SENDER_SIGNATURE_NOT_REQUIRED";

            senderInfo = structNew();
                senderInfo.email = "sender@gmail.com";
                senderInfo.password = "password";
                senderInfo.userKey = "";

        ws = createObject("webservice", "https://secure.echosign.com/services/EchoSignDocumentService16?wsdl");
        response = ws.sendDocument(apiKey = '#apiKey#', senderInfo = #senderInfo#, documentCreationInfo = #documentCreationInfo#);
    </cfscript>

受信者やファイルなど、複数のエントリを含むことができるデータの場合、データは構造体の配列に格納されます。この例では、受信者が 1 人しかいないため、配列 recipientInfo には配列要素 recipientInfo[1] が 1 つしかありませんが、このセクションを繰り返して recipientInfo[2] などを使用するだけで、受信者を簡単に追加できます。複数のエントリは、email、password、および userKey の要素を持つ単なる構造体です。ドキュメントによると、userKey は電子メールとパスワードのエントリを上書きします。シングル サインオンを使用するために、電子メール、パスワード、および userKey の空のデータを送信しようとしましたが、うまくいきませんでした。私の質問は、senderInfo に NULL 値を送信して、デフォルトで API 所有者になるようにするにはどうすればよいですか?

4

1 に答える 1

0

問題の Web サービスsendDocumentのメソッドを見た後、WSDL で次のように定義されているパラメーターも含める必要があるように見えます。senderInfo

<xsd:complexType name="SenderInfo">
  <xsd:sequence>
    <xsd:element minOccurs="0" name="email" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="password" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="userKey" nillable="true" type="xsd:string"/>
  </xsd:sequence>
</xsd:complexType>

したがって、senderInfo(空の構造体である可能性があります) のインスタンスを作成すると、Web サービス呼び出しは次のようになります。

response = ws.sendDocument(apiKey = '#apiKey#', documentCreationInfo = documentCreationInfo, senderInfo = senderInfo);

それが役立つことを願っています!

于 2013-08-21T03:56:33.980 に答える