支付宝集成-iOS

时间:2021-05-19 04:41:06

新QQ交流群:418536818,之前的群已满

先与支付宝签约,获得商户ID (partner) 和账号ID (seller)  、还有私匙这些使我们iOS集成支付所需要的, 再去支付宝开放平台(支付宝)下载支付宝的iOS SDK,然后我们把一些相关的类库文件导入到我们的项目当中如下图;我们先导入4个静态库文件到项目中。

商家服务开通:https://b.alipay.com/order/productIndex.htm

产品商店->移动支付开通

我的商家服务查看PID和Key

第一步,确认商户信息有没有问题
第二步,确认生成的私钥和公钥,有没有把公钥上传到支付宝商户平台
第三步,在支付宝开发平台确认是否,已经获得 移动支付 权限
第四步,在开通移动支付的前提下,还需要签约https://b.alipay.com/order/productDetail.htm?productId=2014110308141993

sdk下载网址:http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1

支付宝集成-iOS

 导入上面这个4个库文件之后  我们再导入一些类文件,如下图,我标示的2是必须要导入的,因为2是模型数据的名称,1的话可以不导入,因为1这个文件夹里面的文件,是支付宝模拟支付所用到的假数据信息,包括加密的签名(sign)数据等等,这个其实我们的服务器给我们返回的。但是为了做测试我们用这2个文件夹里的文件模拟订单信息和签名信息。

支付宝集成-iOS

   当然,当我们导入上图1文件的时候,会有一些小错误,我只需要在配置的->build setting->Header search paths里面点击加号,添加  $(SRCROOT)/我们的工程名。例如我创建的工程的名字是payDemo,你们写的时候要和你们的工程名字一样,千万别和我的一样,否则会报错的。如下图:

支付宝集成-iOS

 我们再导入以下的系统库文件如下图 ; 除了红框里面的其他的都需要我们导入。

支付宝集成-iOS

我们再配置下url scheme来回调  我的url schme是thinklion  你们随便自己定义 如下图:

支付宝集成-iOS

 好,需要配置的我们都配置好了,接下来就需要我们写代码了。我们再AppDelegate.m文件中写如下代码:

#import "AppDelegate.h"

#import <AlipaySDK/AlipaySDK.h>

@interface AppDelegate ()


@end


@implementation AppDelegate



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    return YES;

}

//回调方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    //如果极简 SDK不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK if ([url.host isEqualToString:@"safepay"]) {

    [[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {

        NSLog(@"result = %@",resultDic);

    }];

    if ([url.hostisEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode

        [[AlipaySDKdefaultService]processAuthResult:urlstandbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

        }];

    }

    return YES;

}

 在按钮点击响应的方法来完成支付; 

#import "ViewController.h"

#import "Order.h"

#import "DataSigner.h"

#import <AlipaySDK/AlipaySDK.h>

@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}

- (IBAction)doSureButton:(id)sender {

    //下面3个参数我这里不写了因为这是我们公司的商户ID和私匙,你们可以用自己公司申请的填到上面。

    NSString *partner = @"";

    NSString *seller = @"";

    NSString *privateKey = @"";

    //如果partnerseller获取失败,提示用户

    if ([partner length] ==0 ||

        [seller length] == 0 ||

        [privateKey length] == 0)

    {

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"

                                                        message:@"缺少partner或者seller或者私钥。"

                                                       delegate:self

                                              cancelButtonTitle:@"确定"

                                              otherButtonTitles:nil];

        [alert show];

        return;

    }

    //2.创建订单对象

    Order *order=[[Orderalloc]init];

    order.partner=partner;

    order.seller=seller;

    order.tradeNO=@"201591734927845485340"//订单ID

    order.productName=@"iphone 6s" ;  //商品标题

    order.productDescription =@"超高配置 2个内存A9处理器 其性能是iphone61.8";//商品描述

    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 = @"thinklion";

    

    //将商品信息拼接成字符串 商品信息也是服务器返回的

    NSString *orderSpec = [order description];

    //此数据是服务器返回的证书类型

    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

    id<DataSigner> signer =CreateRSADataSigner(privateKey);

    //此签名信息是Utilopenssl里面的文件生成的数据   其实应该是我们服务器端给我们返回的

    NSString *signedString = [signer signString:orderSpec];

    

    NSLog(@"orderSpec = %@",orderSpec);

    

    NSString *orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",

                             orderSpec, signedString, @"RSA"];

    

    //如果有签名字符串才打开支付

    if(signedString!=nil){

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

            NSLog(@"reslut = %@",resultDic);

        }];

        

    }

}


支付宝商家服务电话:0571-88158090