支付寶集成的介紹
第三方支付平臺,支付寶是用戶將錢付款給支付寶,之后支付寶將錢轉(zhuǎn)入我們自己的賬戶。
集成支付寶的步驟
向支付寶申請, 與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller)和私鑰(privateKey)
下載支付寶SDK
生成訂單信息,簽名加密
調(diào)用支付寶客戶端,由支付寶客戶端跟支付寶安全服務(wù)器打交道
支付完畢后,支付寶客戶端會自動跳回到原來的應(yīng)用程序
在原來的應(yīng)用程序中顯示支付結(jié)果給用戶看
集成的流程圖(官方)

下載SDK
官網(wǎng)地址:https://www.alipay.com

根據(jù)dome配置開發(fā)環(huán)境:(微信提供了一個公共的測試賬號,支付寶沒有)


支付完成之后跳轉(zhuǎn)的APP
集成流程
項目中展示對應(yīng)的商品內(nèi)容
當(dāng)用戶點擊購買時,通過支付寶購買商品
-
購買流程
- 根據(jù)對應(yīng)的商品,生成訂單
- 對訂單進行簽名加密
- 調(diào)用支付寶客戶端進行支付
-
支付成功或者失敗時回調(diào)
- 通過網(wǎng)頁支付,則直接在block中直接拿到支付結(jié)果
- 通過支付寶客戶端支付,則在appdelegate的代理方法中拿到支付結(jié)果
主要代碼
// 1.獲取簽約之后的三個數(shù)據(jù)
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";
// 2.生成訂單和簽名
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = nil; //訂單ID(由商家自行制定)
order.productName = product.name; //商品標(biāo)題
order.productDescription = product.detail; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品價格
// 服務(wù)器的回調(diào)地址
order.notifyURL = @"http://www.xxx.com"; // 用戶支付成功后,支付寶服務(wù)器會同步通知我們的服務(wù)器.我們服務(wù)器需要有一個可以回調(diào)的地址
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showUrl = @"m.alipay.com";
//應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types
NSString *appScheme = @"alipay";
//將商品信息拼接成字符串
NSString *orderSpec = [order description];
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
// 跳轉(zhuǎn)到支付寶進行支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
- 在AppDelegate配置處理返回的支付結(jié)果
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
return YES;
}