ios中的支付

发布时间:2024年01月17日

苹果内购,苹果支付,第三方支付

一、Apple Pay(苹果支付)

1.什么是Apple Pay

Apple Pay是一种支付方式

2.Apple Pay和微信支付、支付宝支付的区别

微信和支付宝的方式是有独立账户的,银行不会知道客户的支付的钱花到了哪里,但是Apple Pay是一种卡片,苹果直接帮银行刷卡,银行知道客户的支付的钱花到了哪里。

3.Apple Pay的类型

分为线上和线下两种

4.Apple Pay的线上使用

1)配置环境

a.登陆Apple Developer官网,选择证书

b. 在Identifiers当中选择要给账号进行苹果支付,也就是要给哪个应用添加苹果支付

?c.选择Merchant IDS加入苹果支付

d.添加苹果支付的ID,注意苹果支付的ID前面必须是merchant.,后面可以随便写,最好写自己的项目名称

?e.之后进行注册

f.此时这个应用就有了苹果支付ID

g.创建好了之后需要对这个账号进行一下编辑,选择支持苹果支付

h.需要选择一个CSR文件,相当于身份证,知道哪个电脑在进行使用

?i.生成CSR文件,在钥匙串当中,选择证书助理,从证书颁发机构请求证书

输入自己的邮箱,然后存储到磁盘当中

此时在桌面就会生成一个CSR文件,然后在编辑支付ID的时候选择这个文件就可以了。

?2)发送支付请求

a.导入PassKit框架

#import <PassKit/PassKit.h>

b.需要先对设备进行判断,支不支持苹果支付,如果不支持就return,如果支持就判断是否加入了银行卡,如果没有加入银行卡就跳转到钱包去绑定银行卡,如果绑定了银行卡就可以设置进行支付

 //判断设备是否支持苹果支付
    if (![PKPaymentAuthorizationViewController canMakePayments]) {
        //设备不支持,不让apple pay的支付按钮去显示
        return;
    }
    NSLog(@"设备支持苹果支付");
    
    //判断是否加入了银行卡
    if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa]]) {
        NSLog(@"未加入银联和Visa银行卡");
        //进入设置银行卡的页面
        [[[PKPassLibrary alloc]init]openPaymentSetup];
        return;
    }

c.没有绑定银行卡的话就跳转到钱包页面进行绑定银行卡,绑定完成以后开始发送支付请求

    //发送支付请求
    PKPaymentRequest *req = [[PKPaymentRequest alloc]init];
    
    //设置商户的id,谁要收钱
    req.merchantIdentifier = @"merchant.StoreHanvonInput";
    
    //设置国家代码
    req.countryCode = @"CN";

   //设置支持的卡的类型
    req.supportedNetworks = @[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa];
    
    //设置商户的支付标准
    req.merchantCapabilities = PKMerchantCapability3DS;
    
    //设置货币单位
    req.currencyCode = @"CNY";

   //设置商品
    NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:@"0.1"];
    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"营养快线" amount:num1];
   req.paymentSummaryItems = @[item1];
  //显示支付页面
    PKPaymentAuthorizationViewController *vc = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:req];
    vc.delegate = self;
    [self presentViewController:vc animated:YES completion:nil];

#pragma mark - PKPaymentAuthorizationViewControllerDelegate

//
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
    NSLog(@"PKPaymentAuthorizationViewController");
    //把支付的页面关闭
    [self dismissViewControllerAnimated:YES completion:nil];
}

//使用密码支付,开始进行支付调用
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion {
    //把支付信息发送给服务器进行处理
    //根据服务器返回的支付是否成功,进行不同的显示(调用block传不同的枚举)
    completion(PKPaymentAuthorizationStatusSuccess);
   
}

?

d.也可以设置多个商品,默认付款页面显示的是最后一个商品,所以可以算出来总计在页面显示

 //设置商品
    NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:@"0.1"];
    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"营养快线" amount:num1];
    NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:@"0.5"];
    PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"可乐" amount:num2];
    NSDecimalNumber *num3 = [NSDecimalNumber decimalNumberWithString:@"0.6"];
    PKPaymentSummaryItem *item3 = [PKPaymentSummaryItem summaryItemWithLabel:@"苹果支付" amount:num3];
    
    req.paymentSummaryItems = @[item1,item2,item3];

?e.设置送货的必填内容

    //设置发票收据必填内容
//    req.requiredBillingContactFields = PKAddre
    req.requiredBillingAddressFields = PKAddressFieldAll;
    
    //设置送货的必填的内容
    req.requiredShippingAddressFields = PKAddressFieldAll;

?f.设置送货方式

  //设置送货方式
    PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"顺丰" amount:[NSDecimalNumber decimalNumberWithString:@"8"]];
    method.identifier = @"shunfeng";
    method.detail = @"24小时之内到达";
    PKShippingMethod *method1 = [PKShippingMethod summaryItemWithLabel:@"圆通" amount:[NSDecimalNumber decimalNumberWithString:@"3"]];
    method1.identifier = @"yuantong";
    method1.detail = @"五环之内免费配送";
    req.shippingMethods = @[method,method1];


???????

文章来源:https://blog.csdn.net/qq_43658148/article/details/129696117
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。