苹果关于微信网页支付和支付宝支付遇到的一些问题

1.微信网页支付,支付宝网页支付(现在都是用wkwebview,就不在写关于webview的了)

static const NSString *CompanyFirstDomainByWeChatRegister = @"com.cn";

// 在收到响应后,决定是否跳转

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{

NSLog(@"在收到响应后:%@",navigationResponse.response.URL.absoluteString);

//允许跳转

decisionHandler(WKNavigationResponsePolicyAllow);

//不允许跳转

//decisionHandler(WKNavigationResponsePolicyCancel);

}

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

{

// 如果是跳转一个新页面

if (navigationAction.targetFrame == nil) {

NSString    *str = [navigationAction.request.URL absoluteString];;

if ([str rangeOfString:@"outjbtmwv"].location != NSNotFound) {

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

}else{

[webView loadRequest:navigationAction.request];

}

}

NSURLRequest *request        = navigationAction.request;

NSString     *scheme         = [request.URL scheme];

// decode for all URL to avoid url contains some special character so that it wasn't load.

NSString     *absoluteString = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];

NSLog(@"Current URL is %@",absoluteString);

static NSString *endPayRedirectURL = nil;

NSString *wxpayurl = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";

//这个地址最好加密一下预防苹果商店上线检测到  如果嫌麻烦不想写 简单拆分一下 在拼接一下字符串也可以

if ([absoluteString hasPrefix:wxpayurl] && ![absoluteString hasSuffix:[NSString stringWithFormat:@"redirect_url=ceshi.%@://",CompanyFirstDomainByWeChatRegister]])  {

//[NSString stringWithFormat:@"redirect_url=ceshi.%@://",CompanyFirstDomainByWeChatRegister]

//这里其实  是你的微信商户的域名根据自己的商户域名自行配置  比如 http://ceshi.com.cn/

decisionHandler(WKNavigationActionPolicyCancel);

NSString *redirectUrl = nil;

if ([absoluteString containsString:@"redirect_url="]) {

NSRange redirectRange = [absoluteString rangeOfString:@"redirect_url"];

endPayRedirectURL =  [absoluteString substringFromIndex:redirectRange.location+redirectRange.length+1];

redirectUrl = [[absoluteString substringToIndex:redirectRange.location] stringByAppendingString:[NSString stringWithFormat:@"redirect_url=ceshi.%@://",CompanyFirstDomainByWeChatRegister]];

}else {

redirectUrl = [absoluteString stringByAppendingString:[NSString stringWithFormat:@"&redirect_url=ceshi.%@://",CompanyFirstDomainByWeChatRegister]];

}

NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:XDX_URL_TIMEOUT];

newRequest.allHTTPHeaderFields = request.allHTTPHeaderFields;

newRequest.URL = [NSURL URLWithString:redirectUrl];

[webView loadRequest:newRequest];

return;

}

// Judge is whether to jump to other app.

//配置一下程序里面的URL Schemes字段

if (![scheme isEqualToString:@"https"] && ![scheme isEqualToString:@"http"]) {

decisionHandler(WKNavigationActionPolicyCancel);

if ([scheme isEqualToString:@"ceshiwxjump"]) {

if (endPayRedirectURL) {

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:endPayRedirectURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20]];

}

}else if ([scheme isEqualToString:[NSString stringWithFormat:@"ceshi.%@",CompanyFirstDomainByWeChatRegister]]) {

}

NSString* reqUrl = request.URL.absoluteString;

//                 if ([reqUrl hasPrefix:@"alipays://"] || [reqUrl hasPrefix:@"alipay://"])

//支付宝

if ([reqUrl hasPrefix:@"alipays"] || [reqUrl hasPrefix:@"alipay"]) {

//替换fromAppUrlScheme 为 本APP的UrlSheme

//                    NSString *newStr = [self changeScheme:request.URL.absoluteString];

//                  NSURL *url = [NSURL URLWithString:newStr];

NSString *payStr = @"alipays";

//ceshiSchemes     自己项目的URl Schemes   根据自己的项目自行配置

NSString *strUrl = [reqUrl stringByReplacingOccurrencesOfString:payStr withString:@"ceshiSchemes"];

NSURL *url = [NSURL URLWithString:strUrl];

[[UIApplication sharedApplication]openURL:url];

//bSucc是否成功调起支付宝

}

BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:request.URL];

if (canOpen) {

[[UIApplication sharedApplication] openURL:request.URL];

}

return;

}

decisionHandler(WKNavigationActionPolicyAllow);

}

//配置微信的URl Schemes  这个Schemes 就用你的微信商户域名用于微信支付成功之后跳转返回自己的APP使用

//对于 微信返回之后网页刷新的问题可以在AppDelegate里面设置

// NOTE: 9.0以后使用新API接口

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

