由于项目对接国外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];
本文介绍在iOS开发中,如何利用WKWebView解决POST请求的问题,通过模仿前端form表单提交方式,实现了与k-plus支付平台的有效对接。

532

被折叠的 条评论
为什么被折叠?



