DocuSign getEnvelopeDocuments无效值envelopeId

时间:2014-03-18 14:50:38

标签: ios objective-c xcode5 nsurl docusignapi

我正在objective C中实现DocuSign示例,该示例是关于获取我在link中找到的信封文档,但是当代码执行指令时

NSMutableURLRequest *documentsRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:documentsURL]];

URL请求为空,因为URLWithString失败。我获得的网址是https://demo.docusign.net/restapi/v2/accounts/373577/envelopes/2513432b-07f4-4117-bb6c-8b5d49606d2d/documents

我也尝试做

[stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但在这种情况下,结果是为envelopeid指定的无效值,其中包含网址https://demo.docusign.net/restapi/v2/accounts/373577/envelopes/2513432b-07f4-4117-bb6c-8b5d49606d2d%E2%80%8B/documents

1 个答案:

答案 0 :(得分:0)

获取信封文档信息和下载文档的DocuSign API演练具有已确认可用的完整工作代码。以下是完整的工作示例,您只需输入凭据和有效的envelopeId

即可
//
//  API Walkthrough 6 - Get envelope documents info and download documents
//
//  To run this sample:
//      1.  Copy the below code into your iOS project
//      2.  Enter your email, password, integrator key and envelopeId and save
//      3.  Run the code
//

- (void)getDocumentInfoAndDownloadDocuments
{

    // Enter your info:
    NSString *email = @"<#email#>";
    NSString *password = @"<#password#>";
    NSString *integratorKey = @"<#integratorKey#>";

    // need to copy a valid envelopeId from your account
    NSString *envelopeId = @"<#envelopeId#>";

    ///////////////////////////////////////////////////////////////////////////////////////
    // STEP 1 - Login (retrieves accountId and baseUrl)
    ///////////////////////////////////////////////////////////////////////////////////////

    NSString *loginURL = @"https://demo.docusign.net/restapi/v2/login_information";

    NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] init];
    [loginRequest setHTTPMethod:@"GET"];
    [loginRequest setURL:[NSURL URLWithString:loginURL]];

    // set JSON formatted X-DocuSign-Authentication header (XML also accepted)
    NSDictionary *authenticationHeader = @{@"Username": email, @"Password" : password, @"IntegratorKey" : integratorKey};

    // jsonStringFromObject() function defined further below...
    [loginRequest setValue:[self jsonStringFromObject:authenticationHeader] forHTTPHeaderField:@"X-DocuSign-Authentication"];

    // also set the Content-Type header (other accepted type is application/xml)
    [loginRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    [NSURLConnection sendAsynchronousRequest:loginRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *loginResponse, NSData *loginData, NSError *loginError) {

        if (loginError) {   // succesful GET returns status 200
            NSLog(@"Error sending request %@. Got Response %@ Error is: %@", loginRequest, loginResponse, loginError);
            return;
        }

        // we use NSJSONSerialization to parse the JSON formatted response
        NSError *jsonError = nil;
        NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:loginData options:kNilOptions error:&jsonError];
        NSArray *loginArray = responseDictionary[@"loginAccounts"];

        // parse the accountId and baseUrl from the response (other data included)
        NSString *accountId = loginArray[0][@"accountId"];
        NSString *baseUrl = loginArray[0][@"baseUrl"];

        //--- display results
        NSLog(@"\naccountId = %@\nbaseUrl = %@\n", accountId, baseUrl);

        ///////////////////////////////////////////////////////////////////////////////////////
        // STEP 2 - Get Document Info for specified envelope
        ///////////////////////////////////////////////////////////////////////////////////////

        // append /envelopes/{envelopeId}/documents URI to baseUrl and use as endpoint for next request
        NSString *documentsURL = [NSMutableString stringWithFormat:@"%@/envelopes/%@/documents", baseUrl, envelopeId];

        NSMutableURLRequest *documentsRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:documentsURL]];
        [documentsRequest setHTTPMethod:@"GET"];

        [documentsRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [documentsRequest setValue:[self jsonStringFromObject:authenticationHeader] forHTTPHeaderField:@"X-DocuSign-Authentication"];

        [NSURLConnection sendAsynchronousRequest:documentsRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *documentsResponse, NSData *documentsData, NSError *documentsError) {
            NSError *documentsJSONError = nil;
            NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:documentsData options:kNilOptions error:&documentsJSONError];
            if (documentsError){
                NSLog(@"Error sending request: %@. Got response: %@", documentsRequest, documentsResponse);
                NSLog( @"Response = %@", documentsResponse );
                return;
            }
            NSLog( @"Documents info for envelope is:\n%@", jsonResponse);
            NSError *jsonError = nil;
            NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:documentsData options:kNilOptions error:&jsonError];
            // grab documents info for the next step...
            NSArray *documentsArray = responseDictionary[@"envelopeDocuments"];

            ///////////////////////////////////////////////////////////////////////////////////////
            // STEP 3 - Download each envelope document
            ///////////////////////////////////////////////////////////////////////////////////////

            NSMutableString *docUri;
            NSMutableString *docName;
            NSMutableString *docURL;

            // loop through each document uri and download each doc (including the envelope's certificate)
            for (int i = 0; i < [documentsArray count]; i++)
            {
                docUri = [documentsArray[i] objectForKey:@"uri"];
                docName = [documentsArray[i] objectForKey:@"name"];
                docURL = [NSMutableString stringWithFormat: @"%@/%@", baseUrl, docUri];

                [documentsRequest setHTTPMethod:@"GET"];
                [documentsRequest setURL:[NSURL URLWithString:docURL]];
                [documentsRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                [documentsRequest setValue:[self jsonStringFromObject:authenticationHeader] forHTTPHeaderField:@"X-DocuSign-Authentication"];

                NSError *error = [[NSError alloc] init];
                NSHTTPURLResponse *responseCode = nil;
                NSData *oResponseData = [NSURLConnection sendSynchronousRequest:documentsRequest returningResponse:&responseCode error:&error];
                NSMutableString *jsonResponse = [[NSMutableString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding];
                if([responseCode statusCode] != 200){
                    NSLog(@"Error sending %@ request to %@\nHTTP status code = %i", [documentsRequest HTTPMethod], docURL, [responseCode statusCode]);
                    NSLog( @"Response = %@", jsonResponse );
                    return;
                }

                // download the document to the same directory as this app
                NSString *appDirectory = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
                NSMutableString *filePath = [NSMutableString stringWithFormat:@"%@/%@", appDirectory, docName];
                [oResponseData writeToFile:filePath atomically:YES];
                NSLog(@"Envelope document - %@ - has been downloaded to %@\n", docName, filePath);
            } // end for
        }];
    }];
}

- (NSString *)jsonStringFromObject:(id)object {
    NSString *string = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:object options:0 error:nil] encoding:NSUTF8StringEncoding];
    return string;
}