使用支付宝进行一个完整的支付功能,大致有以下步骤:
1.向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
下载支付宝SDK
2.生成订单信息,签名加密
3.调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
4.支付完毕后,支付宝客户端会自动跳回到原来的应用程序
5.在原来的应用程序中显示支付结果给用户看
#import "ViewController.h"
#import "Product.h"
#import "Order.h"
#import "DataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
@interface ViewController ()
/** 商品 */
@property (nonatomic, strong) NSArray *products;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.products.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
// 1.取出模型
Product *product = self.products[indexPath.row];
// 2.给Cell设置数据
cell.textLabel.text = product.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"价格:%.2f", product.price];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.取出模型
Product *product = self.products[indexPath.row];
// 2.购买商品
[self buyProduct:product];
}
- (void)buyProduct:(Product *)product
{
// 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.desc; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
// 填写服务器的回调地址
order.notifyURL = @"http://www.xxx.com"; //回调URL
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"];
// 调用对应SDK,打开支付宝客户端,开始支付(如果用户手机安装客户端了,那么打开客户端进行支付.如果用户没有安装客户端,打开网页让用户支付,如果有支付结果,在这里回调)
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
}];
}
#pragma mark - 懒加载代码
- (NSArray *)products
{
if (_products == nil) {
Product *product = [Product productWithPrice:11500.0 name:@"iPhone 4" desc:@"Phone 4已经绝版了,所有非常贵"];
Product *product1 = [Product productWithPrice:11500.0 name:@"iMac土豪金" desc:@"土豪金看起来比较帅"];
Product *product2 = [Product productWithPrice:499.0 name:@"1T硬盘" desc:@"1T硬盘不要998,不要98,只要499"];
Product *product3= [Product productWithPrice:123000 name:@"iWatch镀金" desc:@"装x必备商品"];
_products = @[product, product1, product2, product3];
}
return _products;
}
@end