iOS中 支付宝钱包详解/第三方支付

时间:2024-04-08 10:05:26

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!

一、在app中成功完成支付宝支付的过程

  1、申请支付宝钱包。参考网址:


     这是使用支付宝支付的第一步,合作申请通过之后,会集成一个开发文件。即使不申请也可以下载,只是demo中会缺少几个必须的参数: 在demo中的 PartnerConfig.h 文件中可以看到

//合作身份者id,以2088开头的16位纯数字

#define PartnerID @""

//收款支付宝账号

#define SellerID  @""

//安全校验码(MD5)**,以数字和字母组成的32位字符

#define MD5_KEY @""

//商户私钥,自助生成

#define PartnerPrivKey 

//支付宝公钥(老板给你的)

#define AlipayPubKey   @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB"


只有这几个参数备齐之后,demo才可以完成支付,所以接下来第二步


2、生成RSA
    这个需要在windows系统下生成,开发文档中也有生成的步骤。我是直接问后台要了这几个参数,所以这一步只能简单写到这。
 3、导入框架
      根据集成文件的开发文档,导入框架。可以参考demo。当四个参数都备齐之后可以先在demo上试一下能不能成功支付。然后再往自己的程序中导入。

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

二、代码的使用
1、支付需要的参数
    在demo中的ViewController.h中可以看到有这么一段代码

@interface Product :NSObject{

@private

float _price;

NSString *_subject;

NSString *_body;

NSString *_orderId;

}


