本项目中,使用微信支付,支付成功后,弹出提示框,并且目的是改变当前用户的余额。。。我们在互动直播项目中发现 ,然而事情并没有那么简单。
代码如下:
我们知道,应该在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 = [[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。
如果,有高人指点,不胜感激。!@!!!!!!