寫得不錯很詳細,轉一個!其中base64報錯的確實是一個坑,挺惡心,發現支付寶和微信官方文檔都是寫得不怎么詳盡
在iOS中接入支付寶SDK進行支付
首先,需要到支付寶的官網下載SDK ? https://app.alipay.com/market/productIndex.htm
選擇移動支付
點擊進去之后,找到技術集成面板,下載SDK
這個開發包種有技術集成文檔,Demo,需要用到的庫等文件,這個東西需要看一下,關于錢的東西還是耐心一點比較好
其中即時到帳批量退款那一個文件夾我沒有看,應該還用不到
商戶接入支付寶收銀臺界面展示標準這個文件夾需要看,里面有需要用到的logo文件
支付寶錢包支付接口開發包是真正對開發有用的東西,其中有兩個文檔,如果沒有時間的話,就只看那個接入與使用規則文檔,其中第五條集成流程詳解
找到iOS的Demo將其解壓
雖然使用文檔上寫的特別簡單,似乎只需要拖進去兩個文件,但是其實不是這樣的,需要拖進去的文件有很多
libraries中需要存在的文件有
為什么支付寶自己的Demo怎么運行怎么順暢,而我剛把類庫導進去就報錯呢,那是因為支付寶自己的pch文件中寫了兩個import
#import
#import
而且,特么的根本不通知一聲
所以:
可能遇到的報錯問題
1
Cannot find interface declaration for "NSObject', superclass of 'Base64'
解決辦法:暫時不知道內部原因,添加#import 之后錯誤消除
2
解決辦法:暫時不知道內部原因,添加#import 之后錯誤消除
3
解決辦法:
這個東西搞了一天我也是醉了,路徑原因
在Build Settings中搜索“search”關鍵字,找到search paths
在header search paths 中添加新的路徑
$(SRCROOT)/“openssl文件夾所在路徑”
在這個Demo中,路徑就應該是$(SRCROOT)/AliPaySDKTest/CBAliPay
這樣error就消除了
4
沒有添加SystemConfiguration.framework
5 Undefined symbols for architecture x86_64:
"CreateRSADataSigner(NSString*)", referenced from:
-[CBAliPayViewController viewDidLoad] in CBAliPayViewController.o
這是因為你的調用支付寶控件的執行文件使用的是oc與c++混編,這里需要改成使用oc編譯器來編譯
所以,要調用支付寶,最好單獨用一個文件來寫,不然可能會跳坑,比如說我,把網銀的調用代碼和支付寶的調用代碼寫到一起,網銀需要oc混編,而支付寶不讓混編,最后還要再分開單獨寫,不說了,全都是淚
這就是遇到的全部問題,一個問題一個坑,跳坑跳的好酸爽
然后就是在項目中添加代碼
/*============================================================================*//*=======================需要填寫商戶app申請的===================================*//*============================================================================*///這里的三個參數是公司和支付寶簽約之后得到的,沒有這三個參數無法完成支付NSString *partner =@"";
NSString*seller =@"";
NSString*privateKey =@"";/*============================================================================*//*============================================================================*//*============================================================================*///partner和seller獲取失敗,提示if([partner length] ==0||[seller length]==0||[privateKey length]==0)
{
UIAlertView*alert = [[UIAlertView alloc] initWithTitle:@"提示"message:@"缺少partner或者seller或者私鑰。"delegate:self
cancelButtonTitle:@"確定"otherButtonTitles:nil];
[alert show];return;
}/**生成訂單信息及簽名*///將商品信息賦予AlixPayOrder的成員變量Order *order =[[Order alloc] init];
order.partner=partner;
order.seller=seller;#warning這里需要填商品信息order.tradeNO=@"";//訂單ID(由商家自行制定)order.productName =@"測試商品";//商品標題order.productDescription =@"這是一個測試商品";//商品描述order.amount =@"0.01";//商品價格order.notifyURL =@"";//回調URL? 這個URL是在支付之后,支付寶通知后臺服務器,使數據同步更新,必須填,不然支付無法成功//下面的參數是固定的,不需要改變order.service =@"mobile.securitypay.pay";
order.paymentType=@"1";
order.inputCharset=@"utf-8";
order.itBPay=@"30m";
order.showUrl=@"m.alipay.com";//應用注冊scheme,在AlixPayDemo-Info.plist定義URL types//如果不知道scheme是神馬東西,請自行百度NSString *appScheme =@"";//將商品信息拼接成字符串NSString *orderSpec =[order description];//獲取私鑰并將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,并將簽名字符串base64編碼和UrlEncodeid signer =CreateRSADataSigner(privateKey);
NSString*signedString =[signer signString:orderSpec];//將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式NSString *orderString =nil;if(signedString !=nil) {
orderString= [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString,@"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"使用支付寶的支付結果 %@",resultDic);
}];
}
支付寶到這里就完了,可喜可賀
轉載至 -- http://www.cnblogs.com/chebaodaren/p/4721344.html