支付宝集成的介绍
第三方支付平台,支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们自己的账户。
集成支付宝的步骤
向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
下载支付宝SDK
生成订单信息,签名加密
调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
支付完毕后,支付宝客户端会自动跳回到原来的应用程序
在原来的应用程序中显示支付结果给用户看
集成的流程图(官方)
下载SDK
根据dome配置开发环境:(微信提供了一个公共的测试账号,支付宝没有)
集成流程
项目中展示对应的商品内容
当用户点击购买时,通过支付宝购买商品
-
购买流程
- 根据对应的商品,生成订单
- 对订单进行签名加密
- 调用支付宝客户端进行支付
-
支付成功或者失败时回调
- 通过网页支付,则直接在block中直接拿到支付结果
- 通过支付宝客户端支付,则在appdelegate的代理方法中拿到支付结果
主要代码
// 1.获取签约之后的三个数据
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";
// 2.生成订单和签名
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = nil; //订单ID(由商家自行制定)
order.productName = product.name; //商品标题
order.productDescription = product.detail; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
// 服务器的回调地址
order.notifyURL = @"http://www.xxx.com"; // 用户支付成功后,支付宝服务器会同步通知我们的服务器.我们服务器需要有一个可以回调的地址
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showUrl = @"m.alipay.com";
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alipay";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
// 跳转到支付宝进行支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
- 在AppDelegate配置处理返回的支付结果
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
return YES;
}