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授权登录接入之前,在微信开 ...
随机推荐
- 5.zip隐写术
首先分析pcapng,来得到flag. 先亮出下载地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng 由于这是.pcapng,需要下载 wireshark ...
- unity3d GUI字体设置
using System.Collections; using System.Collections.Generic; using UnityEngine; public class click001 ...
- 教妹学 Java:晦涩难懂的泛型
00.故事的起源 “二哥,要不我上大学的时候也学习编程吧?”有一天,三妹突发奇想地问我. “你确定要做一名程序媛吗?” “我觉得女生做程序员,有着天大的优势,尤其是我这种长相甜美的.”三妹开始认真了起 ...
- PHP正则表达式,看这一篇就够啦!
前言 不知道你们有没有这个感觉,看正则表达式就像看天文数字一样,什么电话号码.邮箱的正则表达式,上网复制一下粘贴下来就搞定了.完全不知道这写的是什么玩意.后来我自己也想学一下,因为感觉用处还是挺大的. ...
- 在Packstack环境手动安装OVN
安装OpenStack(allinone)环境 ### 参考"Packstack使用"章节安装,但是不要配置外网网络 安装OVN组件 ### 控制节点 # yum install ...
- vector详解
/*vector向量容器*/ //用数组方式访问vector元素 #include<iostream> #include<vector> #include<cstdio& ...
- MyBatis日志实现
maven项目resources文件夹下log4j.properties 其作用是输出controller包下参与Mybatis的类的SQL语句输出.如果包名不一样,请根据自己的项目情况调整. # G ...
- datastream解析
在EOS的eosiolib模块中有一个datasteam.hpp文件,它几乎实现了所有类型对字节流的转换,是一个非常强大的工具类,在这里对它的做一个简单的提取,也加强一下自己对它的理解.在下面的工程中 ...
- values.xml:3:5-58:857: AAPT: error: resource android:attr/fontVariationSettings not found.
修改app/build.gradle中的版本 compileSdkVersion 28 targetSdkVersion 28 具体不知道为何要修改为28,但在android/build.gradle ...
- Django之缓存+序列化+信号+ORM性能优化+验证码
缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加 明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcach ...