2016-12-15 14 views
0

Площадь недавно удалила требование авторизации продавца OAuth, как описано here в разделе «Инициирование транзакции Square Register из вашего приложения».iOS Квадратный регистр Popover OpenURL Issue

Когда мое приложение выскакивает к приложению Square регистра, предупреждение появляется всплывающее окно на Площадь приложении говорит:

"API Error: No client ID specified"

несмотря на то, что я четко перечислить мой «client_id» в моем приложении, когда я взываю к открытый квадрат. Мой код ниже. Любые идеи, как это исправить?

-(void)squarePaymentWithName:(NSString *)name{ 
//Specify amount of money to charge 
float orderPriceFloat = [Order orderTotalPrice]; 
float orderPriceFloatCents = orderPriceFloat * 100; 
NSInteger orderPriceFloatCentsInteger = [[NSNumber numberWithFloat:orderPriceFloatCents] integerValue]; 
NSString *amountString = [NSString stringWithFormat:@"%ld", (long)orderPriceFloatCentsInteger]; 

NSDictionary *squareDictionary = @{@"callback_url": @"<CALLBACK_URL>", 
            @"client_id": @"<CLIENT_ID>", 
            @"version": @"1.2", 
            @"amount_money": 
             @{@"amount": amountString, 
             @"currency_mode":@"USD" 
             }, 
            @"options": 
             @{@"supported_tender_types": @[@"CREDIT_CARD", @"SQUARE_GIFT_CARD"], 
             @"auto_return": @"true" 
             } 
            }; 
NSString *jsonString = [NSString stringWithFormat:@"%@", squareDictionary]; 

NSString *encodedString = [jsonString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //encode the string 
NSString *scheme = [NSString stringWithFormat:@"square-commerce-v1://payment/create?data=%@", encodedString]; //input the string to the url 

UIApplication *application = [UIApplication sharedApplication]; 
NSURL *URL = [NSURL URLWithString:scheme]; 
BOOL canOpen = [application canOpenURL:URL]; //open the url 
[application openURL:URL]; 
} 

NSLog из jsonString является:

{ 
"amount_money" =  { 
    amount = 250; 
    "currency_mode" = USD; 
}; 
"callback_url" = CALLBACK_URL; 
"client_id" = CLIENT_ID; 
options =  { 
    "auto_return" = true; 
    "supported_tender_types" =   (
     "CREDIT_CARD", 
     "SQUARE_GIFT_CARD" 
    ); 
}; 
version = "1.2"; 
} 

NSLog из encodedString является: Percent-encoded String

И, как записку, 'CALLBACK_URL' и 'CLIENT_ID' вход I являются заполнители, так как я не хотел вводить реальные значения.

Спасибо!

+0

Вы пытались использовать наш SDK? Это делает немало вещей, которые вы пытаетесь сделать намного проще. https://github.com/square/SquareRegisterSDK-iOS – tristansokol

+1

В моем родном приложении iOS используется Cocoa Pod SquareRegisterSDK. В качестве примечания, мое приложение является сторонним приложением, которое выводит пользователей на квадрат для оплаты, а затем выводит их обратно в мое приложение. – mdimarca

+1

Я предполагаю, что проблема заключается в том, чтобы преобразовать NSDictionary, который я создаю, с данными в строку, но у меня не получилось работать, несмотря на то, что они возились. Любые идеи, из которых может возникнуть проблема? – mdimarca

ответ

0

Вот код, который я использовал, который работал:

NSDictionary *squareDictionary = @{@"callback_url": CALLBACK_URL, 
            @"client_id": CLIENTID, 
            @"version": @"1.2", 
            @"notes": notes, 
            @"state": name, 
            @"amount_money": 
             @{@"amount": amountString, 
             @"currency_code":@"USD" 
             }, 
            @"options": 
             @{@"supported_tender_types": @[@"CREDIT_CARD"], 
             @"auto_return": @"true" 
             } 
            }; 

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:squareDictionary 
                options:NSJSONWritingPrettyPrinted 
                error:&error]; // Pass 0 if you don't care about the readability of the generated string 

NSString *jsonString; 
if (! jsonData) { 
    NSLog(@"Got an error: %@", error); 
} else { 
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

    NSString *encodedString = [jsonString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //encode the string 

    NSString *scheme = [NSString stringWithFormat:@"square-commerce-v1://payment/create?data=%@", encodedString]; //input the string to the url 

    UIApplication *application = [UIApplication sharedApplication]; 
    NSURL *URL = [NSURL URLWithString:scheme]; 
    BOOL canOpen = [application canOpenURL:URL]; //open the url 
    if (canOpen) { 
     [application openURL:URL]; 
    } else { 
     NSLog(@"couldn't open app"); 
    } 
}