集成支付宝
2016-05-09 00:19
316 查看
关于支付宝,不说了,直接开始吧。
首先当然要去支付宝开放平台注册账号以及下载SDK之类的,然后在自己项目中添加好依赖库,添加 url scheme 等等...
我直接讲代码
服务器签名版本:
现在为了安全考虑基本上都是服务器签名,所以这就极大的简化了我们在代码里的操作,只需一步即可调出支付
下面就是点击支付按钮的方法
然后还要在AppDelegate.m里处理一下回调
上面我写了两遍回调方法是因为我发现只写一次的话,支付回来之后并不会执行block里的内容,而写两次才会走下面方法里的block,很奇怪,至今我也不知道为什么
本地签名版本:
因为我们后台没做过支付,所以做的时候有问题,导致我只能本地签名成功之后跟后台返回的参数一一比较,最后才解决好,姑且也做了下本地签名的方法:
需要从支付宝demo里把以下文件导入工程
导入以上文件后,应该会遇到什么文件找不到之类的错误
解决办法:把以上文件丢入一个文件夹内,然后把文件夹拖到 Targets->Build Settings->Header Search Path中,我这就不截图了,实在不会就百度一下,很多的.
然后在支付方法里写:
还算比较简单吧,比后台签名版本仅仅多了个本地签名的步骤,而且签名方法都是现成的不用我们写,以上就是集成支付宝的代码
首先当然要去支付宝开放平台注册账号以及下载SDK之类的,然后在自己项目中添加好依赖库,添加 url scheme 等等...
我直接讲代码
服务器签名版本:
现在为了安全考虑基本上都是服务器签名,所以这就极大的简化了我们在代码里的操作,只需一步即可调出支付
下面就是点击支付按钮的方法
//应用注册scheme NSString *appScheme = @"这里写你自己配置的 url scheme"; //调支付 [[AlipaySDK defaultService] payOrder:@"签名之后的订单信息字符串(服务器返回给我们的)" fromScheme:appScheme callback:^(NSDictionary *resultDic) { //支付宝的回调对应的状态码 NSInteger resultStatus = [resultDic[@"resultStatus"] integerValue]; /* 9000 订单支付成功 8000 正在处理中 4000 订单支付失败 6001 用户中途取消 6002 网络连接出错 */ //之后根据回调处理结果即可 }];
然后还要在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(@"result = %@",resultDic); }]; [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"result = %@",resultDic); if ([resultDic[@"resultStatus"] integerValue] == 9000) { //支付成功 NSLog(@"支付成功"); } }]; return YES; }
上面我写了两遍回调方法是因为我发现只写一次的话,支付回来之后并不会执行block里的内容,而写两次才会走下面方法里的block,很奇怪,至今我也不知道为什么
本地签名版本:
因为我们后台没做过支付,所以做的时候有问题,导致我只能本地签名成功之后跟后台返回的参数一一比较,最后才解决好,姑且也做了下本地签名的方法:
需要从支付宝demo里把以下文件导入工程
导入以上文件后,应该会遇到什么文件找不到之类的错误
解决办法:把以上文件丢入一个文件夹内,然后把文件夹拖到 Targets->Build Settings->Header Search Path中,我这就不截图了,实在不会就百度一下,很多的.
然后在支付方法里写:
//创建订单对象 Order *order=[[Order alloc]init]; order.partner=@"从商户后台获取"; order.seller=@"收款账户"; order.tradeNO=@"订单ID";//商家自行决定 order.productName=@"商品标题"; order.productDescription = @"商品描述"; 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 = @"url scheme"; //将商品信息拼接成字符串 NSString *orderSpec = [order description]; //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode id<DataSigner> signer = CreateRSADataSigner(privateKey); //此签名信息是Util和openssl里面的文件生成的数据 NSString *signedString = [signer signString:orderSpec]; NSLog(@"orderSpec = %@",orderSpec); //将签名成功字符串格式化为订单字符串,请严格按照该格式 NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"]; //调起支付 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"reslut = %@",resultDic); }];
还算比较简单吧,比后台签名版本仅仅多了个本地签名的步骤,而且签名方法都是现成的不用我们写,以上就是集成支付宝的代码
相关文章推荐
- 使用pt-table-checksum和pt-table-sync工具验证和修复主从数据不一致问题
- 新华三成立大会上,赵伟国、于英涛都说了什么?
- APP 启动过程、UIApplication、APPDelegate
- 2006年清华:N的阶乘
- 微信入坑第二弹【自动回复消息上】
- IT十八掌掌第四天课程总结
- StringBuilder和Stringbuffer 对比
- C++第5次作业
- OpenCV实践之路——MFC与OpenCV联合打开摄像头
- AVQueue的一些总结
- C#中dll的創建和使用
- 加解密归纳汇总(持续更新)
- ubuntu Linux下Codeblocks编译 SDL2.0工程
- 记录在windows下和linux下搭建svn服务器,并通过mac,windows端连接。
- 利用pyqt4写Python的图形化界面的笔记
- Spark 定制版:004~Spark Streaming事务处理彻底掌握
- 关于Markdown
- IT十八掌掌六天课程总结
- JS 密码加密
- 回到HTML〇