@property (nonatomic,assignfloat price;

@property (nonatomic,retainNSString *subject;

@property (nonatomic,retainNSString *body;

@property (nonatomic,retainNSString *orderId;


@end


 这个就是所支付产品需要的几个必要的字段。在开发文档中可以看到需要好多参数,但在真正用时,只需要特别注意这几个就行。demo中有自动拼接的方法,到时候直接调用就行。


2、app和支付宝客户端之间的跳转

   NSString *appScheme = @"AlipaySdkDemo"; //应用跳转的URL

     *这里要和plist文件中URL types 下面的字段保持一致


3、支付结果的入口

  首先是WAP端的入口,在ViewController.m文件中可以找到,这里返回支付结果,比较简单,不多说。

  独立端的入口,在AppDelegate里面,我试着在viewcontroller中找这个,但最后没找到。最后只能设置一个观察者,把支付结果发送过来再进行处理。


三、总结

 第一次接触支付方面的东西,刚开始很迷茫,不明白其中财务方面是怎么对上号的。

 那些都是在后台进行处理的,iOS开发时需要做的,就是完成这个支付流程。


==================================具体看下面流程====================================

第一步:引入框架

iOS中 支付宝钱包详解/第三方支付


每日更新关注:http://weibo.com/hanjunqiang  新浪微博


第二步:注意框架及拉进相关文件

iOS中 支付宝钱包详解/第三方支付


每日更新关注:http://weibo.com/hanjunqiang  新浪微博


第三步:上代码

直接建立根视图:

[objc] view plain copy
  1. #import "RootViewController.h"  
  2. #import <AlipaySDK/AlipaySDK.h>  
  3. #import "Order.h"  
  4. #import "DataSigner.h"  
  5. @interface RootViewController ()  
  6.   
  7. @end  
  8.   
  9. @implementation RootViewController  
  10.   
  11. - (void)viewDidLoad {  
  12.     [super viewDidLoad];  
  13.     UIButton *button = [UIButton buttonWithType:(UIButtonTypeSystem)];  
  14.     [button addTarget:self action:@selector(buttonAction :) forControlEvents:(UIControlEventTouchUpInside)];  
  15.     button.frame = CGRectMake(100200100100);  
  16.     [button setTitle:@"支付" forState:(UIControlStateNormal)];  
  17.     [button setBackgroundColor:[UIColor yellowColor]];  
  18.     [self.view addSubview:button];  
  19.     self.view.backgroundColor = [UIColor greenColor];  
  20.   
  21.       
  22. }  
每日更新关注:http://weibo.com/hanjunqiang  新浪微博


点击事件:

[objc] view plain copy
  1. - (void)buttonAction : (UIButton *)sender  
  2. {  
  3. //    NSLog(@"支付");  
  4.       
  5.     /* 
  6.      *点击获取prodcut实例并初始化订单信息 
  7.      */  
  8. //    Product *product = [self.productList objectAtIndex:indexPath.row];  
  9.       
  10.     /* 
  11.      *商户的唯一的parnter和seller。 
  12.      *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。 
  13.      */  
  14.       
  15.     /*============================================================================*/  
  16.     /*=======================需要填写商户app申请的===================================*/  
  17.     /*============================================================================*/  
  18.     // 16位的纯数字  
  19.     NSString *partner = @"2088。。公司唯一ID";  
  20.     // 收款账户  
  21.     NSString *seller = @"收款账号";  
  22.     NSString *privateKey = @"**";  
  23.     /*============================================================================*/  
  24.     /*============================================================================*/  
  25.     /*============================================================================*/  
  26.       
  27.     //partner和seller获取失败,提示  
  28.     if ([partner length] == 0 ||  
  29.         [seller length] == 0 ||  
  30.         [privateKey length] == 0)  
  31.     {  
  32.         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"  
  33.                                                         message:@"缺少partner或者seller或者私钥。"  
  34.                                                        delegate:self  
  35.                                               cancelButtonTitle:@"确定"  
  36.                                               otherButtonTitles:nil];  
  37.         [alert show];  
  38.         return;  
  39.     }  
  40.       
  41.     /* 
  42.      *生成订单信息及签名 
  43.      */  
  44.     //将商品信息赋予AlixPayOrder的成员变量  
  45.     Order *order = [[Order alloc] init];  
  46.     order.partner = partner;  
  47.     order.seller = seller;  
  48.     order.tradeNO = @"123456"//订单ID(由商家自行制定)  
  49.     order.productName = @"太空杯"//商品标题  
  50.     order.productDescription = @"耐摔的太空杯"//商品描述  
  51.     order.amount = [NSString stringWithFormat:@"%.2f",0.01]; //商品价格  
  52.     order.notifyURL =  @"http://www.lanou3g.com"; //回调URL  
  53.       
  54.     order.service = @"mobile.securitypay.pay";  
  55.     order.paymentType = @"1";  
  56.     order.inputCharset = @"utf-8";  
  57.     order.itBPay = @"30m";  
  58.     order.showUrl = @"m.alipay.com";  
  59.       
  60.     //应用注册scheme,在AlixPayDemo-Info.plist定义URL types  
  61.     NSString *appScheme = @"xiaohange";  
  62.       
  63.     //将商品信息拼接成字符串  
  64.     NSString *orderSpec = [order description];  
  65.     NSLog(@"orderSpec = %@",orderSpec);  
  66.       
  67.     //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode  
  68.     id<DataSigner> signer = CreateRSADataSigner(privateKey);  
  69.     NSString *signedString = [signer signString:orderSpec];  
  70.       
  71.     //将签名成功字符串格式化为订单字符串,请严格按照该格式  
  72.     NSString *orderString = nil;  
  73.     if (signedString != nil) {  
  74.         orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",  
  75.                        orderSpec, signedString, @"RSA"];  
  76.           
  77.         [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {  
  78.             NSLog(@"reslut = %@",resultDic);  
  79.         }];  
  80.   
  81.   
  82.     }  
  83. }  
  84.   
  85. //选中商品调用支付宝极简支付  
  86. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  
  87. {  
  88.       
  89. }  
每日更新关注:http://weibo.com/hanjunqiang  新浪微博


最终效果:

iOS中 支付宝钱包详解/第三方支付

每日更新关注:http://weibo.com/hanjunqiang  新浪微博