关闭

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

标签: 支付微信
1151人阅读 评论(0) 收藏 举报
分类:

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

代码如下:
我们知道,应该在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。
如果,有高人指点,不胜感激。!@!!!!!!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:93617次
    • 积分:2348
    • 等级:
    • 排名:第15919名
    • 原创:140篇
    • 转载:17篇
    • 译文:2篇
    • 评论:83条
    博客专栏
    最新评论