iOS版實現微信掃碼登陸(適用于店鋪收銀端類型App)

因為近期項目需要,要在項目中實現顧客微信掃碼登陸會員。所以要做出和一號店類似的掃碼登陸,或掃碼注冊。所以研究了一下微信開放平臺的掃碼登陸(真心不容易??.....)。
微信掃碼中先需要在網頁中顯示二維碼,而這個二維碼是有時限的,不斷變化。這樣才能保證安全性。并且,二維碼的掃描頁面是根據掃描或未掃描進行變化的,如果想把二維碼放在iOS項目中,就要將掃碼頁面做成網頁。也許有更好的辦法,但是項目太緊,所以我就只找到這一個辦法,如果有什么錯誤請指出,謝謝。
下面就說說我實現的步驟。
1.做掃碼頁面需要微信平臺的各種權限。所以嘍,自己先申請到微信平臺申請一下吧。
微信開放平臺
Ps:因為實現的是微信網頁登陸所以利用微信網站應用

微信開放平臺.png

2.以上申請完層以后進入正題。先根據自己需求創建一個UIViewController,或者一個View。接著定義WebView

@interface WeChatLoginViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *loginWebView;
@property (nonatomic, strong) NSString * Url;
@property (nonatomic, strong) AFHTTPSessionManager *mgr;
@property (nonatomic, strong) AFHTTPSessionManager *manager;
@end

3.在頁面中加載二維碼網址我將WebView設置在viewDidLoad中

- (void)viewDidLoad {
    [super viewDidLoad];
    self.loginWebView.delegate = self;
    self.Url = @"https://open.weixin.qq.com/connect/qrconnect?appid=(申請得到)&redirect_uri=(申請得到)&response_type=code&scope=snsapi_login&state=.....(具體微信API中有介紹)";
    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:_Url]];
    [self.loginWebView loadRequest:request];
    // Do any additional setup after loading the view from its nib.
}

4.實現WebView的delegate,可以在delegate中具體實現自己的其它需求

#pragma mark - Delegate
//開始加載
- (void)webViewDidStartLoad:(UIWebView *)webView{
    NSLog(@"開始");
}
//加載出錯
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    NSLog(@"錯誤");
}
//加載完成
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"完成");
}

5.獲取網絡請求的delegate(這個步驟以后才是主要),根據獲取的url進行判斷,截取需要的code,進行請求access_token

//獲取url
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    NSString * urlString = [[request URL]absoluteString];
    NSLog(@"urlString:%@",urlString);
    if ([urlString isEqualToString:self.Url]) {
        return YES;
    }else{
        NSRange range = [urlString rangeOfString:@"&"];//匹配得到的下標
        NSString * string = nil;
        NSLog(@"rang:%@",NSStringFromRange(range));
        
        string = [urlString substringToIndex:range.location];//截取掉下標index之后的字符串
        NSLog(@"string:%@",string);
        
        NSRange range1 = [urlString rangeOfString:@"="];//匹配得到的下標
        string = [string substringFromIndex:range1.location];//截取掉下標2之前的字符串
        NSLog(@"string:%@",string);
        string = [string stringByReplacingOccurrencesOfString:@"=" withString:@""];
        NSLog(@"string:%@",string);
        [self requestWeChat:string];
        return NO;
    }
    
}

6.開始獲取微信平臺數據

- (void)requestWeChat:(NSString *)code{

    NSString * strUrl = @"https://api.weixin.qq.com/sns/oauth2/access_token";
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    parameters[@"appid"] = (自己的APPID);
    parameters[@"secret"] = (secret);
    parameters[@"code"] = code;
    parameters[@"grant_type"] = @"authorization_code";

    
    [self.mgr POST:strUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"%@",responseObject);
        if (responseObject[@"access_token"] != nil) {
            
            NSString * strUrl1 = @"https://api.weixin.qq.com/sns/userinfo";
            NSMutableDictionary *parameters1 = [NSMutableDictionary dictionary];
            parameters1[@"access_token"] = responseObject[@"access_token"];
            parameters1[@"openid"] = responseObject[@"openid"];
            [self.mgr POST:strUrl1 parameters:parameters1 progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                
                NSLog(@"%@",responseObject);
              //此處請求到的  responseObject就是可以拿到的客戶微信開放信息,包括微信名,性別等。。。。。
              //拿到數據以后可以按照自己項目的需求進行下一步功能。
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                NSLog(@"error:%@",error);
            }];

        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];
}

ps:后續會上傳效果gif。小弟拙作,如有錯誤請??指出。小弟在此拜謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,075評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,200評論 4 61
  • 明天就是六一兒童節了!晚上下班回到家就看到女兒又在練習廣場舞!看來她還是很喜歡能夠參加六一兒童節親子廣場舞的!看了...
    圊罙儀鍾閱讀 89評論 0 0
  • 爬蟲就是能夠獲取網頁內容,或者網頁上資源的程序。因為每個頁面的結構、邏輯可能都不一樣,獲取網頁上資源的方式不都是一...
    安心遠閱讀 765評論 1 2
  • 我探頭向廁所里望了一望,看那身形和練功服的樣式,果真像是康菲菲。 “菲菲……”我喊了一聲她的名字,希望她能應一聲,...
    知遙閱讀 1,143評論 6 6