{

//支付支付返回检测 其实支付宝 用不到这个方法  因为支付宝网页支付成功后台可以设在支付成功之后刷新的网页  不用前端去处理,具体问题咨询一下写网页的同事 .

//有需要的就这个方法去刷新界面

if ([url.host isEqualToString:@"safepay"]) {

//跳转支付宝钱包进行支付,处理支付结果

[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshZFH5Pay" object:@"1"];

}

//微信网页支付返回监听  这个方法是为了 有的网页支付成功之后 需要刷新网页改变网页内容 这个只能监听到从微信返回 并不能检测你网页是支付成功

//ceshi.com.cn    自己微信的商户域名 根据自己的微信商户域名自行配置

if ([url.scheme containsString:@"ceshi.com.cn"]) {

//通知方法不做多余解释了

[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshWXH5Pay" object:@"1"];

}

return YES;

}

苹果关于微信网页支付和支付宝支付遇到的一些问题相关推荐

  1. html发起微信或支付宝支付,vue实现-微信网页中唤起支付宝支付

    微信浏览器内是无法唤起支付宝的,会提示在浏览器打开,类似下面 image.png 所以在微信公众号的支付宝支付最终是通过手机浏览器唤起的支付宝支付,按照手机网站的支付方式即可. 官方也有demo,官方 ...

  2. 微信支付和支付宝支付整合(含设计模式1)

    微信支付和支付宝支付整合(含设计模式1) 1.说明: 设计模式:单例+策略模式+抽象 在开发中经常对接微信支付和支付宝支付,相对来说,阿里的文档比微信的接口文档清晰一点,这里用的第三方库(com.gi ...

  3. 微信公众号:支付宝支付

    微信公众号:支付宝支付 微信公众号:支付宝支付 由于支付宝月微信是两个对立的企业,支付宝想介入微信的充值,微信发现就将其规避,在支付宝与微信博弈的过程中,双方一直是处于你争我赶的地步. 微信公众号接入 ...

  4. java实现微信支付与支付宝支付接口

    因为公司要求需要写支付宝支付与微信支付现在写完了,总结一下: 支付宝支付: 支付宝支付比较简单首先我说一下支付宝支付与微信支付大概的流程,就拿支付宝支付来说(微信同理) 首先去蚂蚁金服注册一下App ...

  5. springboot版本的微信支付和支付宝支付

    最近公司需要做一个在微信公众号中实现支付宝支付的项目 网上找了很多资料和问了好久的支付宝客服 终于整理出一份跑的通的项目 注意:微信支付和支付宝支付需要公司资质 微信公众号中使用微信支付是JSAPI进 ...

  6. “一码多付”,微信支付、支付宝支付

    写着写着,越写越多,思绪写不下了,回头写在前面的话.此系统属个人创业项目,历时3个月,主要实现自助按摩椅.娃娃机.自动换币器功能,主要流程就是用户扫码二维码->授权获取用户信息->弹出H5 ...

  7. 使用uniapp开发字节跳动小程序的微信支付和支付宝支付(后端PHP,tp5)

    使用uniapp开发字节跳动小程序的微信支付和支付宝支付(后端PHP,tp5) 准备工作 微信支付配置 支付宝支付配置 字节跳动配置 1,微信支付配置: 开通微信支付的h5支付,关联APPID,保存k ...

  8. 个人开发者微信支付和支付宝支付

    个人开发者是不能申请微信支付和支付宝支付的 很多第三方使用添加二维码监听转账操作来实现是否功能

  9. 个人开发者只要一行代码接入微信支付和支付宝支付

    接入支付功能   对于个人开发者来说,我们很希望我们开发的App被广泛使用,同时可以获得一些额外收入,那就更好了.但是在微信开放平台或者支付宝开放平台申请支付功能,需要是企业才可以接入,对于我们个人开 ...

最新文章

  1. linux locale文件,Linux 怎样修改locale语言设置
  2. nagios用NsClient自定义windows监控
  3. seleniumpython定位网页元素方法_使用Selenium对网页元素进行定位的诸种方法
  4. code forces 436 C. Bus
  5. 链表冒泡排序java_055-冒泡排序算法代码实现
  6. 动网论坛帖子跟帖展开/关闭测试
  7. 八十年代的计算机游戏,儿时小霸王的记忆 八十年代最伟大的二十款游戏
  8. linux安装水星网卡驱动,centos7.5 安装无线网卡驱动
  9. Vue使用Echarts控件实现图表设计
  10. 程序猿头头(this的绑定)
  11. 利用python爬取租房信息网_python实战计划:爬取租房信息
  12. 一行 Python 的丧心病狂
  13. H3C交换机远程端口镜像配置
  14. 解决Redis manger 连接不上linux redis的问题
  15. [问题解决]电脑有线 连接天翼光猫 不分配ip 电脑有线无法上网
  16. ClickHouse函数操作大全
  17. 问答学习系统 - 针式PKM V8.20新增功能
  18. 数据分析找不到数据?200个源数据网站全给你!
  19. 称重传感器的构造与测重形式
  20. 使用C++的CCF-CSP满分解决方案 202206-2 寻宝!大冒险!点集

热门文章

  1. 计算机b级考试试题加答案,2020年度4月全国计算机等级考试一级B试题及答案.doc...
  2. 度量两个矩阵的相似性
  3. 软件测试工作总结(一)
  4. ExoPlayer google 试用exoplayer:r2.3.0
  5. 法兰克机械手手动操作_法兰克机械手操作说明
  6. 微信小程序WebSocket心跳检测与断来重连
  7. 如何写好外贸函电?利用7C原则
  8. resnet 20 和resnet 56
  9. 物联网、智慧城市、增强现实(AR)与虚拟现实(VR)、区块链技术、语音识别、人工智能、数字汇流是大数据未来应用的七大发展方向
  10. 微信小程序点单左右联动的效果实现