支付宝终于更新了SDK,减少了许多让人无语的错误。由于以后经常会用到,所以记录一下自己的集成流程。
一,导入SDK
在客户端组装请求信息需要导入这些,如果在服务器完成就只用导入.bundle和.framework。(虽然在支付宝加签有风险,但服务器不做也只能自己搞)
二,添加依赖库
三,运行注意
1 , "Cannot find interface declaration for 'NSObject', superclass of 'Base64'"类似这种错误。在报错文件添加Foundation头文件。(现在不会报这个错了)
2."openssl not found "需要设置路径。在target>build setting>header Search Paths中添加路径。方法:点击openssl文件showinfinder ,command+i在简介里查看文件路径。
$(SRCROOT)/加文件路径
3.Allow Arbitrary Loads
4.添加 URL Schemes
点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“alisdkdemo”。“alisdkdemo”来自于文件“APViewController.m”的NSString *appScheme = @“alisdkdemo”;。名字随便起,但不要与其他的重复
四,代码导入
1.appDelegate.m中
支付回调,在使用支付宝客户端是在这里回调,使用h5支付时在支付文件里回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// 当用户通过支付宝客户端进行支付时,会回调该block:standbyCallback
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
NSLog(@"---%@",[resultDic objectForKey:@"memo"]);
if ([[resultDic objectForKey:@"resultStatus"]isEqualToString:@"9000"]) {
//支付成功操作
}
else
{
//支付失败操作
}
self.alipayNav = nil;
}];
return YES;
}
2,支付文件中
不支持在客户端配置,如果你的后台愿意给的话。。。。。。。order是旧版本的,不过现在仍然可以用。新的版本可去官网下载。
NSString *partner = @"Your partnerID";
NSString *seller = @"Your sellerID";
// NSString *privateKey = @"4grcwb2et493dr0p0qhaoksgvvijdsus";
NSString *privateKey = @"Your privateKey";
Order *order = [[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = ???; //订单ID(由商家?自?行制定)
order.subject = ???; //商品标题
order.body = ???; //商品描述
order.totalFee = [NSString stringWithFormat:@"%.2f",[price floatValue]]; //商品价格
order.notifyURL = ???; //回调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];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
//【callback处理支付结果】
NSLog(@"reslut = %@",resultDic);
}];
}