iOS支付寶支付詳細實現流程


支付在很多主流的APP中都會用到,最常見的支付是支付寶、微信、銀聯等。

剛好公司項目都需要用到,目前只調試好了支付寶,之前想抽時間寫,總是拖拖拉拉的,索性在后台寫微信支付的時候狠下心來把支付寶SDK集成以及支付實現記錄下來,后續會陸續放上微信,銀聯等支付文章,不足之處希望各位看官諒解,小子會加以改正。

注意:支付寶開發文檔多看幾遍!!!

一起看一下支付寶支付流程圖,這樣方便大家理解每一步后台做了什么,移動端需要怎么進行配合:

1.首先在支付寶平台創建應用,獲取appid,appid是16位數字,在項目中需要用到(之后開通支付功能)。open.alipay.com

2.獲取appid之后,下載官方調試Demo,https://docs.open.alipay.com/54/104509

之后會看到分別有iOS和Android代碼,打開如下:

a.分別將下圖中的1,2放到自己的工程當中

b.添加一下需要的依賴庫,支付寶文檔中可查到https://docs.open.alipay.com/204/105295/

c.工程中在Info下找到Url Types,添加支付寶的Url Schemes,支付的時候需要使用

 

然后運行demo,基本不會報錯,報錯的話,查一下文檔,會有解決辦法

支付寶SDK集成完成了,那么下面就是支付流程,也就是demo了:

這里的圖片是以上下載的支付寶支付調試Demo,支付方法里面的demo可以根據自己需要進行更改,

這里貼上我在項目中使用的demo:

這里需要后台給一個接口,獲取訂單的總額,外部訂單號,通知url,body,subject以便支付的時候進行更換

自己項目中還需要更換的就是之前獲取的APPID,私鑰AliPrivate,AliScheme,

 1 NSURL * myURL_APP_A = [NSURL URLWithString:@"alipay:"];
 2     if (![[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
 3         //如果沒有安裝支付寶客戶端那么需要安裝
 4         [MBProgressHUD showMBPAlertView:@"您還沒有安裝支付寶" withSecond:2.0];
 5         return;
 6     }
 7     NSDictionary *dic = @{
 8                           @"orderNo":orderModel.orderNo
 9                           };
10     [[SG_HttpsTool sharedSG_HttpsTool] postWithURL:SHAlipayRequestUrl params:dic success:^(id JSON, int code, NSString *msg) {
11         
12         if (code == 0) {
13 
14             SH_PayAlipayModel *aliModel = [SH_PayAlipayModel mj_objectWithKeyValues:JSON[@"alipaymentOrder"]];
15             //私鑰是后台分發的
16             NSString *rsa2PrivateKey = AliPrivateKey;
17             NSString *rsaPrivateKey = @"";
18             //AppIDhe PrivateKey沒有配置的提示
19             if ([AlipayAppId length] == 0 || [AliPrivateKey length] == 0) {
20                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"缺少appid或者私鑰" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];
21                 [alert show];
22                 return;
23             }
24             
25             
26             /**
27              *  生成訂單信息
28              *  將商品信息賦予AliPayOrder的成員變量
29              */
30             Order *order = [[Order alloc] init];
31             //appid---》之前獲得的APPID
32             order.app_id = AlipayAppId;
33             //支付接口名稱
34             order.method = @"alipay.trade.app.pay";
35             //參數編碼格式
36             order.charset = @"utf-8";
37             //當前時間點
38             NSDateFormatter *formatter = [NSDateFormatter new];
39             [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
40             order.timestamp = [formatter stringFromDate:[NSDate date]];
41             
42             //支付版本
43             order.version = @"1.0";
44             order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
45             order.notify_url = aliModel.notifyUrl;
46             
47             order.biz_content = [BizContent new];
48             order.biz_content.body = aliModel.Description;
49             //支付寶支付頁面的訂單信息
50             order.biz_content.subject = aliModel.title;
51             //訂單id----》后台返回的
52             order.biz_content.out_trade_no = aliModel.outTradeNo;
53             //超時時間
54             order.biz_content.timeout_express = @"30s";
55             //價格---》后台返回
56             order.biz_content.total_amount = aliModel.totalAmount;
57             
58             order.biz_content.product_code = @"QUICK_MSECURITY_PAY";
59             
60             /**
61              *  將商品信息拼接成字符串
62              */
63             NSString *orderInfo = [order orderInfoEncoded:NO];
64             NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
65             //SHLog(@"orderSpec = %@", orderInfo)
66             
67             //獲取私鑰並將商戶信息簽名,外部商戶的加簽過程務必放在服務端,防止公鑰數據泄露
68             //需要遵循RSA簽名規范,並將簽名字符串base64編碼和UrlEncode
69             NSString *signedString = nil;
70             APRSASigner* signer = [[APRSASigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
71             if ((rsa2PrivateKey.length > 1)) {
72                 signedString = [signer signString:orderInfo withRSA2:YES];
73             } else {
74                 signedString = [signer signString:orderInfo withRSA2:NO];
75             }
76             SHLog(@"%@", signedString)
77             //如果加簽成功,則繼續執行支付
78             if (signedString != nil) {
79                 //應用注冊scheme,在info.plist定義URL types
80                 //將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
81                 NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@", orderInfoEncoded, signedString];
82                 //調用支付結果開始支付, AliAppScheme-->之前設置的Url Schemes
83     
84                 [[AlipaySDK defaultService] payOrder:orderString fromScheme:AliAppScheme callback:^(NSDictionary *resultDic) {
85                     int resultStatus = [resultDic[@"resultStatus"] intValue];
86                     SHLog(@"%d", resultStatus)
87                     if (resultStatus == 9000) {
88                         
89                     }
90                 }];
91                 
92             }
93 
94         }
95     } failure:^(NSError *error) {
96         
97     }];
View Code

 

以上步驟完成之后,那么就可以調起支付寶進行支付了

下面開始支付寶支付結果之后的操作:

根據支付結果,進行通知處理,然后進行自己業務上的實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM