阿里支付的環(huán)境配置部分暫且略過,直接談代碼部分斜棚。(待確認(rèn))
- 阿里支付不需要在appliation:didFinishLaunchingWithOptions中注冊或初始化只需要寫系統(tǒng)回調(diào)
//這個(gè)方法已經(jīng)被廢棄,為了適應(yīng)低版本澈侠,最好寫上
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation{
//如果極簡開發(fā)包不可用形庭,會(huì)跳轉(zhuǎn)支付寶錢包進(jìn)行支付铅辞,需要將支付寶錢包的支付結(jié)果回傳給開發(fā)包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//[由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了萨醒,所以pay接口的callback就會(huì)失效斟珊,請商戶對standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯]
NSLog(@"result = %@",resultDic);
[[AliPayManager sharedInstance] onResp:resultDic];
}];
}else if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登授權(quán)返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺(tái)很可能被系統(tǒng)kill了富纸,所以pay接口的callback就會(huì)失效囤踩,請商戶對standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個(gè)方法里面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
[[AliPayManager sharedInstance] onResp:resultDic];
}];
}else{
return (
([UMSocialSnsService handleOpenURL:url])
||
([WXApi handleOpenURL:url delegate:[WechatPayManager sharedInstance]])
);
}
return YES;
}
2.訂單提交
- (void)payAction:(UIButton:)sender{
/*生成訂單信息及簽名*/
/******必選參數(shù)*****/
//將商品信息賦予AlixPayOrder的成員變量
Order *order = [[Order alloc] init];
//商戶在支付寶簽約時(shí),支付寶為商戶分配的唯一標(biāo)識(shí)號(以2088開頭的16位純數(shù)字)
order.partner = partner;
//賣家支付寶賬號對應(yīng)的支付寶唯一用戶號(以2088開頭的16位純數(shù)字)
//訂單支付金額將打入該賬戶(一個(gè)partner可以對應(yīng)多個(gè)seller_id)
order.sellerID = seller;
//商戶網(wǎng)站商品對應(yīng)的唯一訂單號由商家自行制定)
order.outTradeNO = [self generateTradeNO];
//商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等
order.subject = product.subject;
//對一筆交易的具體描述信息晓褪。如果是多種商品堵漱,請將商品描述字符串累加傳給body。
order.body = product.body;
//該筆訂單的資金總額涣仿,單位為RMB(Yuan)勤庐。取值范圍為[0.01,100000000.00]好港,精確到小數(shù)點(diǎn)后兩位愉镰。
order.totalFee = [NSString stringWithFormat:@"%.2f",product.price];
//回調(diào)URL
order.notifyURL = @"http://www.xxx.com";
//接口名稱,固定值
order.service = @"mobile.securitypay.pay";
//商戶網(wǎng)站使用的編碼格式钧汹,固定為utf-8丈探。
order.inputCharset = @"utf-8";
/*******可選參數(shù)**********/
//支付類型,默認(rèn)為1商品購買
order.paymentType = @"1";
//設(shè)置未付款交易的超時(shí)時(shí)間拔莱,一旦超時(shí)碗降,該筆交易就會(huì)自動(dòng)被關(guān)閉。當(dāng)用戶輸入支付密碼塘秦、點(diǎn)擊確認(rèn)付款后(即創(chuàng)建支付寶交易后)開始計(jì)時(shí)讼渊。取值范圍:1m~15d,或者使用絕對時(shí)間(示例格式:2014-06-13 16:00:00)嗤形。m-分鐘精偿,h-小時(shí),d-天赋兵,1c-當(dāng)天(1c-當(dāng)天的情況下笔咽,無論交易何時(shí)創(chuàng)建,都在0點(diǎn)關(guān)閉)霹期。該參數(shù)數(shù)值不接受小數(shù)點(diǎn)叶组,如1.5h,可轉(zhuǎn)換為90m历造。
order.itBPay = @"30m";
//商品地址
order.showURL = @"m.alipay.com";
//應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types
NSString *appScheme = @"alisdkdemo";
/*****將商品信息拼接成字符串******/
//order格式在Demo中直接拿過來即可
NSString *orderSpec = [order description];
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式
if (signedString != nil) {
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
[self onResp:resultDic]
}];
}
}
-(void) onResp:(NSDictionary *)resp
{
//在這個(gè)方法中處理支付結(jié)果
}