您的位置:首页 > 移动开发 > 微信开发

微信支付成功,如何刷新用户当前页面的余额

2016-08-29 09:54 555 查看
本项目中,使用微信支付,支付成功后,弹出提示框,并且目的是改变当前用户的余额。。。我们在互动直播项目中发现 ,然而事情并没有那么简单。

代码如下:

我们知道,应该在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。

如果,有高人指点,不胜感激。!@!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: