15分钟搞定微信与支付宝

1. 支付功能

第一步:配置一些基本设置

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      //设置微信的appKey和appSecret
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:KWechatKey appSecret:KWechatAppSecret redirectURL:@"http://mobile.umeng.com/social"];

}

第二步:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);

            NSString *dic = [resultDic objectForKey:@"result"];
            NSData *jsonData = [dic dataUsingEncoding:NSUTF8StringEncoding];
            NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                options:NSJSONReadingMutableContainers
                                                                  error:nil];

            int  staute = [resultDic intValueForKey:@"resultStatus"];
            switch (staute) {
                case 9000:
                    [self requsetPay:[jsonDic objectForKey:@"sign"]];
                    break;
                case 8000:
                    SHOW_MESSAGE_VIEW(nil, @"正在处理中", @"确定", nil);
                    break;
                case 4000:
                    SHOW_MESSAGE_VIEW(nil, @"订单支付失败", @"确定", nil);
                    break;
                case 6001:
                    SHOW_MESSAGE_VIEW(nil, @"用户中途取消", @"确定", nil);
                    break;
                case 6002:
                    SHOW_MESSAGE_VIEW(nil, @"网络连接出错", @"确定", nil);
                    break;
                default:
                    break;
            }

        }];
    } else if([[url absoluteString] hasPrefix:@"wx"]) {

        return [WXApi handleOpenURL:url delegate:self];

    }

}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([[url absoluteString] hasPrefix:@"tencent"]) {

        return [TencentOAuth HandleOpenURL:url];

    }else if([[url absoluteString] hasPrefix:@"wb"]) {

        return [WeiboSDK handleOpenURL:url delegate:self];

    }else if([[url absoluteString] hasPrefix:@"wx"]){

        return [WXApi handleOpenURL:url delegate:self];

    }
}

第三步:

-(void)onResp:(BaseResp*)resp{
    if([resp isKindOfClass:[PayResp class]])
    {
        //支付返回结果,实际支付结果需要去微信服务器端查询
        PayResp * payResult = (PayResp *)resp;
        [[NSNotificationCenter defaultCenter] postNotificationName:WXPAY_NOTIFICATION object:self userInfo:[NSDictionary dictionaryWithObject:payResult forKey:@"wxPayReturn"]];
    }
}

第四步:
在支付页面中,添加通知喔~~

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(weixinPayReturn:) name:WXPAY_NOTIFICATION object:nil];
//微信支付后的返回
-(void)weixinPayReturn:(NSNotification *)info
{
    PayResp * result = [info.userInfo objectForKey:@"wxPayReturn"];

    switch (result.errCode) {
        case WXSuccess:

            [self performSelector:@selector(checkThePayResult) withObject:self afterDelay:1.0];

            [self showMyMessage:@"支付结果:成功!"];

            break;

        default:

          [self showMyMessage: [NSString stringWithFormat:@"支付结果:失败"]];
            NSLog(@"错误,retcode = %d, retstr = %@", result.errCode,result.errStr);
            break;
    }

}

-(void)checkThePayResult{
    //处理服务器的请求了(一般是支付成功后的回调接口)
    [self requsetPay:@""];
}

第五步:很重要的 (点击支付按钮的事件)

-(void)payMethodWithUserPay;
{
    NSString *url;
    if (style ==1) {
       url = [NSString stringWithFormat:@"%@Pay/Wxpay?order_number=%@&user_id=%@&token=%@",HaoSe_URL,self.model.order_number,USERID,TOKEN];
    }else{
      url = [NSString stringWithFormat:@"%@Pay/getSignStr?order_number=%@&user_id=%@&token=%@",HaoSe_URL,self.model.order_number,USERID,TOKEN];
    }

    [commonSet post:url params:nil success:^(id json) {
        NSDictionary *result = json;
        if (style ==1) {
            //调起微信支付
            NSDictionary *dic = [result objectForKey:@"data"];

            WXPayData* req          = [[WXPayData alloc] init];
            req.openID              = [dic stringForKey:@"appId"];
            req.partnerId          = [dic stringForKey:@"partnerid"];//商户ID
            req.prepayId            = [dic stringForKey:@"prepayid"];
            req.nonceStr            = [dic stringForKey:@"noncestr"];
            req.timeStamp          = [dic intValueForKey:@"timestamp"];
            req.package            = @"Sign=WXPay";
//            req.spKey               = [result stringForKey:@"key"];
//            req.tradeNo             = [result stringForKey:@"tradeNo"];
            //生成签名
//            NSString *sign  = [GlobalTools createMd5Sign:req];
            NSString *sign =    [dic stringForKey:@"sign"];
            req.sign                = sign;
//            _tradeNo                = req.tradeNo;

            PayReq* payData = [[PayReq alloc] init];
            payData = req;

            if ([WXApi sendReq:payData])
            {
                NSLog(@"微信支付发送成功");
            }else
            {
                NSLog(@"微信支付发送失败");
            }


        }else{

            NSString *params = [[result objectForKey:@"data"]objectForKey:@"params"];

//            Order *zhifuOrder = [[Order alloc] initWithDictionary:params];
//            zhifuOrder.privateKey = [[result objectForKey:@"data"] objectForKey:@"key"];
//            NSString *orderSpec = [zhifuOrder description];
//
            NSString *key = [[result objectForKey:@"data"]objectForKey:@"key"];

            //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
            id<DataSigner> signer = CreateRSADataSigner(key);
            NSString *signedString = [signer signString:params];
            NSString *appScheme = @"alisdkdemo";
            //将签名成功字符串格式化为订单字符串,请严格按照该格式
            NSString *orderString = nil;
            if (key != nil) {
                orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                               params, signedString, @"RSA"];

                [[NSUserDefaults standardUserDefaults]setObject:_model.order_number forKey:@"order"];
                //调支付宝
                [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                    NSLog(@"reslut = %@",resultDic);
                    int  staute = [resultDic intValueForKey:@"resultStatus"];

                    NSString *dic = [resultDic objectForKey:@"result"];

                    switch (staute) {
                        case 9000:
                             [self requsetPay:dic];
                            break;
                        case 8000:
                            SHOW_MESSAGE_VIEW(nil, @"正在处理中", @"确定", nil);
                            break;
                        case 4000:
                            SHOW_MESSAGE_VIEW(nil, @"订单支付失败", @"确定", nil);
                            break;
                        case 6001:
                            SHOW_MESSAGE_VIEW(nil, @"用户中途取消", @"确定", nil);
                            break;
                        case 6002:
                            SHOW_MESSAGE_VIEW(nil, @"网络连接出错", @"确定", nil);
                            break;
                        default:
                            break;
                    }

                }];
            }
        }

    } failure:^(NSError *error) {

    }];

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容