关于一网通支付
關(guān)于一網(wǎng)通支付:
很久沒有更新博客、多半是在學(xué)習(xí)的路上越走越遠(yuǎn)、也是因?yàn)樽罱诸^工作任務(wù)比較忙、剛好最近在調(diào)研一網(wǎng)通支付、網(wǎng)上的列子也不是很多、如果你去試過你可能會(huì)發(fā)現(xiàn)
大概都是跑不通的、雖然不難,但是初次集成可能也會(huì)遇到很多坑。所以在這里分享一下也會(huì)附帶demo,方便以后的開發(fā)者吧
對(duì)于三方的支付,這個(gè)大概是最令人討厭的,先吐槽一下,沒什么demo,僅僅有個(gè)java demo,也可能考慮客戶端開發(fā)不需要。但是這確實(shí)會(huì)帶來很多歧義的東西,不多說
先看集成過程
首先一網(wǎng)通支付,并不像銀聯(lián)支付,以及支付寶或者微信那樣,配置一下,調(diào)用sdk提供的對(duì)外方法,一網(wǎng)通支付才去的是web提交表單的形式,對(duì)于iOS開發(fā)者而言看似簡(jiǎn)單
卻有很多坑,對(duì)于iOS客戶端來如果想完成有兩個(gè)選擇或者WebView或者WKWebView,到目前為止很多項(xiàng)目大概都是在用WKWebView,兩種實(shí)現(xiàn)都會(huì)在下面提供,WebView
和WkWebView,對(duì)比而言從性能上WKWebView是絕對(duì)優(yōu)勢(shì)的,這里就不去討論
首先WebView集成:
- (void)testWebView
{
self.webView = [[UIWebView alloc]init];
self.webView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) ;
self.webView.delegate = self;
[self.view addSubview:self.webView];
NSString *payUrl = @"http://121.15.180.66:801/netpayment/BaseHttp.dll?MB_EUserPay";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:payUrl]];
[request setHTTPMethod:@"POST"];
NSString *jsonRequestData = [NSString stringWithFormat:@"jsonRequestData=%@",[self payJson]];
NSData *data = [jsonRequestData dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[self.webView loadRequest:request];
}
payUrl:是一網(wǎng)通提供的測(cè)試地址
jsonRequestData:這里要注意,否則很容易出現(xiàn)1123,參數(shù)不對(duì)的情況,
payJson:這里參考一網(wǎng)通提供的報(bào)文,也需要注意下
關(guān)于WKWebView集成:
WKWebView:如果正常情況下,按照WebView集成方式就可以了,也不需要分WK或者Web,WKWebView在這方面存在bug,可以去網(wǎng)上搜一下
當(dāng)然對(duì)于通過post提交form網(wǎng)上也有解決方案,一種是通過請(qǐng)求的方式,一種是js的方式,處理這個(gè)也是按照js的方式來處理
- (void)testWkWebView
{
self.needLoadJSPOST = YES;
self.wkWebView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.wkWebView.navigationDelegate = self;
self.wkWebView.UIDelegate = self;
NSString *path = [[NSBundle mainBundle] pathForResource:@"JSPOST" ofType:@"html"];
NSString *html = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.wkWebView loadHTMLString:html baseURL:[[NSBundle mainBundle] bundleURL]];
[self.view addSubview:self.wkWebView];
}
// 加載完成的代理方法
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
if (self.needLoad) {
[self postRequestWithJS];
self.needLoad = NO;
}
}
// 調(diào)用JS發(fā)送POST請(qǐng)求
- (void)postRequestWithJS {
NSString *urlStr = @"http://121.15.180.66:801/netpayment/BaseHttp.dll?MB_EUserPay";
NSString *jscript = [NSString stringWithFormat:@"post('%@', '%@');", urlStr,[self convertToJsonData]];
[self.wkWebView evaluateJavaScript:jscript completionHandler:^(id object, NSError * _Nullable error) {
self.needLoad = NO;
}];
}
對(duì)于JSPOST而言就是為了處理這種請(qǐng)求
<html>
<head>
<script>
function post(path, params) {var method = "post";var form = document.createElement("form");form.setAttribute("method", method);form.setAttribute("action", path);var hiddenField = document.createElement("input");hiddenField.setAttribute("type", "hidden");hiddenField.setAttribute("name", "jsonRequestData");hiddenField.setAttribute("value", params);form.appendChild(hiddenField);document.body.appendChild(form);form.submit();}</script>
</head>
<body>
</body>
特別需要注意的:調(diào)用方式 post('URL', {'key': 'value'})
注意jsonRequestData,因此只需要處理json,否則又會(huì)讓你懷疑人生
以及convertToJsonData:json
以上只是集成后面會(huì)繼續(xù)對(duì)完成支付的調(diào)用等來進(jìn)行處理不同的產(chǎn)品處理方式可能不一樣,就不做敘述。
當(dāng)然多半是網(wǎng)上查資料,有很多參考。只是很多都沒有跑通,提供一個(gè)demo,或許可以讓你少走很多彎路。
總結(jié)
- 上一篇: 淘宝十年资深架构师吐血总结淘宝的数据库架
- 下一篇: 小菊花宝宝课堂开课了,教你认识各种形状—