与第三方H5联调跳转微信与支付宝遇到的问题
需求:支持当前APP从H5支付页面调起微信或支付宝
问题1:无法唤起支付宝APP
解决方法:支付宝平台文档中心
问题2:微信返回跳转到Safari
解决方法:微信支付返回Safari问题
1.H5同事配置相关地址www.XXX.com
2.在APP工程配置中设置URL Scheme,与H5配置地址相同www.XXX.com
当能够正常跳转到微信和支付宝时,发现支付宝会停留支付宝页面,无法返回到APP,所以新增需求
需求:支持支付宝跳转回APP
解决方法:参考资料:支付宝H5支付无法返回APP
相关代码:
NSString*decodeString = [selfURLDecodedString:requestString];
NSRangerange = [decodeStringrangeOfString:@"{"];
NSString*frontString =@"";
if(range.length>0)
{
frontString = [decodeStringsubstringToIndex:range.location];
decodeString = [decodeStringsubstringFromIndex:range.location];
}
NSData *jsonData = [decodeString dataUsingEncoding:NSUTF8StringEncoding];
NSError*err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if ([[dic allKeys] containsObject:@"fromAppUrlScheme"]) {
NSMutableDictionary *mutDic = [NSMutableDictionary dictionaryWithDictionary:dic];
NSString*url =@"www.xxx.com";
[mutDicsetObject:urlforKey:@"fromAppUrlScheme"];
jsonData = [NSJSONSerialization dataWithJSONObject:mutDic options:NSJSONWritingPrettyPrinted error:&err];
NSString*jsonString =@"";
if(jsonData) {
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
decodeString = [selfURLEncodedString:jsonString];
requestString = [frontString stringByAppendingString:decodeString];
}
}
方法比较笨,先解码,找到数据后,修改然后重新编码,后续再看看有没有优化方法。
无论是微信还是支付宝都可以正常跳转回来后,发现了新的问题,原APP依然保留在跳转页面,用户需要逐级返回,不利于用户使用,随后又添加新需求。
需求:跳转到APP指定webView页面
操作:拦截微信、支付宝请求,从中获取到H5内嵌的订单页面,使用全局变量做存储
NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";
NSString *aliPayStr = @"https://openapi.alipay.com/gateway.do";
在NSString *url =@"www.XXX.com";从requestString中获取到微信的redirect_url或者是支付宝的return_url,在appDelegate回调方法(application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options)时,完成重定向,刷新界面
遇到问题:我们的APP使用的UIWebView加载网页,无法实现清除网页历史操作,会造成连续返回上一级操作重新跳入微信/支付宝问题,由H5同事完成清除历史记录操作,解决该问题。
所有问题解决后,测试发现一个新问题,在杀进程重进应用的情况下,收藏商品操作页面不刷新,又重新开始联调,最后发现是UIWebview缓存导致无法刷新问题
问题:UIWebview缓存导致无法刷新问题
我们尝试了以上链接的方法,无法修复该问题,最后与H5同事沟通后,决定在追加时间戳,做判断……