iOS H 5は微信を呼び出し、アリペイの支払いはappソリューションに戻ることができません
最新のプロジェクトではH 5ページで微信、支付宝クライアントの支払いを呼び出す需要に遭遇したが、これは推奨のやり方ではないが、需要は確かに存在する.のh 5ページをロードして、支払いが必要なクライアント(微信または支付宝)をクリックします.
WeChat決済ソリューション:
1.まず、自分のプロジェクトのschemeを設定し、LSApplicationQueriesSchemesにweixinを追加します.
2.支払いをクリックするとshouldStartLoadWithRequestコールバックメソッドでhttps://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?....このような接続は、あなたの支払いリンクであり、webViewのロードが完了すると、微信/支付宝を呼び出して支払うことができます.
3.支払いが完了すると、成功しても失敗してもSafariブラウザに転送されます.
4.支払いが完了してappに戻るには、コールバックのURLアドレスをブロックする必要があります.コールバックのURLにはredirect_を接続しないでください.url、さもないとブラウザにジャンプします.
5.最後にReferをwww.xxx.に設定します.com://scheme設定:www.xxx.comは直接アプリに戻ることができます.(www.xxx.comこれはH 5ライセンスのドメイン名でなければなりません).
アリペイ決済ソリューション:
1.まず、自分のプロジェクトのschemeを設定し、LSApplicationQueriesSchemesにalipayを追加します.
2.WeChat支払いと同様にshouldStartLoadWithRequestコールでUrlSchemeをブロックし、プロジェクトで設定したUrlSchemeに置き換えます.
コードは次のとおりです.
WeChat決済ソリューション:
1.まず、自分のプロジェクトのschemeを設定し、LSApplicationQueriesSchemesにweixinを追加します.
2.支払いをクリックするとshouldStartLoadWithRequestコールバックメソッドでhttps://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?....このような接続は、あなたの支払いリンクであり、webViewのロードが完了すると、微信/支付宝を呼び出して支払うことができます.
3.支払いが完了すると、成功しても失敗してもSafariブラウザに転送されます.
4.支払いが完了してappに戻るには、コールバックのURLアドレスをブロックする必要があります.コールバックのURLにはredirect_を接続しないでください.url、さもないとブラウザにジャンプします.
5.最後にReferをwww.xxx.に設定します.com://scheme設定:www.xxx.comは直接アプリに戻ることができます.(www.xxx.comこれはH 5ライセンスのドメイン名でなければなりません).
アリペイ決済ソリューション:
1.まず、自分のプロジェクトのschemeを設定し、LSApplicationQueriesSchemesにalipayを追加します.
2.WeChat支払いと同様にshouldStartLoadWithRequestコールでUrlSchemeをブロックし、プロジェクトで設定したUrlSchemeに置き換えます.
コードは次のとおりです.
//UIwebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
//
NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?";
if ([request.URL.absoluteString hasPrefix:wxPre]) {
// redirect_url,
NSString *string1 = request.URL.absoluteString;
// redirect_url
NSString *string2 = [string1 stringByReplacingOccurrencesOfString:@"redirect_url=http://www.xxx.com/ad_list.php" withString:@""];
NSURL *newURL = [NSURL URLWithString:string2];
// webView
UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectZero];
[self.view addSubview:web];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSMutableURLRequest* newResult = [NSMutableURLRequest requestWithURL:newURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[newResult setHTTPMethod:@"GET"];
[newResult setValue:@“www.xxx.com://" forHTTPHeaderField: @"Referer"];
[web loadRequest:newResult];
});
});
}
//
NSString *reqUrl = request.URL.absoluteString;
if ([reqUrl hasPrefix:@"alipays://"] || [reqUrl hasPrefix:@"alipay://"]) {
reqUrl = [self URLDecodeString:reqUrl];
// fromAppUrlScheme APP UrlSheme
NSString *newStr = [self changeScheme:request.URL.absoluteString];
NSString *encodeValue = [newStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:encodeValue];
[[UIApplication sharedApplication]openURL:url options:nil completionHandler:nil];
return NO;
}
return YES;
}
// UrlScheme
- (NSString *)changeScheme:(NSString *)str{
NSArray *paramsArr = [str componentsSeparatedByString:@"?"];
NSDictionary *dict = [self jsonToMessageDict:paramsArr.lastObject];
NSMutableDictionary *mDict = [NSMutableDictionary dictionaryWithDictionary:dict];
mDict[@"fromAppUrlScheme"] = @"your Url Scheme";
NSString *jsonStr = mDict.mj_JSONString; //MJExtension
return [NSString stringWithFormat:@"%@?%@",paramsArr.firstObject,jsonStr];
}
- (NSDictionary *)jsonToMessageDict:(id)messageJson{
NSDictionary *messageDict = [NSJSONSerialization JSONObjectWithData:[messageJson dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
return messageDict ? : @{};
}
- (NSString *)URLDecodeString:(NSString *)str{
NSString *decodeString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)str, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
return decodeString;
}