iOS 微信和支付宝关于回调处理
在支付这一块,发现讲支付集成的比较多,但是关于支付后回调处理的不多见,(当时因为这个问题懵逼了好久)就自己总结一下,
1.支付宝回调
支付宝的回调想对来说比较简单一些,因为支付宝的回调就在调起支付宝的那个方法中的block中,
NSString *orderString = nil;
if (signedString != nil) {orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"]; [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSString * strTitle = [NSString stringWithFormat:@"支付结果"];
NSString *strMsg; //【callback处理支付结果】
if ([resultDic[@"resultStatus"] isEqualToString:@""]) { strMsg = @"恭喜您,支付成功!"; }else if([resultDic[@"resultStatus"] isEqualToString:@""])
{
strMsg = @"已取消支付!"; }else{
strMsg = @"支付失败!"; }
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show];
}];
}
上面我只对,成功,取消,失败 三种状态进行判断,想仔细了解可以查看官方文档。
2.微信支付的回调
首先,支付回调API的方法,这个方法中完全是按照官方文档写的,自己基本上不需要操作
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{ //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
}[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
}];
}
if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {
//微信支付回调
return [WXApi handleOpenURL:url delegate:self];
} //跳转处理
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//调用其他SDK,例如支付宝SDK等
}
return result; }
最后微信会调用下面这个方法,我是在这个方法中做的操作,由于这个方法是在AppDelegate中,如果在这里跳转到自己指定的页面,有些困难,
于是就在这个方法中发通知到调起支付的页面,再进行页面跳转操作。
//回调方法
-(void) onResp:(BaseResp*)resp
{
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
NSString *strTitle; if([resp isKindOfClass:[SendMessageToWXResp class]])
{
strTitle = @"发送媒体消息结果";
} if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"]; switch (resp.errCode) {
case WXSuccess:{
strMsg = @"恭喜您,支付成功!"; [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}]; break;
}
case WXErrCodeUserCancel:{
strMsg = @"已取消支付!";
[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
break;
}
default:{ strMsg = [NSString stringWithFormat:@"支付失败 !"];
[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
break;
}
} UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show];
} }
由于我们的取消和失败,2种状态的处理结果都是一样的,所以就用了相同的通知。
由于在调起支付页面,在调起前就已经注册了通知,现在支付完后,就可以收到支付状态的通知了。下面就很简单了吧
最后在说一下,
由于我们的付款性质不一样,所以就遇到了同样的支付成功状态,由于不同的支付类型要跳转的页面也是不同的,这就要求在AppDelegate中的那个处理方法中识别出,不同的支付类型,(如充值,购物等)但是这个方法是微信api回调的方法,它只返回成功,取消,失败等状态。那就只能是支付前做个识别标示,但是由于支付跳到api了,脱离了应用,这个识别标示又无法直接传过来。我想的方法就是保存一个支付标示:
[[NSUserDefaults standardUserDefaults] setObject:@"CHONGZHI" forKey:@"PAYTYPE"];
在每个类型的支付调起方法中,保存一下不同的key,然后再那个
-(void) onResp:(BaseResp*)resp
就总结到这吧!希望能帮到一些还在迷茫的新手,如有什么错误的地方请指出,谢谢!
iOS 微信和支付宝关于回调处理的更多相关文章
- ios微信公众号分享回调事件
IOS手机在分享成功后,回调事件无法正常执行,在回调方法里面加入: setTimeout(function () { //todo }, ); 例如: //分享 Share({ title: &quo ...
- iOS 支付(含支付宝、银联、微信)
资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...
- iOS支付宝SDK回调那坑
支付宝钱包支付接口开发包2.0标准版(iOS 2.2.1) ,回调不出来,demo给出的方法是: - (BOOL)application:(UIApplication *)application op ...
- iOS不用官方SDK实现微信和支付宝支付XHPayKit
作者:朱晓辉Allen 链接:https://juejin.im/post/5a90dd3a6fb9a0634912b755 前言 前段时间由于项目需求,移除了项目中的微信支付SDK和支付宝支付SDK ...
- iOS三方支付--微信支付/支付宝支付
一.微信支付 1.注册账号并申请app支付功能 公司需要到微信开放品台进行申请app支付功能 , 获得appid和微信支付商户号(mch_id)和API秘钥(key) . Appsecret(secr ...
- iOS微信支付集成
概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...
- IOS微信浏览器返回事件监听问题
业务需求:从主页进入A订单页面,然后经过各种刷新或点标签加载后点左上角的返回直接返回到主页 采取方法:采用onpopstate事件监听url改变,从而跳转到主页 遇到的问题:安卓上测试没问题:苹果手机 ...
- 移动端H5支付(微信和支付宝)
我们直接进入主题吧,先说功能: 1.用户通过我们的页面输入充值帐号和金额调起支付(微信或者支付宝),支付成功返回获取支付结果. 2.微信支付成功后重定向到指定页面(没有设置重定向地址的话,默认返回调起 ...
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
随机推荐
- ugui获取text宽
http://www.xuanyusong.com/archives/3587 void Start () { Font font = Resources.Load<Font>(" ...
- SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景
一.拦截器简介 1.拦截器定义 拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 拦截器主要用来按照指定规则拒绝请求. 2.拦截器中应用 Token令牌 ...
- 笔记-JavaWeb学习之旅17
1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...
- fatal pylint error : ......can't find '__main__'module in
fatal pylint error : ......can't find '__main__'module in原因是没有安装pylint,所以提示没有找到__main__模块 解决方案:1.到官网 ...
- BZOJ 1116: [POI2008]CLO 并查集
成立时当且仅当每个联通块都有环存在.一个连通块若有m个点,则必有多于m条有向边,可用并查集来维护. #include<cstdio> #include<iostream> #d ...
- CodeForces - 287B-Pipeline(二分)
Vova, the Ultimate Thule new shaman, wants to build a pipeline. As there are exactly n houses in Ult ...
- Codeforces Round #527-B. Teams Forming(贪心)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- codeforces540E-树状数组求逆序对
1-1e9的数据范围 但有1e5个区间 所以可以考虑把没有涉及到的区间缩成一个点 然后树状数组求逆序对 #include<bits/stdc++.h> #define inf 0x3f3f ...
- CentOS,net core2 sdk nginx、supervisor、mysql
CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建 作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把 ...
- Windows7&IIS7.5部署Discuz全攻略
组长说在内网部署一个论坛,这可难不倒我,装个Discuz嘛.部署环境就一台普通的PC,四核i3,Windows7.这就开搞了. 准备工作 系统是Windows 7 专业版,自带IIS7.5(家庭版不带 ...