标签:
需要企业和支付宝签约
这个是需要审核的【3天左右 以邮件形式告知你】
使用支付宝进行一个完整的支付功能,大致有以下步骤:
1>先与支付宝签约,获得商户ID(partner)和账号ID(seller)
(这个主要是公司的负责)
2>下载相应的公钥私钥文件(加密签名用)
3>下载支付宝SDK(登录网站:http://club.alipay.com/)里面提供了非常详细的文档、如何签约、如何获得公钥私钥、如何调用支付接口。
4>生成订单信息
5>调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
6>支付完毕后返回支付结果给商户客户端和服务器
主要集成的关键就是下面几步:
//.封装订单模型
AlixPayOrder *order = [[AlixPayOrder alloc] init];
// 生成订单描述
NSString *orderSpec = [order description];
//2.签名
id<DataSigner> signer = CreateRSADataSigner(@“私钥key”);
// 传入订单描述 进行 签名
NSString *signedString = [signer signString:orderSpec];
//3.生成订单字符串
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"];
//4.调用支付接口
AlixPay * alixpay = [AlixPay shared];
// appScheme:商户自己的协议头
int ret = [alixpay pay:orderString applicationScheme:appScheme];
当我们点击支付按钮之后,支付宝的库会自动判断你的手机有没有安装支付宝,如果安装了会打开支付宝APP,如果没安装会打开h5的网页来支付。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
详细步骤
目前移动支付的主要商家有支付宝、微信支付、银联支付等。当然我们优选的还是支付宝,因为支付宝有着中国最多的用户量,市场占有量高,用户黏性强,而且使用也极其简单,只需要几分钟我们就可以快速的集成到我们的项目当中。
首先呢 我们先和支付宝签约,获得商户ID (partner) 和账号ID (seller) 、还有私匙这些使我们iOS集成支付所需要的, 再去支付宝开放平台(
支付宝)下载支付宝的iOS SDK,然后我们把一些相关的类库文件导入到我们的项目当中如下图;我们先导入4个静态库文件到项目中。
导入上面这个4个库文件之后 我们再导入一些类文件,如下图,我标示的2是必须要导入的,因为2是模型数据的名称,1的话可以不导入,因为1这个文件夹里面的文件,是支付宝模拟支付所用到的假数据信息,包括加密的签名(sign)数据等等,这个其实我们的服务器给我们返回的。但是为了做测试我们用这2个文件夹里的文件模拟订单信息和签名信息。
当然,当我们导入上图1文件的时候,会有一些小错误,我只需要在配置的->build setting->Header search paths里面点击加号,添加 $(SRCROOT)/我们的工程名。例如我创建的工程的名字是payDemo,你们写的时候要和你们的工程名字一样,千万别和我的一样,否则会报错的。如下图:
我们再导入以下的系统库文件如下图 ; 除了红框里面的其他的都需要我们导入。
我们再配置下url scheme来回调 我的url schme是thinklion 你们随便自己定义 如下图:
好,需要配置的我们都配置好了,接下来就需要我们写代码了。我们再AppDelegate.m文件中写如下代码:
[objc] view plaincopy 1. #import "AppDelegate.h"
2. #import <AlipaySDK/AlipaySDK.h>
3.
4.
@interface AppDelegate ()
5.
6.
@end 7.
8.
@implementation AppDelegate
9.
10.
11. - (
BOOL)application:(
UIApplication *)application didFinishLaunchingWithOptions:(
NSDictionary *)launchOptions {
12. // Override point for customization after application launch.
13.
return YES;
14. }
15.
16. //回调方法
17. - (
BOOL)application:(
UIApplication *)application openURL:(
NSURL *)url sourceApplication:(
NSString *)sourceApplication annotation:(
id)annotation {
18. //如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK if ([url.host isEqualToString:@"safepay"]) {
19. [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(
NSDictionary *resultDic) {
20. NSLog(@"result = %@",resultDic);
21. }];
22.
if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
23. [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(
NSDictionary *resultDic) {
24. NSLog(@"result = %@",resultDic);
25. }];
26. }
27.
return YES;
28. }
29.
30. @end
在按钮点击响应的方法来完成支付;
[objc] view plaincopy 1. #import "ViewController.h"
2. #import "Order.h"
3. #import "DataSigner.h"
4. #import <AlipaySDK/AlipaySDK.h>
5.
6.
@interface ViewController ()
7. - (IBAction)pay;
8.
9.
@end 10.
11.
@implementation ViewController
12.
13. - (
void)viewDidLoad {
14. [
super viewDidLoad];
15.
16. }
17.
18. //支付按钮点击的方法
19. - (IBAction)pay {
20. //下面3个参数 我这里不写了 因为这是我们公司的商户ID和私匙,你们可以用自己公司申请的填到上面。
21.
NSString *partner = @"";
22.
NSString *seller = @"";
23.
NSString *privateKey = @"";
24. //如果partner和seller获取失败,提示用户
25.
if ([partner length] == 0 ||
26. [seller length] == 0 ||
27. [privateKey length] == 0)
28. {
29.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
30. message:@"缺少partner或者seller或者私钥。"
31. delegate:
self 32. cancelButtonTitle:@"确定"
33. otherButtonTitles
:nil];
34. [alert show];
35.
return;
36. }
37. //2.创建订单对象
38.
Order *order=[[Order alloc]init];
39. order.partner=partner;
40. order.seller=seller;
41. //订单ID(由商家自行制定)
42. order.tradeNO=@"201591734927845485340";
43. //商品标题
44. order.productName=@"iphone 6s" ;
45. //商品描述
46. order.productDescription = @"超高配置 2个内存 配A9处理器 其性能是iphone6的1.8倍";
47. //商品价格
48. order.amount = @"0.01" ;
49. //回调URL
50. order.notifyURL = @"
http://www.xxx.com";
51. order.service = @"mobile.securitypay.pay";
52. order.paymentType = @"1";
53. order.inputCharset = @"utf-8";
54. order.itBPay = @"30m";
55. order.showUrl = @"
m.alipay.com";
56.
57.
NSString *appScheme = @"thinklion";
58.
59. //将商品信息拼接成字符串 商品信息也是服务器返回的
60.
NSString *orderSpec = [order description];
61. //此数据是服务器返回的证书类型
62. //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
63.
id<DataSigner> signer = CreateRSADataSigner(privateKey);
64. //此签名信息是Util和openssl里面的文件生成的数据 其实应该是我们服务器端给我们返回的
65.
NSString *signedString = [signer signString:orderSpec];
66.
67. NSLog(@"orderSpec = %@",orderSpec);
68.
69.
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
70. orderSpec, signedString, @"RSA"];
71.
72. //如果有签名字符串 才打开支付
73.
if(signedString!=
nil){
74. [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(
NSDictionary *resultDic) {
75. NSLog(@"reslut = %@",resultDic);
76. }];
77.
78. }
79.
80. }
81.
82.
83. @end
大家注意上述代码的2个地方,代码中订单信息 (orderSpec) 和签名信息(signedString)在实际项目中应该是服务器给我们返回的,而这里是自定义的demo.
//将商品信息拼接成字符串 商品信息也是服务器返回的
NSString *orderSpec = [orderdescription];
//此数据是服务器返回的证书类型
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer =CreateRSADataSigner(privateKey);
//此签名信息是Util和openssl里面的文件生成的数据 其实应该是我们服务器端给我们返回的
NSString *signedString = [signersignString:orderSpec];
当我们点击支付按钮之后,支付宝的库会自动判断你的手机有没有安装支付宝,如果安装了会打开支付宝APP,如果没安装会打开h5的网页来支付。这个是我写的支付宝demo代码欢迎大家下载观看(
点击下载)
iOS集成支付宝
标签:
原文地址:http://www.cnblogs.com/GhostKZShadow/p/5108757.html