苹果内购,苹果支付,第三方支付
Apple Pay是一种支付方式
微信和支付宝的方式是有独立账户的,银行不会知道客户的支付的钱花到了哪里,但是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];
???????