zoukankan      html  css  js  c++  java
  • iOS集成支付宝

    需要企业和支付宝签约
    这个是需要审核的【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代码欢迎大家下载观看(点击下载
     
     
  • 相关阅读:
    币值转换
    第八周作业
    第七周作业
    第五周编程总结
    第四周编程总结
    第三周编程总结
    7-1 查找整数
    7-2 求最大值及其下标
    秋季学习总结
    对我影响最大的三个老师
  • 原文地址:https://www.cnblogs.com/GhostKZShadow/p/5108757.html
Copyright © 2011-2022 走看看