美文网首页
iOS开发笔记-32: 招行一网通集成(参数格式错误等)

iOS开发笔记-32: 招行一网通集成(参数格式错误等)

作者: 原味蛋炒饭 | 来源:发表于2017-04-13 09:54 被阅读136次

    网上虽然文档比较少,但是还是有一些的,相同的我就不重复了
    一般问题找他们客服,
    我写一下客服填不了的坑:
    提示参数格式错误:
    因为ios推出wkwebview,然后wkwebview有个坑是:post请求,丢失body数据。
    直接写解决方法:

    新建JSPOST.html(stack overflow上的解决方法)
    <html>
        <head>
            <script>
                //调用格式: post('URL', {'key': 'value'});注意这里,网上有些地方写着是post('URL', {"key": "value"});反正我是踩过这个坑了
                function post(path, params) {
                    var method = "post";
                    var form = document.createElement("form");
                    form.setAttribute("method", method);
                    form.setAttribute("action", path);
                    
                    for(var key in params) {
                        if(params.hasOwnProperty(key)) {
                            var hiddenField = document.createElement("input");
                            hiddenField.setAttribute("type", "hidden");
                            hiddenField.setAttribute("name", key);
                            hiddenField.setAttribute("value", params[key]);
                            
                            form.appendChild(hiddenField);
                        }
                    }
                    document.body.appendChild(form);
                    form.submit();
                }
            </script>
        </head>
        <body>
        </body>
    </html>
    
      //webView的请求配置
      //请求的页面地址
      _url = outerURL;
       //这里是提交的表单数据
        _body = [NSString stringWithFormat: @"'jsonRequestData':'%@'", loadParam];
        JJLog(@"%@",_body);
        // 获取JS所在的路径
        NSString *path = [[NSBundle mainBundle] pathForResource:@"JSPOST" ofType:@"html"];
        // 获得html内容
        NSString *html = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        // 加载js
        [self.webView loadHTMLString:html baseURL:[[NSBundle mainBundle] bundleURL]];
    
    然后调用就是wkwebview调用 js来提交表单
    #pragma mark - WKNavigationDelegate
    // 加载完成的代理方法
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
        // 判断是否需要加载(仅在第一次加载)
        if (fist) {
    
    _body = [NSString stringWithFormat: @"'jsonRequestData':'%@'", param];
    注意这里的格式,别用oc的",要用js的',否则还是会出现格式不对,开始怀疑人生233,param就是生成的报文组织,报文内容的问题,对照官方文档http://121.15.180.72/OpenAPI2/API/PWDPayAPI4.aspx#jvch3
           // 发送POST的参数
        NSString *postData = _body;
        // 请求的页面地址
        NSString *urlStr = _url;
        // 拼装成调用JavaScript的字符串
        NSString *jscript = [NSString stringWithFormat:@"post('%@',{%@});", urlStr, postData];
        
         NSLog(@"Javascript: %@", jscript);
        // 调用JS代码
        [self.webView evaluateJavaScript:jscript completionHandler:^(id object, NSError * _Nullable error) {
            
        }];
        fist = no;
    
        }
    }
    

    (ps:一网通在ios8以下是使用uiwebview的,注意兼容)
    当然ios8以上使用uiwebview是会出错的(出错的原因是ios8以上,安全键盘是默认调用wkwebview的方法,如果使用uiwebview的话,就会向uiwebview响应wkwebview的方法,找不到wkwebview的方法,然后就报错了),你必须要用wkwebview。所以基本上你是绕不开wkwebview的post

    相关文章

      网友评论

          本文标题:iOS开发笔记-32: 招行一网通集成(参数格式错误等)

          本文链接:https://www.haomeiwen.com/subject/caavattx.html