zoukankan      html  css  js  c++  java
  • 支付宝和内购的区别以及集成方法

    一、支付宝和内购的区别


    第三方支付平台

    和内购非常相似
    内购是用户将钱付款给苹果,之后苹果分成给商户
    支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户

    使用支付宝前提
    购买的物品必须是和应用程序无关的.比如:团购卷/衣服/电子产品
    如果和应用程序有关,必须采用内购(否则不允许上架).比如:会员/游戏道具

    二、集成支付宝


    现在不少app内都集成了支付宝功能

    使用支付宝进行一个完整的支付功能,大致有以下步骤:
    向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
    下载支付宝SDK
    生成订单信息,签名加密
    调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
    支付完毕后,支付宝客户端会自动跳回到原来的应用程序
    在原来的应用程序中显示支付结果给用户看
    技术分享

    三、集成SDK注意事项


    * 支付宝的SDK下载和百度、讯飞语言等SDK不一样,直接搜支付宝进入官网下载
    * 支付宝下载(选择我是商户用户—>如何集成—>移动开发)
    * 集成前查看demo
    * 集成时需要用到的库

    技术分享

    * 集成之后可能遇到的问题

    1)集成SDK编译时找不到 openssl/asn1.h 文件

    技术分享
    解决方案:Build Settings --> Search Paths --> Header Search paths : $(SRCROOT)/支付宝集成/Classes/Alipay

    技术分享

    2)链接时:找不到 SystemConfiguration.framework 这个库  
    技术分享

    解决方案:
    技术分享

    四、具体代码


    比如现在将产品展示在tableView上,选中时即购买此商品,集成支付宝的核心代码如下:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 1.取出模型对象
        Product *product = self.products[indexPath.row];
        
        // 2.购买商品
        [self buyProduct:product];
    }
    
    - (void)buyProduct:(Product *)product
    {
        // 1.添加写partner/seller/privateKey,签约后获得
        NSString *partner = @"";
        NSString *seller = @"";
        NSString *privateKey = @"";
        
        
        // 2.生成订单
        // 2.1.创建订单
        Order *order = [[Order alloc] init];
        
        // 2.2.设置商户ID/账号ID
        order.partner = partner;
        order.seller = seller;
        
        // 2.3.设置订单号
        order.tradeNO = nil;
        
        // 2.4.设置产品相关的信息
        order.productName = product.title;
        order.productDescription = product.detail;
        order.amount = [NSString stringWithFormat:@"%.2f", product.price];
        
        // 2.5.设置订单常量
        order.service = @"mobile.securitypay.pay";
        order.paymentType = @"1";
        order.inputCharset = @"utf-8";
        order.itBPay = @"30m";
        order.showUrl = @"m.alipay.com";
        
        // 2.6.回调URL(异步通知服务器的地址)
        order.notifyURL =  @"http://www.xxx.com"; //回调URL
        
        // 2.7.将订单信息拼接成字符串
        NSString *orderSpec = [order description];
        
        // 3.对订单进行签名加密
        // 3.1.对订单进行加密
        id<DataSigner> signer = CreateRSADataSigner(privateKey);
        NSString *signedString = [signer signString:orderSpec];
        
        // 3.2.将签名成功字符串格式化为订单字符串,请严格按照该格式
        NSString *orderString = [NSString stringWithFormat:@"%@&sign="%@"&sign_type="%@"", orderSpec, signedString, @"RSA"];
        
        // 4.打开支付宝客户端进行支付(用户没有安装支付宝客户端,直接在应用程序中添加一个WebView,通过网页让用户进行支付)
        // 注意:如果是通过网页支付完成,那么会回调该block:callback
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jingdong" callback:^(NSDictionary *resultDic) {
            
        }];
    }

    AppDelegate.m

    // 当通过别的应用程序,将该应用程序打开时,会调用该方法
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
    {
        // 当用户通过支付宝客户端进行支付时,会回调该block:standbyCallback
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        return YES;
    }
  • 相关阅读:
    ES6知识点脑图
    三大框架知识点比较(Angular, Vue, React)
    Angular(06)- 为什么数据变化,绑定的视图就会自动更新了?
    Angular(05)- 组件知识点脑图
    iTop4412开发板+虚拟机+tftp服务
    发布项目遇到的问题
    Ubuntu + Django(DRF) + channels(websocket)+NGINX + uwsgi 环境部署
    在Ubuntu中使用uwsgi 启动 Django ,但是静态文件映射出错
    Django + mysql 在创建数据库出错
    流媒体服务器搭建 ffmpeg + nginx
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5344546.html
Copyright © 2011-2022 走看看