美文网首页
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