【问题标题】:PayPal error 580001 HTTP Request from iOS来自 iOS 的 PayPal 错误 580001 HTTP 请求
【发布时间】:2015-10-03 10:55:34
【问题描述】:

在 iOS 中实施自适应支付时遇到一些困难,不幸的是,PayPal 网站上的文档或响应很少。这是代码:

- (void)makePaymentSandbox{

    NSError *error;

    //NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:@"https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:30.0];

    //setting
    [request setHTTPMethod:@"POST"];

    //headers
    [request addValue:@"alex-facilitator_api1.fastwebnet.it" forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"];
    [request addValue:@"FW79EZXASW69NE8X" forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"];
    [request addValue:@"ABZua9nnv9oieyN4MwVt15YdgetaJHcyzqOHjkLbuM-bGRoI7WRS" forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"];
    //NV
    [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"];
    [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"];

    [request addValue:@"APP-80W288712P519543T" forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"];

    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"en_US" forHTTPHeaderField:@"Accept-Language"];


    //data

    /*NSString *userUpdate =[NSString stringWithFormat:@"clientDetails.applicationId=%@&actionType=%@",@"APP-80W284485P519543T", @"PAY",nil];
    NSData *data1 = [userUpdate dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data1];
    [request setValue: [NSString stringWithFormat:@"%lu", (unsigned long)[data1 length]] forHTTPHeaderField:@"Content-Length"];*/


    NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys:

                             @"PAY", @"actionType",

                             @"USD", @"currencyCode",

                             @"http:\\www.cleverlyapp.com", @"cancelUrl",
                             @"http:\\www.cleverlyapp.com", @"returnUrl",


                             @"ReturnAll", @"requestEnvelope.detailLevel",
                             @"en_US", @"requestEnvelope.errorLanguage",


                             @"seneder@email.com", @"senderEmail",

                             @"0.1", @"receiverList.receiver(0).amount",
                             @"a-buyer@fastwebnet.it", @"receiverList.receiver(0).email",

                             @"0.1", @"receiverList.receiver(1).amount",
                             @"a-facilitator@fastwebnet.it", @"receiverList.receiver(1).email",


                             @"APP-80W284485P519543T", @"clientDetails.applicationId",


                             nil];
    NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
    [request setHTTPBody:postData];


    [NSURLConnection connectionWithRequest:request delegate:self];
}

回复如下:

String: {
    error =     (
                {
            category = Application;
            domain = PLATFORM;
            errorId = 580001;
            message = "Invalid request: {0}";
            severity = Error;
            subdomain = Application;
        }
    );
    responseEnvelope =     {
        ack = Failure;
        build = 17325060;
        correlationId = e82ede718b929;
        timestamp = "2015-07-14T09:50:06.222-07:00";
    };
}

【问题讨论】:

标签: ios paypal


【解决方案1】:

请检查这些:

  1. Adaptive Payments Pay API Error 580001
  2. 580001 Invalid request: {0} PayPal (PHP)
  3. Error 580001

有些与编码有关,设置为JSON,但实际上发送为URL-encoded 等,其他与使用的货币和货币格式有关(例如,发送的值不应包含货币符号等。 )

【讨论】:

    【解决方案2】:

    终于搞定了。标题是正确的,输入数据有一些问题。这是代码的正确版本:

    - (void)makePaymentSandboxWithPreapprovalToEmail:(NSString *)toEmail withCurrency:(NSString *)currency andAmount:(NSString *)moneyAmount completition:(void (^)(BOOL, NSString *))block{
    
        NSError *error;
    
        NSURL *url = [NSURL URLWithString:@"https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"];
    
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                               cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                           timeoutInterval:30.0];
    
        //setting
        [request setHTTPMethod:@"POST"];
    
        //headers
        [request addValue:@"alex.rietmann-facilitator_api1.fastwebnet.it" forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"];
        [request addValue:@"FW7ADTYZFP68XE0X" forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"];
        [request addValue:@"ABSua9nnv9nnkoN4MwVt15YdgetaJHcyzqOHjkLbuM-bGRoI7JRS" forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"];
        //NV
        [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"];
        [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"];
    
        [request addValue:@"APP-80W284485P519543T" forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"];
    
        [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [request addValue:@"en_US" forHTTPHeaderField:@"Accept-Language"];
    
        //other email
        NSDictionary *receiver0 = [[NSDictionary alloc] initWithObjectsAndKeys: toEmail, @"email", moneyAmount, @"amount", @"true", @"primary", nil];
    
        //my account
        NSDictionary *receiver1 = [[NSDictionary alloc] initWithObjectsAndKeys: @"alex.rietmann-facilitator@fastwebnet.it", @"email", @"2", @"amount", nil];
    
        NSDictionary *options0 = [[NSDictionary alloc] initWithObjectsAndKeys: [NSArray arrayWithObjects:receiver0, receiver1, nil], @"receiver", nil];
    
        NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys:
    
                                 @"PAY", @"actionType",
    
                                 @"EACHRECEIVER", @"feesPayer",
    
                                 @"true", @"reverseAllParallelPaymentsOnError",
    
                                 currency, @"currencyCode",
    
                                 [PaymentManager readPaymentCode], @"preapprovalKey",
    
                                 [PaymentManager readPaymentEmail], @"senderEmail",
    
                                 @"http:\\www.apple.com", @"cancelUrl",
                                 @"http:\\www.google.com", @"returnUrl",
    
                                 [[NSDictionary alloc] initWithObjectsAndKeys:@"en_US", @"errorLanguage", @"detailLevel", @"ReturnAll", nil], @"requestEnvelope",
    
                                 //[[NSDictionary alloc] initWithObjectsAndKeys: options0, @"0", nil], @"receiverList",
                                 options0, @"receiverList",
    
                                 [[NSDictionary alloc] initWithObjectsAndKeys:@"APP-80W284485P519543T", @"applicationId", [self getIPAddress], @"ipAddress", nil], @"clientDetails",
                                 //@"APP-80W284485P519543T", @"clientDetails.applicationId",
                                 //[self getIPAddress], @"clientDetails.ipAddress",
    
    
                                 nil];
        NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
        [request setHTTPBody:postData];
    
    
        MyConnection * connection = [[MyConnection alloc]initWithRequest:request];
        [connection setCompletitionBlock:^(id obj, NSError *err) {
    
            if (!err) {
                NSError *error = nil;
                NSDictionary* revDicn =[NSDictionary dictionary];
                revDicn = [NSJSONSerialization JSONObjectWithData:obj options:NSJSONReadingMutableContainers error:&error];
                NSLog(@"Response: %@", revDicn);
    
            if ([[revDicn objectForKey:@"paymentExecStatus"] isEqualToString:@"COMPLETED"]) {
                block(YES, [revDicn objectForKey:@"payKey"]);
            }else{
                block(NO, @"");
            }
    
            } else {
                //There was an error
                block(NO, @"");
            }
        }];
        [connection start];
    }
    

    此行是可选的: [PaymentManager readPaymentCode], @"preapprovalKey", 它的使用取决于您是否希望使用预先批准。这里详细解释了预批的使用:https://developer.paypal.com/webapps/developer/docs/classic/adaptive-payments/ht_ap-basicPreapproval-curl-etc/。替换上面代码中的输入值,即可得到预批密钥。

    【讨论】:

    • 我的回答有帮助吗?究竟是什么问题?
    • @NikosM。您的答案有有用的链接,但实际上我在您发布之前就已经想到了...问题是输入数据的打包,这些数据以 [dictionary, @"key"] 的形式完成,例如 [[NSDictionary alloc] initWithObjectsAndKeys:@ "en_US", @"errorLanguage", nil], @"requestEnvelope",
    【解决方案3】:

    工作代码。请检查。

    int amount = 195;
    // int x  = 146;
    
    
    NSDictionary *parameters;
    parameters = @{
                   @"actionType"            : @"PAY",
                   @"currencyCode"      : @"USD",
                   @"receiverList"       : @{@"receiver" : @[@{@"amount": [NSNumber numberWithInt:amount],@"email":@"testerigniva12@gmail.com"}]},
                   @"returnUrl"          : @"https://example.com/return",
                   @"cancelUrl"       :  @"https://example.com/cancel",
                   @"requestEnvelope"  : @{@"errorLanguage":@"en_US", @"detailLevel":@"ReturnAll"}
                   };
    
    
    
    
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters
                                                       options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                        error:&error];
    
    
    
     NSURL *url = [NSURL URLWithString:@"https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:30.0];
    
    
    [request setHTTPMethod:@"POST"];
    
    //headers
    [request addValue:@"testios1_api1.grr.la" forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"];
    [request addValue:@"TP3DRR4WLYAJ5HWR" forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"];
    [request addValue:@"AKiJVI-zRf1GGbfcTE2iPRb31l2ZAdq7HY4WrG6uxNAhc79Vtg7myGk3" forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"];
    //NV
    [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"];
    [request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"];
    
    [request addValue:@"APP-80W284485P519543T" forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"];
    
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"en_US" forHTTPHeaderField:@"Accept-Language"];
    
    
    [request setHTTPBody:jsonData];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                      {
                                          // do something with the data
                                          NSDictionary* revDicn =[NSDictionary dictionary];
                                          revDicn = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
                                          NSLog(@"Response: %@", revDicn);
    
                                      }];
    [dataTask resume];
    

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2017-12-29
      • 1970-01-01
      相关资源
      最近更新 更多