[iOS]使用form-data的方式提交表单

 做内购支付时,后端需要验证订单支付状态,因为这个校验字符串非常长,所以使用form-data的方式提交表单。

[iOS]使用form-data的方式提交表单_第1张图片

#pragma mark - 内购支付成功后确认

- (void)netApplePayWithTran:(SKPaymentTransaction *)transaction OrderId:(NSString *)orderId {
    NSString *tranID = transaction.transactionIdentifier;
    [[XYStore defaultStore] base64Receipt:^(NSString *base64Data) {
        // base64Data = [GAPublicClass URLEncodedString:base64Data];
        NSMutableDictionary *parms = [NSMutableDictionary dictionary];
        [parms setObject:tranID forKey:@"transactionId"]; // 苹果内购交易ID
        [parms setObject:base64Data forKey:@"payload"]; // 校验体(base64字符串
        [parms setObject:orderId forKey:@"orderId"]; // 订单id
        [self validationPartPost:parms];
    } failure:^(NSError *error) {
        
    }];
}

- (void)validationPartPost:(NSDictionary *)dicData {
    NSString *POST_BOUNDS = @"yxqipayanzheng";
    NSString *tokenStr = [AccountTool sqLoginModel].token;

    NSURL *url = [NSURL URLWithString:[API_DOMAIN_COMMUNITY stringByAppendingString:url_apple_pay]];
    NSMutableString *bodyContent = [NSMutableString string];
    for(NSString *key in dicData.allKeys){
        id value = [dicData objectForKey:key];
        [bodyContent appendFormat:@"--%@\r\n",POST_BOUNDS];
        [bodyContent appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
        [bodyContent appendFormat:@"%@\r\n",value];
    }
    [bodyContent appendFormat:@"--%@--\r\n",POST_BOUNDS];
    NSData *bodyData=[bodyContent dataUsingEncoding:NSUTF8StringEncoding];
    
    NSMutableURLRequest *request  = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
    [request addValue:[NSString stringWithFormat:@"multipart/form-data;boundary=%@",POST_BOUNDS] forHTTPHeaderField:@"Content-Type"];
    [request setValue:tokenStr forHTTPHeaderField:@"token"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:bodyData];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [MBProgressHUD hideHUDForView:KWindow animated:YES];
        });
        NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSInteger status = [responseJSON[@"status"] integerValue];
        if (status == 200) {

        }
    }];
    [task resume];
}

TO

iOS里实现multipart/form-data格式上传文件
iOS 上传multipart/form-data格式文件
iOS之网络请求之AFN表单上传之form-data

你可能感兴趣的:([iOS]学习笔记)