微信支付成功,如何刷新用户当前页面的余额
2016-08-29 09:54
555 查看
本项目中,使用微信支付,支付成功后,弹出提示框,并且目的是改变当前用户的余额。。。我们在互动直播项目中发现 ,然而事情并没有那么简单。
代码如下:
我们知道,应该在appdelegate中调用微信支付代理,告知用户的充值结果是否正确。
为了确保安全,应使用服务器对用户的余额进行保存
我在这里为了传值 有设置了一个代理 如下:
在支付成功之后通过代理查看支付结果,再通过代理回到这个页面进行用户数据的网络保存。
这里应该成功的改变了用户余额吧。。
然而,并没有。。
难道是子线程没有办法刷新UI,于是,我有回到了主线程操作
这下没问题了吧。。。。。然而,,依旧不行
接下来我们又用到了,__weak 等,依旧没有解决
最后。。。。我们用了最笨的方法。用户交互
通过,用户的点击确定充值成功按钮,开刷新UI。。。。这样就可以了,,,,但是很Low。
如果,有高人指点,不胜感激。!@!!!!!!
代码如下:
我们知道,应该在appdelegate中调用微信支付代理,告知用户的充值结果是否正确。
为了确保安全,应使用服务器对用户的余额进行保存
我在这里为了传值 有设置了一个代理 如下:
@protocol payIsOkDelegate - (void)payIsOk; @end @property (retain,nonatomic) id <payIsOkDelegate> payIsOkDelegate;
-(void) onResp:(BaseResp*)resp { if([resp isKindOfClass:[SendMessageToWXResp class]]) { SwiftFunction *sobj = [[SwiftFunction alloc] init]; [sobj shareRespFromWeixin:resp.errCode ]; } else if([resp isKindOfClass:[SendAuthResp class]]) { NSLog(@"onResp"); SendAuthResp *aresp = (SendAuthResp *)resp; NSLog(@"code:%@,state:%@,errcode:%d", aresp.code, aresp.state, aresp.errCode); if (aresp.errCode== 0) { NSString *code = aresp.code; self.kWeiXinCode = aresp.code; [self getAccess_token]; } }else if([resp isKindOfClass:[PayResp class]]){ PayReq * res = resp; //支付返回结果,实际支付结果需要去微信服务器端查询 NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付结果"]; PayViewController *payViewController = [[PayViewController alloc] init]; self.payIsOkDelegate = payViewController; //设置代理 [self.payIsOkDelegate payIsOk]; switch (resp.errCode) { case WXSuccess: { strMsg = @"支付结果:成功!"; NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode); PayViewController *payViewController = [[PayViewController alloc] init]; self.payIsOkDelegate = payViewController; //设置代理 [self.payIsOkDelegate payIsOk]; break; } default: strMsg = [NSString stringWithFormat:@"支付失败!请重新支付!"]; NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr); break; } UIAlertView *alert = da5a [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; } }
在支付成功之后通过代理查看支付结果,再通过代理回到这个页面进行用户数据的网络保存。
- (void)payIsOk { NSLog(@"%lu",(unsigned long)self.productModelArray.count); NSUserDefaults *defaultPay = [NSUserDefaults standardUserDefaults]; NSString *productId = [defaultPay objectForKey:@"productId"]; NSString *ProductPrice = [defaultPay objectForKey:@"ProductPrice"]; NSLog(@"######## %@,%@",productId,ProductPrice); NSString *urlStr1=[NSString stringWithFormat:@"http://baidu.com"]; AlamofireRequest *fireRequest = [[AlamofireRequest alloc]initWithParameters:nil]; NSString *paraToken = [fireRequest creatToken]; NSString *userId = [fireRequest getCurrentUserId]; NSDictionary *parameters1; NSLog(@"##### %@",userId); NSLog(@"##### %@",paraToken); parameters1 =@{ @"paraToken":paraToken, @"productBuyHis.userId":userId, } ; AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager POST:urlStr1 parameters:parameters1 success:^(NSURLSessionDataTask *task, id responseObject) { NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:responseObject options:nil error:nil]; NSDictionary *dic = json; NSDictionary *d = dic[@"user"]; NSString *userCoin = d[@"golds"]; // userCoin = @"1000"; NSUserDefaults *defaultCreator = [NSUserDefaults standardUserDefaults]; [defaultCreator setObject:userCoin forKey:@"userCoinKey"]; CoinNum.text = userCoin; NSLog(@"!!!!!!!!!!!!!!%@",userCoin); NSLog(@"!!!!!!!!!!!!!!!!!!!!! %@",json); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"payIsOkpayIsOkpayIsOkerror %@",error); }]; }
这里应该成功的改变了用户余额吧。。
然而,并没有。。
难道是子线程没有办法刷新UI,于是,我有回到了主线程操作
dispatch_async(dispatch_get_main_queue(), ^{ NSUserDefaults *defaultCreator = [NSUserDefaults standardUserDefaults]; [defaultCreator setObject:userCoin forKey:@"userCoinKey"]; CoinNum.text = userCoin; });
这下没问题了吧。。。。。然而,,依旧不行
接下来我们又用到了,__weak 等,依旧没有解决
最后。。。。我们用了最笨的方法。用户交互
通过,用户的点击确定充值成功按钮,开刷新UI。。。。这样就可以了,,,,但是很Low。
如果,有高人指点,不胜感激。!@!!!!!!
相关文章推荐
- mysql+jsp,在jsp页面连接了数据库,已成功获取数据库字段,请问如何取到当前用户对应的信息
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- CAS如何在服务器端的登陆成功页面获取登陆用户帐号的方法
- ThinkPHP 表单提交操作成功后执行JS操作如何刷新父页面或关闭当前页等操作
- 黄聪:PHP如何实现延迟一定时间后自动刷新当前页面、自动跳转header("refresh:1;url={$url}");
- 如何使用jquery刷新当前页面
- 用户控件如何刷新父页面
- 如何使用jquery刷新当前页面和javascript的基本函数
- 如何使用jquery刷新当前页面
- 如何使用JS等各种方法实现刷新当前页面
- CAS如何在服务器端的登陆成功页面获取登陆用户帐号的方法
- dedecms自定义表单提交成功如何返回当前页面
- 禁止用户对当前页面刷新 [简单整理后转贴]
- 如何使用jquery刷新当前页面
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- 有关一个 iframe 的问题,关于在 iframe 内的页面内登录成功后,如何由当前页直接转到另一个页面内?
- A标签上使用onclick事件,js函数响应成功,单会刷新当前页面陷阱
- 如何做页面自动刷新,又不用让用户按回车键来提交数据!
- 如何用JS刷新当前页面
- 如何使用jquery刷新当前页面