nixzhu / MonkeyKing

MonkeyKing helps you to post messages to Chinese Social Networks.
MIT License
2.76k stars 240 forks source link

wechatAuthToken 的获取 #206

Closed liuzhaoyong closed 2 years ago

liuzhaoyong commented 2 years ago

您好,我们是有集成微信sdk的。看了您的代码以后,我们想效仿一下。但是在获取wechatAuthToken的时候,发现获取回来的data数据,不能直接转为字符串,请问下知道为什么吗

NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;
    NSDictionary *query = @{(__bridge id)kSecAttrService: [NSString stringWithFormat:@"WeChatOpenSDKKeyChainService_%@",bundleId],
                             (__bridge id)kSecAttrAccount: @"WeChatOpenSDKKeyChainAccount",
                             (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
                             (__bridge id)kSecMatchLimit: (__bridge id)kSecMatchLimitOne,
                             (__bridge id)kSecReturnData: (__bridge id)kCFBooleanTrue,
                             (__bridge id)kSecReturnAttributes: (__bridge id)kCFBooleanTrue
    };
    CFTypeRef queryResults = NULL;
    CFErrorRef error = NULL;
    NSMutableDictionary *searchQuery = [[NSMutableDictionary alloc] initWithDictionary:query];
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchQuery, &queryResults);
    if (status == errSecSuccess) {
        NSDictionary *attributes = (__bridge_transfer NSDictionary *)queryResults;
        NSData *passwordData = attributes[(__bridge id)kSecValueData];
        NSString *dataString = [[NSString alloc] initWithData:passwordData encoding:NSUTF8StringEncoding];
        NSLog(@"12312312");

    }
liuzhaoyong commented 2 years ago

NSData passwordData = attributes[(__bridge id)kSecValueData]; NSPropertyListSerialization passwordPlist = [NSPropertyListSerialization propertyListWithData:passwordData options:NSPropertyListImmutable format:nil error:nil]; NSArray objectArr = [passwordPlist valueForKey:@"$objects"]; NSDictionary sData = objectArr[1]; NSData pData = sData[@"NS.data"]; NSString tokenStr = [[NSString alloc] initWithData:pData encoding:NSUTF8StringEncoding];