Guia Prático de Implementação e Integração do Alipay para iOS

Configuração Inicial e Dependências

Para integrar a solução de pagamentos móvel do Alipay, é necessário configurar corretamente o ambiente de desenvolvimento. Baixe a versão mais recente do pacote oficial e posicione os arquivos necessários diretamente na pasta do projeto no seu IDE preferido.

Você deve incluir os seguintes componentes binários:

  • AlipaySDK.framework
  • AlipaySDK.bundle

No editor de projetos, navegue até a aba Build Phases e certifique-se de vincular as bibliotecas corretas no item Link Binary With Libraries. A configuração das dependências depende da versão do compilador:

  • Para versões acima do Xcode 7.0: Adicione libc++.tbd e libz.tbd.
  • Para versões anteriores ao Xcode 7.0: Utilize libc++.dylib e libz.dylib.

Inicialização da Classe SDK

O acesso aos recursos de pagamento requer a inclusão do cabeçalho principal na classe onde a integração será disparada:

#import <AlipaySDK/AlipaySDK.h>

Construção da Payload de Transação

A criação da cadeia de pedidos segura envolve a montagem dos parâmetros exigidos pela plataforma. Embora o exemplo abaixo demonstre a lógica em cliente para fins didáticos, a prática recomendada de engenharia exige que esta operação ocorra no servidor para prtoeger as chaves privadas.

Abaixo, apresentamos uma estrutura reorganizada para gerar a cadeia de assinatura:

// Estrutura personalizada para dados do pedido
typedef NS_ENUM(NSInteger, TransactionType) {
    TransactionTypeStandard = 0
};

@implementation TransactionBuilder

- (NSString *)generateTransactionString {
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:8];
    
    // Identificação da aplicação
    params[@"app_id"] = kApplicationIdentifier; 
    
    // Definição da interface de serviço
    params[@"method"] = @"alipay.trade.app.pay";
    params[@"charset"] = @"utf-8";
    params[@"version"] = @"1.0";
    params[@"sign_type"] = @"RSA2";
    
    // Timestamp atualizado
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    [fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    params[@"timestamp"] = [fmt stringFromDate:[NSDate date]];
    
    // Conteúdo de negócios encapsulado
    NSDictionary *businessInfo = @{
        @"body": @"Descrição do produto ou serviço",
        @"subject": kProductSubject,
        @"total_amount": kProductPrice,
        @"out_trade_no": [self generateUniqueOrderId],
        @"timeout_express": @"60m"
    };
    
    // Serialização do conteúdo JSON
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:businessInfo options:NSJSONWritingPrettyPrinted error:nil];
    params[@"biz_content"] = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    return [self assembleParameters:params];
}

- (NSString *)assembleParameters:(NSDictionary *)params {
    NSMutableArray *sortedKeys = [params.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 compare:obj2];
    }];
    
    NSMutableString *stringToSign = [NSMutableString string];
    
    for (NSString *key in sortedKeys) {
        NSString *value = params[key];
        if ([value isKindOfClass:[NSString class]]) {
            [stringToSign appendFormat:@"%@=%@", key, value];
            [stringToSign appendString:@"&"];
        }
    }
    
    // Remove o último caractere '&'
    NSRange range = [stringToSign rangeOfString:@"&"];
    if(range.location != NSNotFound) {
        [stringToSign deleteCharactersInRange:NSMakeRange([stringToSign length]-1, 1)];
    }
    
    return stringToSign;
}

@end

Após montar o texto base, realize a assinatura criptográfica. O processo deve ser isolado no backend para evitar vazamento de credenciais. Utilize algoritmos compatíveis (como RSA) e codifique o resultado usando Base64.

// Exemplo de chamada da API de pagamento (Simulação de Lógica)
[[AlipaySDK defaultService] payOrder:signedOrderString 
                          fromScheme:@"myapp_scheme" 
                           callback:^(NSDictionary *result) {
                                dispatch_async(dispatch_get_main_queue(), ^{
                                    // Tratar retorno
                                    NSLog(@"Status: %@", result);
                                });
                             }];

Manipulação de URLs e Delegados

O fluxo de retorno do aplicativo requer tratamento adequado do protocolo URI. Você deve implementar os métodos apropriados na sua classe AppDelegate para interceptar callbacks vindos do aplicativo Alipay.

- (BOOL)application:(UIApplication *)application 
                openURL:(NSURL *)url 
      sourceApplication:(NSString *)sourceApplication 
         annotation:(id)annotation {
    
    return [[AlipaySDK defaultService] processOrderWithPaymentResult:url 
                                         standbyCallback:^(NSDictionary *resultDict) {
                                             NSLog(@"Resultado: %@", resultDict);
                                         }];
}

// Suporte para versões posteriores do iOS (9.0+)
- (BOOL)application:(UIApplication *)app 
            openURL:(NSURL *)url 
            options:(NSDictionary<nsstring id=""> *)options {
    return [[AlipaySDK defaultService] processOrderWithPaymentResult:url 
                                         standbyCallback:^(NSDictionary *resultDict) {
                                             NSLog(@"Processando resposta do sistema bancário.");
                                         }];
}</nsstring>

Configure o arquivo Info.plist dentro da seção URL Types definindo um esquema exclusivo para sua aplicação. Este esquema deve corresponder à constante usada na chamada da API de pagamento para garantir o retorno correto à sua interface.

Gestão de Erros Comuns

Durante a compilação, algumas inconsistências podem surgir relacionadas a caminhos de headers e bibliotecas externas como OpenSSL. Verifique as configurações abaixo:

  1. Paths de Headers: Adicione o diretório raiz do projeto nas variáveis Header Search Paths se houver erros de "file not found".
  2. Frameworks: Garanta que SystemConfiguration.framework esteja presente na lista de vinculadores.
  3. Bibliotecas Cryptográficas: Se utilizar OpenSSL localmente para testes, verifique a estrutura de pastas e ajuste os caminhos de busca relativos ao projeto.

Referência Técnica de Métodos

Método Descrição
+defaultService Retorna a instância singleton necessária para operações subsequentes.
payOrder:fromScheme:callback: Inicia o processo transacional direto no cliente. Recebe uma cadeia de parâmetros assinada e define o callback para o sucesso ou falha.
processOrderWithPaymentResult:standbyCallback: Essencial para apps encerrados. Lê o URL retornado pelo cliente de pagamento para validar a transação em segundo plano.

Para implementação detalhada, recomenda-se consultar os exemlpos disponíveis nos arquivos de demonstração fornecidos pelo fornecedor, focando principalmente nas rotinas de serialização e tratamento seguro de dados sensíveis.

Tags: iOS Development Alipay SDK Mobile Payments Objective-C API Integration

Publicado em 10-4 01:32