一、什么是支付宝
第三方支付平台
和内购非常相似
内购是用户将钱付款给苹果,之后苹果分成给商户
支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户
使用支付宝前提
购买的物品必须是和应用程序无关的.比如:团购卷/衣服/电子产品
如果和应用程序有关,必须采用内购(否则不允许上架).比如:会员/游戏道具
二、集成支付宝
现在不少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; }
时间: 2024-10-12 01:01:26