美文网首页
iOS----支付宝支付

iOS----支付宝支付

作者: iOS程序媛ing | 来源:发表于2020-10-18 13:36 被阅读0次
  • 首先需要先到支付宝开发者平台创建应用,获取公钥和私钥。
  • 将公钥上传到支付宝,我们可以获取支付宝的公钥(支付完成时用于解密支付宝返回的信息
  • 服务器存储公钥和私钥
  • 支付时,由服务器返回订单信息,包含(appid、privatekey)
  • 客户端创建订单信息,并进行加密签名
  • 加签完成后,调用支付宝支付接口
    appid--------------应用ID
    privatekey---------私钥
- (void)aliPay {
    
    dispatch_async(dispatch_get_main_queue(), ^{
        
        // 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
        // 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
        // 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
        /*============================================================================*/
        /*=======================需要填写商户app申请的===================================*/
        /*============================================================================*/
        NSString *appID = [NSString stringWithFormat:@"%@", self.aliDict[@"appid"]];
//        NSString *appID = @"2016061501521175";
        // 如下私钥,rsa2PrivateKey 或者 rsaPrivateKey 只需要填入一个
        // 如果商户两个都设置了,优先使用 rsa2PrivateKey
        // rsa2PrivateKey 可以保证商户交易在更加安全的环境下进行,建议使用 rsa2PrivateKey
        // 获取 rsa2PrivateKey,建议使用支付宝提供的公私钥生成工具生成,
        // 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
        NSString *rsa2PrivateKey = [NSString stringWithFormat:@"%@", self.aliDict[@"privatekey"]]; ;
        
        NSString *rsaPrivateKey = @"";
        /*============================================================================*/
        /*============================================================================*/
        /*============================================================================*/
        
        //partner和seller获取失败,提示
        if ([appID length] == 0 ||
            ([rsa2PrivateKey length] == 0 && [rsaPrivateKey length] == 0))
        {
            [MBProgressHUD showHUDWithView:[UIApplication sharedApplication].keyWindow title:@"缺少appId或者私钥,请检查参数设置"];
            return;
        }
        
        /*
         *生成订单信息及签名
         */
        //将商品信息赋予AlixPayOrder的成员变量
        APOrderInfo* order = [APOrderInfo new];
        
        // NOTE: app_id设置
        order.app_id = appID;
        
        // NOTE: 支付接口名称
        order.method = @"alipay.trade.app.pay";
        
        // NOTE: 参数编码格式
        order.charset = @"utf-8";
        
        // NOTE: 当前时间点
        NSDateFormatter* formatter = [NSDateFormatter new];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        order.timestamp = [formatter stringFromDate:[NSDate date]];
        
        // NOTE: 支付版本
        order.version = @"1.0";
        
        // NOTE: sign_type 根据商户设置的私钥来决定
        order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
        
        // NOTE: 商品数据
        order.biz_content = [APBizContent new];
        order.biz_content.body = @"";
        order.biz_content.subject = @"VOSS订单";
        order.biz_content.out_trade_no = self.code; //订单ID(由商家自行制定)
        order.biz_content.timeout_express = @"30m"; //超时时间设置
        order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", [self.price floatValue]]; //商品价格
        order.biz_content.seller_id = [NSString stringWithFormat:@"%@", self.aliDict[@"sellerid"]];
        order.notify_url = self.aliDict[@"notifyurl"];
        //将商品信息拼接成字符串
        NSString *orderInfo = [order orderInfoEncoded:NO];
        NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
        NSLog(@"orderSpec = %@",orderInfo);
        
        // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
        //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
        NSString *signedString = nil;
        APRSASigner* signer = [[APRSASigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
        if ((rsa2PrivateKey.length > 1)) {
            signedString = [signer signString:orderInfo withRSA2:YES];
        } else {
            signedString = [signer signString:orderInfo withRSA2:NO];
        }
        
        // NOTE: 如果加签成功,则继续执行支付
        if (signedString != nil) {
            //应用注册scheme,在AliSDKDemo-Info.plist定义URL types
            NSString *appScheme = @"com.yinlian.voss";
            
            // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
            NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                                     orderInfoEncoded, signedString];
            
            // NOTE: 调用支付结果开始支付
            [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                NSLog(@"reslut = %@",resultDic);
                if ([resultDic[@"resultStatus"] integerValue] == 9000) {
                    [self wxPaySuccess];
                } else {
                    [self wxPayFail];
                }
            }];
        }
    });
}

相关文章

  • iOS----支付宝支付

    首先需要先到支付宝开发者平台创建应用,获取公钥和私钥。 将公钥上传到支付宝,我们可以获取支付宝的公钥(支付完成时用...

  • Android支付宝支付集成

    Android支付宝支付 标签: android Android支付宝支付使用的流程介绍 支付宝流程介绍 支付宝流...

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

  • 三方支付流程总结

    支付宝支付和微信支付 支付宝支付流程图: 支付宝支付: 当我们选择点击了支付宝支付按钮开始 1.app选择商品进行...

  • iOS支付

    支付宝支付 支付宝支付支付宝补充 微信支付 微信支付 内购 iOS开发 内购流程

  • 奖品合集

    支付宝44.44x12 支付宝200x1 支付宝121x1 支付宝111x1 支付宝100x1 支付宝88x1 支...

  • 对接支付宝支付接口开发笔记

    支付宝对接学习笔记: 功能介绍: 支付宝对接 支付宝回调 查询支付状态(略过不讲) 要求: 熟悉支付宝对接核心文档...

  • iOS集成支付宝支付

    一、支付宝支付,首先利用CocoaPods,导入支付宝SDK 二、 创建支付宝支付管理类 AlipayManag...

  • 历害word哥,支付宝AR红包风靡朋友圈

    支付宝又来搞事情,2016年12月22日,支付宝又出新玩法:支付宝AR红包! 支付宝用户可以利用支付宝的红包功能:...

  • iOS支付宝功能集成

    iOS快速集成支付宝详解/支付宝集成获取私钥与公钥 在集成支付宝功能前,我们必须了解下什么支付宝流程,下图是支付宝...

网友评论

      本文标题:iOS----支付宝支付

      本文链接:https://www.haomeiwen.com/subject/ssccmktx.html