集成支付寶
步驟
向支付寶申請(qǐng),與支付寶簽約,獲得商戶ID(partner)和賬號(hào)ID(seller)
下載相應(yīng)的公鑰私鑰文件(加密簽名用)
下載支付寶SDK
生成訂單信息,簽名加密
調(diào)用支付寶客戶端,由支付寶客戶端跟支付寶安全服務(wù)器打交道
支付完畢后,支付寶客戶端會(huì)自動(dòng)跳回到原來的應(yīng)用程序在原來的應(yīng)用程序中顯示支付結(jié)果給用戶看
支付流程
實(shí)現(xiàn)集成
步驟
-
1.下載支付寶SDK
2.查看SDK的Demo實(shí)例程序
如何集成
- 1.創(chuàng)建項(xiàng)目
- 2.導(dǎo)入支付寶靜態(tài)庫(kù)
-
3.導(dǎo)入集成支付寶用到的所需頭文件
集成開發(fā)
- 1.Product模型創(chuàng)建
#import <Foundation/Foundation.h>
@interface Product : NSObject
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *detail;
@property (nonatomic, assign) double price;
- (instancetype)initWithTitle:(NSString *)title detail:(NSString *)detail price:(double)price;
+ (instancetype)productWithTitle:(NSString *)title detail:(NSString *)detail price:(double)price;
@end
2.Order模型兄纺,直接拖拽支付寶SDK中Demo的有現(xiàn)成的
-
3.購(gòu)買Product
- 設(shè)置訂單信息并簽名
- 利用ApliyServer類的對(duì)象方法payOrder......祝辣,發(fā)送支付請(qǐng)求
/**
* 支付接口
*
* @param orderStr 訂單信息
* @param schemeStr 調(diào)用支付的app注冊(cè)在info.plist中的scheme
* @param compltionBlock 支付結(jié)果回調(diào)Block
*/
- (void)payOrder:(NSString *)orderStr
fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock;
- 購(gòu)買 代碼實(shí)現(xiàn)
#import "ViewController.h"
#import "Product.h"
#import "Order.h"
#import "DataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
@interface ViewController ()
/** 產(chǎn)品數(shù)組 */
@property (nonatomic, strong) NSArray *products;
@end
@implementation ViewController
#pragma mark - 重寫tableView的數(shù)據(jù)源和代理方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.products.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"ProductCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
// 1.取出模型對(duì)象
Product *product = self.products[indexPath.row];
// 2.給cell設(shè)置數(shù)據(jù)
cell.textLabel.text = product.title;
cell.detailTextLabel.text = [NSString stringWithFormat:@"價(jià)格:%.2f", product.price];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.取出模型對(duì)象
Product *product = self.products[indexPath.row];
// 2.購(gòu)買商品
[self buyProduct:product];
}
- (void)buyProduct:(Product *)product
{
// 1.添加寫partner/seller/privateKey,簽約后獲得
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";
// 2.生成訂單
// 2.1.創(chuàng)建訂單
Order *order = [[Order alloc] init];
// 2.2.設(shè)置商戶ID/賬號(hào)ID
order.partner = partner;
order.seller = seller;
// 2.3.設(shè)置訂單號(hào)
order.tradeNO = nil;
// 2.4.設(shè)置產(chǎn)品相關(guān)的信息
order.productName = product.title;
order.productDescription = product.detail;
order.amount = [NSString stringWithFormat:@"%.2f", product.price];
// 2.5.設(shè)置訂單常量
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showUrl = @"m.alipay.com";
// 2.6.回調(diào)URL(異步通知服務(wù)器的地址)
order.notifyURL = @"http://www.xxx.com"; //回調(diào)URL
// 2.7.將訂單信息拼接成字符串
NSString *orderSpec = [order description];
// 3.對(duì)訂單進(jìn)行簽名加密
// 3.1.對(duì)訂單進(jìn)行加密
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
// 3.2.將簽名成功字符串格式化為訂單字符串,請(qǐng)嚴(yán)格按照該格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"];
// 4.打開支付寶客戶端進(jìn)行支付(用戶沒有安裝支付寶客戶端,直接在應(yīng)用程序中添加一個(gè)WebView,通過網(wǎng)頁(yè)讓用戶進(jìn)行支付)
// 注意:如果是通過網(wǎng)頁(yè)支付完成,那么會(huì)回調(diào)該block:callback
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jingdong" callback:^(NSDictionary *resultDic) {
}];
}
#pragma mark - 懶加載代碼
- (NSArray *)products
{
if (_products == nil) {
Product *product = [Product productWithTitle:@"iPhone6 Plus" detail:@"土豪金iPhone6 Plus" price:1000];
Product *product1 = [Product productWithTitle:@"iPhone6s Plus" detail:@"玫瑰金iPhone6s Plus" price:800];
Product *product2 = [Product productWithTitle:@"iMac" detail:@"只要999,iMac抱回家" price:100000];
Product *product3 = [Product productWithTitle:@"applewatch" detail:@"applewatch裝x神器" price:120000];
self.products = @[product, product1, product2, product3];
}
return _products;
}
@end
#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;
}
// 當(dāng)通過別的應(yīng)用程序,將該應(yīng)用程序打開時(shí),會(huì)調(diào)用該方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// 當(dāng)用戶通過支付寶客戶端進(jìn)行支付時(shí),會(huì)回調(diào)該block:standbyCallback
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
return YES;
}
@end
集成過程可能遇到問題
- 1.要設(shè)置好協(xié)議頭残腌,因?yàn)榧芍Ц秾毩瓒ⅲl(fā)送支付請(qǐng)求的時(shí)候需要用到(應(yīng)用注冊(cè)scheme)
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic)
- 1.1通過xcode窗口界面配置
- 1.2通過info.plist文件配置
- 2.可能找不到需要類的頭文件
-
3.加入asn1.h所需頭文件找不到
- 問題:
-
解決方法:
- 問題:
-
4.導(dǎo)入支付寶依賴的系統(tǒng)框架
-
問題
- 解決方法
-