//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
//詳情 :鏈接 http://write.blog.csdn.net/postedit/74078904
現(xiàn)在不少app內(nèi)都集成了支付寶功能
使用支付寶進(jìn)行一個完整的支付功能衅谷,大致有以下步驟:
1>先與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller)
(這個主要是公司的負(fù)責(zé))
2>下載相應(yīng)的公鑰私鑰文件(加密簽名用)
3>下載支付寶SDK(登錄網(wǎng)站:http://club.alipay.com/)
里面提供了非常詳細(xì)的文檔篮昧、如何簽約暇昂、如何獲得公鑰私鑰、如何調(diào)用支付接口掰烟。
4>生成訂單信息
5>調(diào)用支付寶客戶端爽蝴,由支付寶客戶端跟支付寶安全服務(wù)器打交道
6>支付完畢后返回支付結(jié)果給商戶客戶端和服務(wù)器
SDK里有集成支付寶功能的一個Demo> ?集成支付功能的具體操作方式,可以參考Demo
當(dāng)?shù)谝淮未蜷_Demo時纫骑,可能會出現(xiàn)以下問題:
錯誤原因很簡單蝎亚,就是項目的部署版本設(shè)置太低了,從3.0改為4.3即可
要想集成支付功能先馆,依賴以下文件夾的庫文件(把這3個添加到你的客戶端中)
調(diào)用支付接口可以參考AlixPayDemoViewController的下面方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
如何創(chuàng)建訂單 ( 訂單根據(jù)自己公司看是什么樣的)
如何簽名
如何調(diào)用支付接口
都在這個方法里面了
1//2//選中商品調(diào)用支付寶快捷支付3//4- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath5{6/*7*點擊獲取prodcut實例并初始化訂單信息8*/9Product *product =[_products objectAtIndex:indexPath.row];1011/*12*商戶的唯一的parnter和seller发框。13*本demo將parnter和seller信息存于(AlixPayDemo-Info.plist)中,外部商戶可以考慮存于服務(wù)端或本地其他地方。14*簽約后煤墙,支付寶會為每個商戶分配一個唯一的 parnter 和 seller梅惯。15*/16//如果partner和seller數(shù)據(jù)存于其他位置,請改寫下面兩行代碼17NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];18NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"];1920//partner和seller獲取失敗,提示21if([partner length] ==0|| [seller length] ==0)22{23UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"24message:@"缺少partner或者seller。"25delegate:self26cancelButtonTitle:@"確定"27otherButtonTitles:nil];28[alert show];29[alert release];30return;31}3233/*34*生成訂單信息及簽名35*由于demo的局限性仿野,本demo中的公私鑰存放在AlixPayDemo-Info.plist中,外部商戶可以存放在服務(wù)端或本地其他地方铣减。36*/37//將商品信息賦予AlixPayOrder的成員變量38AlixPayOrder *order =[[AlixPayOrder alloc] init];39order.partner =partner;40order.seller =seller;41order.tradeNO = [self generateTradeNO];//訂單ID(由商家自行制定)42order.productName = product.subject;//商品標(biāo)題43order.productDescription = product.body;//商品描述44order.amount = [NSString stringWithFormat:@"%.2f",product.price];//商品價格45order.notifyURL =@"http://www.xxx.com";//回調(diào)URL4647//應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types,用于快捷支付成功后重新喚起商戶應(yīng)用48NSString *appScheme =@"AlixPayDemo";4950//將商品信息拼接成字符串51NSString *orderSpec =[order description];52NSLog(@"orderSpec = %@",orderSpec);5354//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode55id signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"]);56NSString *signedString =[signer signString:orderSpec];5758//將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式59NSString *orderString =nil;60if(signedString !=nil) {61orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",62orderSpec, signedString,@"RSA"];6364//獲取快捷支付單例并調(diào)用快捷支付接口65AlixPay * alixpay =[AlixPay shared];66intret =[alixpay pay:orderString applicationScheme:appScheme];6768if(ret ==kSPErrorAlipayClientNotInstalled) {69UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"70message:@"您還沒有安裝支付寶快捷支付,請先安裝设预。"71delegate:self72cancelButtonTitle:@"確定"73otherButtonTitles:nil];74[alertView setTag:123];75[alertView show];76[alertView release];77}78elseif(ret ==kSPErrorSignError) {79NSLog(@"簽名錯誤徙歼!");80}8182}8384[tableView deselectRowAtIndexPath:indexPath animated:YES];85}

主要集成的關(guān)鍵就是下面幾步:
//.封裝訂單模型AlixPayOrder *order =[[AlixPayOrder alloc] init];//生成訂單描述NSString *orderSpec =[order description];//2.簽名id signer =CreateRSADataSigner(@“私鑰key”);//傳入訂單描述 進(jìn)行 簽名NSString *signedString =[signer signString:orderSpec];//3.生成訂單字符串NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString,@"RSA"];//4.調(diào)用支付接口AlixPay * alixpay =[AlixPay shared];//appScheme:商戶自己的協(xié)議頭intret = [alixpay pay:orderString applicationScheme:appScheme];
謝謝!!!