新QQ交流群:418536818,之前的群已满
先与支付宝签约,获得商户ID (partner) 和账号ID (seller) 、还有私匙这些使我们iOS集成支付所需要的, 再去支付宝开放平台(支付宝)下载支付宝的iOS SDK,然后我们把一些相关的类库文件导入到我们的项目当中如下图;我们先导入4个静态库文件到项目中。
商家服务开通:https://b.alipay.com/order/productIndex.htm
产品商店->移动支付开通
我的商家服务查看PID和Key
第一步,确认商户信息有没有问题
第二步,确认生成的私钥和公钥,有没有把公钥上传到支付宝商户平台
第三步,在支付宝开发平台确认是否,已经获得 移动支付 权限
第四步,在开通移动支付的前提下,还需要签约https://b.alipay.com/order/productDetail.htm?productId=2014110308141993
sdk下载网址:http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1
导入上面这个4个库文件之后 我们再导入一些类文件,如下图,我标示的2是必须要导入的,因为2是模型数据的名称,1的话可以不导入,因为1这个文件夹里面的文件,是支付宝模拟支付所用到的假数据信息,包括加密的签名(sign)数据等等,这个其实我们的服务器给我们返回的。但是为了做测试我们用这2个文件夹里的文件模拟订单信息和签名信息。
当然,当我们导入上图1文件的时候,会有一些小错误,我只需要在配置的->build setting->Header search paths里面点击加号,添加 $(SRCROOT)/我们的工程名。例如我创建的工程的名字是payDemo,你们写的时候要和你们的工程名字一样,千万别和我的一样,否则会报错的。如下图:
我们再导入以下的系统库文件如下图 ; 除了红框里面的其他的都需要我们导入。
我们再配置下url scheme来回调 我的url schme是thinklion 你们随便自己定义 如下图:
好,需要配置的我们都配置好了,接下来就需要我们写代码了。我们再AppDelegate.m文件中写如下代码:
#import "AppDelegate.h"
#import <AlipaySDK/AlipaySDK.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
//回调方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//如果极简 SDK不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
if ([url.hostisEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
[[AlipaySDKdefaultService]processAuthResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
#import "ViewController.h"
#import "Order.h"
#import "DataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)doSureButton:(id)sender {
//下面3个参数我这里不写了因为这是我们公司的商户ID和私匙,你们可以用自己公司申请的填到上面。
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";
//如果partner和seller获取失败,提示用户
if ([partner length] ==0 ||
[seller length] == 0 ||
[privateKey length] == 0)
{
UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"
message:@"缺少partner或者seller或者私钥。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
return;
}
//2.创建订单对象
Order *order=[[Orderalloc]init];
order.partner=partner;
order.seller=seller;
order.tradeNO=@"201591734927845485340"; //订单ID
order.productName=@"iphone 6s" ; //商品标题
order.productDescription =@"超高配置 2个内存配A9处理器 其性能是iphone6的1.8倍";//商品描述
order.amount = @"0.01" ;//商品价格
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";
NSString *appScheme = @"thinklion";
//将商品信息拼接成字符串 商品信息也是服务器返回的
NSString *orderSpec = [order description];
//此数据是服务器返回的证书类型
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer =CreateRSADataSigner(privateKey);
//此签名信息是Util和openssl里面的文件生成的数据 其实应该是我们服务器端给我们返回的
NSString *signedString = [signer signString:orderSpec];
NSLog(@"orderSpec = %@",orderSpec);
NSString *orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
//如果有签名字符串才打开支付
if(signedString!=nil){
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
}