需要企业和支付宝签约
这个是需要审核的【3天左右   以邮件形式告知你】

使用支付宝进行一个完整的支付功能,大致有以下步骤:
1>先与支付宝签约,获得商户IDpartner)和账号IDseller
(这个主要是公司的负责)
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集成支付宝的更多相关文章

  1. iOS集成支付宝支付

    本文由本人原创发表于博客园,转载请注明出处 http://www.cnblogs.com/wangqw/p/5074907.html 一. 开发前准备 iOS 支付宝SDK下载地址:(内含iOS An ...

  2. iOS - (集成支付宝SDK大坑总结)

    其实集成支付宝相对于集成微信支付来说,支付宝算是简单的了,后续有空再去研究微信支付,现目前先总结一下集成支付宝所遇到的坑,其实支付宝的坑也不算太多,细算下来大概5-6个左右,但是其报错方式有点恶心,不 ...

  3. iOS - (集成支付宝第三方SDK大坑总结)

    其实集成支付宝相对于集成微信支付来说,支付宝算是简单的了,后续有空再去研究微信支付,现目前先总结一下集成支付宝所遇到的坑,其实支付宝的坑也不算太多,细算下来大概5-6个左右,但是其报错方式有点恶心,不 ...

  4. iOS 集成支付宝过程中 我遇到的一些坑,请大家注意啦(ALI69错误,ALI64错误)

    支付宝很早一段时间就集成了,之前由于一直忙于开发就没有总结,今天整理桌面的时候看到,当时做支付时候的一些散落的笔记,就稍微整理一下,给大家分享一下. 第一:当时调用支付宝的时候,总是调不起来,进过断点 ...

  5. iOS 集成支付宝遇到的问题(续)

    调起支付宝进行支付时提示private key is null ,碰到这个问题有两种解决方案 第一种. 将私钥转成PKCS8替换一下原私钥即可 1.生成私钥pem,  执行命令openssl genr ...

  6. iOS——集成支付宝 系统繁忙,请稍后再试ALI40247

    问题描述:在调用支付宝时,老是显示,系统繁忙,请稍后再试ALI40247. 解决方案: 一.如何签约APP支付接口   第一步:进入管理中心:https://openhome.alipay.com/p ...

  7. iOS——集成支付宝 系统繁忙,请稍后再试ALI10

    问题描述:调用支付宝时,显示系统繁忙,请稍后再试(ALI10).代码没有报错,其他也是按照文档来的,为何老是提示显示系统繁忙? 解决方案:还需要在targets的中info里面,添加  url typ ...

  8. iOS——集成支付宝 ’openssl/asn1.h' file not found

    问题原因:文件路径找不到的问题 解决方法:在 Building Settings -> Search Paths -> Header Search Paths 里,添加一个文件路径:$(P ...

  9. IOS 集成支付宝和邮件发送

    列表中自找 :http://blog.csdn.net/sing_sing?viewmode=contents

随机推荐

  1. App Store不能下载一直等待中的两种解决办法

    1,重启手机,之后确认是否得到改善 2,重启不行,更改WiFi的dns为114.114.114.114或者223.5.5.5 或 223.6.6.6,再重启手机 ps:我是第二种方法

  2. LINQ 基本子句之三 let

    let子句,可以作为临时变量储存表达式的结果,但是let子句一旦初始化后无法再次进行更改. 1. static void Main(string[] args) { string[] names = ...

  3. android中跨进程通讯的4种方式

    转自:http://blog.csdn.net/lyf_007217/article/details/8542359 帖子写的很好.看来一遍,试了一遍,感觉太有意义.必须转过来! android中跨进 ...

  4. Springmvc和velocity使用的公用后台分页

    Springmvc和velocity使用的公用后台分页 类别                    [选择一个类别或键入一个新类别] Springmvc和velocity使用的公用后台分页 样式: 使 ...

  5. angular $location常用方法使用

    $location提供了一些常用的操作和获取地址栏里的地址的方法. <script type="text/javascript"> angular.module('ap ...

  6. nodejs实现接收Snmp的Trap消息

    var assert = require('assert'); var ASN1 = { EOC: 0, Boolean: 1, Integer: 2, BitString: 3, OctetStri ...

  7. 数据结构算法应用C++语言描述——(1)C++基础知识

    一.二维数组 (1)二维数组的列是固定时,行未知时使用动态分配 当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法 来创建二维数组.例如,一个类型为char的7×5数组可用 ...

  8. JSP作为img的src时chrome的bug

    废话不说,直接上代码. 新建一个jsp文件,名为img.jsp,代码如下: <%@page import="javax.imageio.ImageIO"%> <% ...

  9. php 代码重用

    <?php /* 21.php * 代码重用 * include() required()载入文件 * include() 如果载入文件不存在,提示警告,还可以继续执行 * required() ...

  10. 1207: C.LU的困惑

    题目描述 Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率.现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中( ...