WKWebView的POST请求,以form表单形式提交

本文介绍在iOS开发中,如何利用WKWebView解决POST请求的问题,通过模仿前端form表单提交方式,实现了与k-plus支付平台的有效对接。

由于项目对接国外k-plus支付,第三方在接口请求链接需要post发送参数,记忆中用以下方式即可,后面发现此方法在WKWebView并不可行~~

        NSString *strUrl = @"请求的url";
        NSMutableURLRequest *urlRequest =  [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]];
        urlRequest.cachePolicy = NSURLRequestUseProtocolCachePolicy;
        
        if (HB_CHECK_VALID_DICTIONARY(self.params)) {
            NSString *body = nil;
            for (NSString *key in self.params.allKeys) {
                if ([self isEmptyString: body]) {
                    body = [NSString stringWithFormat:@"%@=%@",key,self.params[key]];
                }else{
                    body = [NSString stringWithFormat:@"%@&%@=%@",body,key,self.params[key]];
                }
            }
            [urlRequest setHTTPMethod: @"POST"];
            [urlRequest setHTTPBody: [body dataUsingEncoding:NSUTF8StringEncoding]];
        }
        [self.webView loadHTMLString:url baseURL:nil];

跟前端沟通,给我反馈她们在加载页面时提交了form表单,鉴于去年接触了过前端开发,因此参考前端方法在iOS中进行了事件,结合后端提供的参考html;

<form method="POST" action="域名url">
<input type="hidden" name="merchant2" value="34656">
<input type="hidden" name="amount2" value="000000000113">
<input type="hidden" name="url2" value="url">
<input type="hidden" name="respurl" value="地址">
<input type="hidden" name="ipcust2" value="ip">
<input type="hidden" name="detail2" value="Thailand Wallet">
<input type="hidden" name="invmerchant" value="000000000319">
<input type="hidden" name="shopid" value="00">
<!-- Merchant custom fields -->
<input type="hidden" name="checksum" value="c7ee1398d1a07a5e68a659c14da79b7a">
<input type="hidden" name="ref1" value="000000000000000369">
<input type="hidden" name="ref2" value="000000000000000369">
<input type="hidden" name="info1" value="Thailand Wallet">
<input type="hidden" name="info2" value="Thailand Wallet">
<input type="hidden" name="timeout" value="20200214 12:14:52">

<button>提交</button>
</form>

首先添加一个宏定义

#define POST_JS @"function wkwebview_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 hiddenFild = document.createElement(\"input\");\
        hiddenFild.setAttribute(\"type\", \"hidden\");\
        hiddenFild.setAttribute(\"name\", key);\
        hiddenFild.setAttribute(\"value\", params[key]);\
    }\
    form.appendChild(hiddenFild);\
}\
document.body.appendChild(form);\
form.submit();\
}"

接下来在viewDidLoad加载,把post的参数转成一个json字符串,通过js的from表单提交post请求。

        NSString * dataStr = [HBMockJson jsonStringWithDictionary:self.params];
        // 最终要执行的JS代码
        NSString * js = [NSString stringWithFormat:@"%@wkwebview_post(\"%@\", %@)",POST_JS,url,dataStr];
        // 执行JS代码
        [self.webView evaluateJavaScript:js completionHandler:nil];

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值