当用户点击了左上角系统的返回调起App时,微信或者支付宝的支付回调中获取不到回调的结果,想要实现当用户点击了左上角系统的返回时,跳转到我的订单页面,而不是停留在确认订单页面;监控用户的返回方式。
1>现在全局的单例中创建一个属性,用这个属性标记是从微信或支付宝点击左上角返回的,还是成功支付或者是取消支付返回的
//
确认订单
-----
从支付宝或者微信直接返回
//
1是支付成功 2是支付失败 3是点击左上角返回
@property
(
nonatomic
,
assign
)
NSInteger
backNumber;
2>在确认订单的控制器中创建一个全局的布尔值,用这个布尔值标记用户是否点击了”确认订单"调起支付了,
//
从微信支付宝直接返回
//
YES调起支付了 NO未调起支付
@property
(
nonatomic
,
assign
)
BOOL
isBack;
3>当用户点击”提交订单“获取到订单号调起支付的时候,将
isBack设置为YES,并将单例中的
backNumber设置成3
self
.
isBack
=
YES
;
XZShareSetting
.
backNumber
=
3
;
4>在支付的回调方法中,如果是支付成功,
backNumber设置成1,支付失败,
backNumber设置成2
#pragma mark -----
回调方法
-(
void
)XZPayOrderResult:(
NSInteger
)rest;
{
if
(rest ==
1
) {
XZShareSetting
.
backNumber
=
1
;
}
else
{
//
失败
XZShareSetting
.
backNumber
=
2
;
}
}
5>当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方法,在AppDelegate的
applicationDidBecomeActive方法中判断
backNumber的值,如果是3就发一个通知,确认是在点击了”确认订单”情况下从微信或者支付宝返回的,因为从app返回或者从后台唤起App或者是手机灭屏再打开都会走这个方法,
//appDelegate
进入活跃状态
- (
void
)applicationDidBecomeActive:(
UIApplication
*)application{
//
商城
if
(
XZShareSetting
.
backNumber
==
3
) {
//
直接从支付宝或者微信点左上角返回
[[
NSNotificationCenter
defaultCenter
]
postNotificationName
:
KBackFromAlipayOrWechat
object
:
nil
userInfo
:
nil
];
}
}
6>在确认订单的控制中接收这个通知
//
从微信或者支付宝直接返回
[[
NSNotificationCenter
defaultCenter
]
addObserver
:
self
selector
:
@selector
(BackFromAlipayOrWechat:)
name
:
KBackFromAlipayOrWechat
object
:
nil
];
7>并在方法中判断用户是否点击了”确认订单",如果点击了进行跳转,并将
#pragma mark -----
从微信或者支付宝直接返回
- (
void
)BackFromAlipayOrWechat:(
NSNotification
*)notification {
if
(
self
.
isBack
) {
//
跳转我的订单
if
(
XZShareSetting
.
backNumber
==
3
) {
//
查看订单
XZMyOrderViewController
*orderView = [[
XZMyOrderViewController
alloc
]
init
];
orderView.
isRemoveFather
=
YES
;
self
.
isBack
=
NO
;
[
self
.
navigationController
pushViewController
:orderView
animated
:
YES
];
}
}
}
到此所有的情况判断结束,跳转完成
其中的一些定义
/**
*
商城从支付宝或者微信返回
*/
#define KBackFromAlipayOrWechat @
"BackFromAlipayOrWechat"