前言
其實支付很簡單,下載官方的SDK采幌,根據(jù)里面的開發(fā)者文檔和Demo劲够,配置支付,不會可以問客服休傍。(畢竟掏錢了嘛)
支付寶支付 (根據(jù)支付寶開發(fā)包流程進(jìn)行操作)
1征绎、下載官方SDK
支付寶SDK下載官方網(wǎng)站
https://doc.open.alipay.com/doc2/detail
2、添加依賴庫?
添加頭文件
(直接把官方的Order類文件拉進(jìn)去 還有l(wèi)ibcrypto.a libssl.a 這兩個靜態(tài)庫也拉進(jìn)去 openssl 文件夾 Util文件夾 畢竟人家都寫好了 不用白不用)
#import "Order.h"?
#import "DataSigner.h"
#import<AlipaySDK/AlipaySDK.h>
iOS9需要 配置ATS(App TransPort Security)
在相對應(yīng)的info.list文件添加ATS 在Allow Arbitrary Loads 選擇YES (沒辦法啊只能先用http吧)
報錯'NSObject' 'Base64' 添加頭文件 #import<Foundation/Foundation.h>
路徑找不到的錯誤 就在“Build Settings”選項卡,在搜索框中,以關(guān)鍵字“search”搜索,對“Header Search Paths”增加頭文件路徑:$(SRCROOT)/項目名稱磨取。
重要參數(shù)
商戶的唯一的parnter和seller簽約后人柿,支付寶會為每個商戶分配一個唯一的 parnter 和 seller
parnter是商戶ID 以 2088 開頭由 16 位純數(shù)字組成的字符串。
seller是賬戶ID 支付寶收款賬號,手機(jī)號碼或郵箱格式忙厌。
私鑰:用來加密.在前端進(jìn)行使用
公鑰:用來解密.通過網(wǎng)頁的形式上傳到支付寶公司
事例Demo
首先在AppDelegate.m引入頭文件#import<AlipaySDK/AlipaySDK.h>
然后添加返回數(shù)據(jù)的方法
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
{
[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);//返回的支付結(jié)果?
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶 app 在后臺很可能被系統(tǒng) kill 了,所以 pay 接 口的 callback 就會失效,請商戶對 standbyCallback 返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個方法 里面處理跟 callback 一樣的邏輯】
}];
return YES;
}
在Info.plist里面添加URL types 添加item URL identifier 再添加 URL Schemes 再添加一個字符串類型 這就是返回的字符串 (必須添加 坑點Y灬!7昃弧)
/*? ? *商戶的唯一的parnter和seller哥放。? ? *簽約后扎阶,支付寶會為每個商戶分配一個唯一的 parnter 和 seller。? ? */? ? //以2088開頭由16位純數(shù)字字符串??
? NSString *partner = @"2088501566833063";//商戶ID ??
?NSString *seller = @"wangxiang@qq.com";//賬戶id手機(jī)號碼 或者郵箱格式? ?
?NSString *privateKey = @"好大一串密碼婶芭!";//私鑰? ? //公鑰用來解密的? ? ? ? //partner和seller獲取失敗,提示? ?
?if ([partner length] == 0 ||? ? ?
?? [seller length] == 0 ||? ?
?? ? [privateKey length] == 0)??
? {? ? ? ? NSLog(@"缺少partner和seller或者私匙");? ? ? ? return;? ? }? ? ?
?? /*? ? *生成訂單信息及簽名? ? */??
? //將商品信息賦予AlixPayOrder的成員變量??
? Order *order = [[Order alloc] init];? ?
?order.partner = partner;??
? order.seller = seller;? ?
?order.tradeNO = @"20160109095"; //訂單ID(由商家自行制定)??
? order.productName = @"煎餅果子鄭能量"; //商品標(biāo)題? ?
?order.productDescription = @"煎餅果子最好吃只要998"; //商品描述??
? order.amount = [NSString stringWithFormat:@"%.2f",998.80]; //商品價格? ?
?//跟公司后臺服務(wù)器進(jìn)行回調(diào) 支付完成后告訴后臺是否成功 ?(.2f貌似改了支付不能完成)
? order.notifyURL =? @"http://app.chengchina.com/wash/unionpay/mobilenotify"; //回調(diào)URL? ??
//以下信息是支付的基本配置信息? ?
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 = @"alisdkdemo"; ? //將商品信息拼接成字符串? ?
?NSString *orderSpec = [order description];??
? NSLog(@"orderSpec = %@",orderSpec);? ? ? ?
?//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode? ??
id<DataSigner>signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
//支付寶回調(diào)信息 標(biāo)示成功或者失敗 還是用戶取消 網(wǎng)絡(luò)中斷等
NSLog(@"reslut = %@",resultDic);
}];
}
9000 訂單支付成功
8000 正在處理中
4000 訂單支付失敗
6001 用戶中途取消
6002 網(wǎng)絡(luò)連接出錯
微信支付
SDK下載網(wǎng)址 (微信更簡單)
先注冊一個APPID
商戶在微信開放平臺申請開發(fā)APP應(yīng)用后,微信開放平臺會生成APP的唯一標(biāo)識APPID着饥。
這個id是在AppDelegate.m里面的didFinishLaunchingWithOptions的方法里面用的
添加依賴庫
再添加SDKExport文件夾 從官方Demo拖
頭文件引用
#import "WXApi.h"
#import "WXApiObject.h"
客戶端錯誤碼 (這都是定好的)
編譯 改錯
實例
PayReq *request = [[PayReq alloc] init];
//? ? 商家向財付通申請的商家id
request.partnerId = @"1220277201";
//? ? 預(yù)支付訂單:包含商品的標(biāo)題 描述 價格等商品信息
request.prepayId= @"920103900016010965/5";
//相當(dāng)于一種標(biāo)識
request.package = @"Sign=WXPay";
/** 隨機(jī)串犀农,防重發(fā) */
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
//從1970年之后的秒數(shù) 還是防止重復(fù)
request.timeStamp= 139777777; //時間戳
//商家根據(jù)微信開放平臺文檔對數(shù)據(jù)做的簽名 加密數(shù)據(jù)用的
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
//調(diào)用微信支付
[WXApi sendReq:request];
在AppDelegate.m里面添加#import "WXApi.h"? 協(xié)議WXApiDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ??
//向微信注冊appid??
? //Description : 更新后的api 起到解釋的作用??
? [WXApi registerApp:@"wx920fde9f97d60569" withDescription:@"微信支付"];? ??
? ? return YES;
}
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
{
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark -WXApiDelegate
-(void)onResp:(BaseResp*)resp{
//微信支付后回調(diào)代理方法
//返回一些支付成功 失敗的信息
if ([resp isKindOfClass:[PayResp class]]){
PayResp*response=(PayResp*)resp;
switch(response.errCode){
case WXSuccess:
//服務(wù)器端查詢支付通知或查詢API返回的結(jié)果再提示成功
NSLog(@"支付成功");
break;
default:
NSLog(@"支付失敗,retcode=%d",resp.errCode);
break;
? ? ? }
? ?}
}
銀聯(lián)支付
官方SDK地址 ?(這個地址是個坑 銀聯(lián)就是牛 下載包還是RAR格式)
銀聯(lián)支付代碼很少就兩行 難點在于配置銀聯(lián)支付
這個SDK有兩個版本 這兩個版本是不兼容的宰掉,兩個都導(dǎo)入就會報錯
1呵哨、支持無卡交易靜態(tài)庫,簡稱UPPayPlugin, 包含三個文件UPPayPlugin.h UPPayPluginDelegate.h libUPPayPlugin.a?
2轨奄、支持純無卡交易和VIPOS音頻口支付靜態(tài)庫 UPPayPluginPro (這是要用POS機(jī)的)
UPPayPluginPro.h ?UPPayPluginDelegate.h libUPPayPluginPro.a
如果是UPPayPlugin 要添加 QuartzCore.framework 孟害、Security.framework 這兩個依賴庫
如果是UPPayPluginPro 要添加 QuartzCore.framework 、AudioToolbox.framework 這兩個依賴庫
把sdk 拉進(jìn)工程 引入框架
實現(xiàn)<UPPayPluginDelegate>代理
//startPay 預(yù)支付訂單 標(biāo)題 價格 描述
//mode 環(huán)境 00表示正式 01表示測試
//常見錯誤 把.m 改成.mm格式?
[UPPayPlugin startPay:@"201601090436140530789" mode:@"00" viewController:self delegate:self]; //就這一行
寫一個支付方法的回調(diào)
#pragma mark -UPPayPluginDelegate
-(void)UPPayPluginResult:(NSString *)result
{
NSLog(@"支付完成后的回調(diào) %@",result);
}
在budsiting 搜索linking
搜索 c++ sta? C++ Standard Library 屬性值修改為 Compiler Default
搜索 c++ la? C++ Language Dialect 屬性值修改為 Compiler Default
這樣就完成配置了
運行 這樣就實現(xiàn)銀聯(lián)支付了挪拟。