前言
微信支付成功之后,会弹出一个支付成功的界面,点击返回返回我们的APP,我们才能接受到成功通知,当点击苹果左上角返回键是不走成功回调的,当然双击home键直接跳回我们的APP也是不走回调的
解决思路
需要在进入前台的时候请求服务器,服务器去请求是否支付成功,把结果返回给客户端,判断是否支付成功,成功之后通知相应界面做出处理
实现
APPDelegate中定一个个全局变量
{
BOOL _payTureFaulseBack; //支付回调处理判断
}
进入前台的时候,延迟的主要原因是给服务器一定的时间,去请求结果
- (void)applicationWillEnterForeground:(UIApplication *)application {
_payTureFaulseBack = NO;
//延时操作处理同时收到回调的情况
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//如果没有收到支付回调
if (!_payTureFaulseBack) {
//微信支付左上角点击,
if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {
[MouoNetManager requestPayRedPacketIsReslutWithRedPacketId1:[MouoPayManager shareManager].redPacketId finish:^(BOOL success, NSError *error) {
if (success) {
[MouoPayManager shareManager].payState = payEnd;
[[MouoPayManager shareManager] synchronize];
[WJIMMainManager shareManager].isSucessPay = YES;
}else {
}
}];
};
}
});
}
同时我们要在app程序回调那里判断,如果它走的是回调我们当然不需要进行后台服务器的验证了
#pragma mark - PING++
// iOS 8 及以下请用这个
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
_payTureFaulseBack = YES;
return [Pingpp handleOpenURL:url withCompletion:^(NSString *result, PingppError *error) {
if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {
if (!error) {
[MouoPayManager shareManager].payState = payEnd;
[[MouoPayManager shareManager] synchronize];
[WJIMMainManager shareManager].isSucessPay = YES;
}else {
}
};
}];
}
// iOS 9 以上请用这个
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
_payTureFaulseBack = YES;
return [Pingpp handleOpenURL:url withCompletion:^(NSString *result, PingppError *error) {
if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {
[MouoPayManager shareManager].payState = payEnd;
[[MouoPayManager shareManager] synchronize];
if (!error) {
[WJIMMainManager shareManager].isSucessPay = YES;
}else {
}
};
}];
}
成功之后通知相应界面做出相应,