-
在支付宝开发中心与支付宝签约
店家我的商家服务—在页面的下方找到——>签约管理—>找到移动支付—–>点击下载集成文档—>跳到新的页面,在页面下方—>找到下载开发包
获取相应的ID和密钥(公钥加密,私钥解密)
密钥一般由后台提供,也可通过官方的密钥生成器来生成,生成的公钥需要关联到账号(首页—>查看PID|KEY—>输入支付密码,查询key、支付宝公钥—>上传RSA公钥<注意不能有空格,换行之类的>) -
添加相应的文件
sdk文件夹路径.png
-
导入系统依赖库
libc++.tbd
Iibz.tbd
CoreGraphics.framework
CoreTeIephonyframework
CoreText.framework
QuartzCore.framework
SystemConfiguration .framework
CFNetworkframework
CoreMotion .framework
libcrypto.a
AlipaySDK.framework
libssl.a
依赖库.png
-
配置App跳转的白名单
-
添加URL Schemes
和调用支付接口时传入的Schemes一致,例如
-
配置代码
NSDictionary *dict = (NSDictionary *)result; NSString *partner = [[dict[@"data"] objectAtIndex:0] objectForKey:@"partner"]; NSString *seller = [[dict[@"data"] objectAtIndex:0] objectForKey:@"seller_id"]; NSString *privateKey = [[dict[@"data"] objectAtIndex:0] objectForKey:@"sign"]; //partner和seller获取失败,提示 if ([partner length] == 0 || [seller length] == 0 || [privateKey length] == 0) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"缺少partner或者seller或者私钥。" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; return; } /* *生成订单信息及签名 */ //将商品信息赋予AlixPayOrder的成员变量 Order *order = [[Order alloc] init]; order.partner = partner; order.seller = seller; order.tradeNO = self.orderID;//订单ID(由商家自行制定) order.productName = self.orderID; //商品标题 order.productDescription = self.orderID; //商品描述 order.amount = self.totalPrice; //商品价格 order.notifyURL = self.notifyUrl;//回调URL //下述参数按照官方给定输入 order.service = @"mobile.securitypay.pay";//支付接口名称 order.paymentType = @"1";//支付类型。 order.inputCharset = @"utf-8";//编码 order.itBPay = @"30m";//超时时间 order.showUrl = //应用注册scheme NSString *appScheme = @"XXXXX"; //将商品信息拼接成字符串 NSString *orderSpec = [order description]; //将签名成功字符串格式化为订单字符串,请严格按照该格式 NSString *orderString = nil; if (privateKey != nil) { orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, privateKey, @"RSA"]; [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) { //支付成功 }else{ //支付失败 } }]; }
-
注意事项:
- 导入文件后还需添加文件路径(文件路径为相对路径$(PROJECT_DIR)),否侧在使用时会出现头文件无法找到的错误
- 进行了上述操作,当编译时会出现base64.h openssl_wrapper.h文件存在大量的错误信息,这因为.h文件缺少#import<Foundation/Foundation.h>
- 由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑。
上述逻辑在AppDelegate.m中进行
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
if ([url.host isEqualToString:@"safepay"]) {//支付宝回调
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"支付结果 = %@",resultDic);
//在resultStatus=9000,并且success=“true”以及sign=“xxx”校验通过的情况下,证明支付成功。其它情况归为失败。较低安全级别的场合,也可以只通过检查resultStatus以及success=“true”来判定支付结果
}];
}
return YES;
}