許久未寫博客,趁著這段時間項目比較輕松來寫寫。最近的項目的遇到了第三方支付,有支付寶支付、微信支付,這里我先寫一下支付寶支付的集成和使用,可以給小白們一些幫助。具體的集成流程在官方文檔中都有,可以前去參考。
第一步集成
支付寶的集成比較簡單,首先進入螞蟻金服開放平臺,注冊好開發者賬號,然后創建應用
選擇自用型應用
在創建應用后會進行完善應用信息,如果要使用支付功能必須要進行簽約,簽約的話會審核商家也就是應用內支付的收款方的相關信息,只有用過了審核才能使用支付功能。關于簽約我們就不細說了,直接先說集成。
步驟1:啟動IDE(如Xcode),把iOS包中的壓縮文件中以下文件拷貝到項目文件夾下,并導入到項目工程中。
AlipaySDK.bundleAlipaySDK.framework
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:
在導入依賴庫后集成就基本完成了。
作為移動端在支付上做的事其實很少,具體的如公鑰密鑰的配置,商品信息的配置還有價格計算等等都是放在商戶服務端完成,從安全的角度來說在移動端代碼中是不允許進行商品加密的。所以這交給后臺人員就好了,他們處理后我們直接調用支付接口獲取組裝和簽名后的請求串orderString,將獲取到的orderString直接傳入調用啟動支付寶的的SDK中。
第二步使用
首先在Appdelegate中寫下以下方法
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
在使用支付寶支付前,先寫一個支付單列,方便在各個地方調用支付,當然也有其他方式,我這里使用的是單列。
1.首先創建支付單列
在.m文件中
/**
* 支付單例管理類
*/
+(id)sharePayManager
{
static SYPayManager *asAlixPay = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
asAlixPay = [[SYPayManager alloc] init];
});
支付寶支付方法
/**
* 支付寶支付
*/
-(void)handleOrderPayWithParams:(NSDictionary *)aParam
{
NSLog(@"aParm = %@",aParam);
NSString *appScheme = @"alisdkofshuyinHotel";
NSString *orderString = aParam[@"payInfo"];
// NOTE: 調用支付結果開始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000)
{
//訂單支付
[MBProgressHUD showText:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
}
else
{
//交易失敗
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[MBProgressHUD showText:@"支付異常"];
}
}];
}
在.h文件里面
//生成支付寶單例類
+(id)sharePayManager;
//支付寶支付
//aParam 后端返回支付信息
-(void)handleOrderPayWithParams:(NSDictionary *)aParam;
記得先引用頭文件
#import <AlipaySDK/AlipaySDK.h>
單列寫好后,在需要支付的地方調用單列就可以了。我這里采用的是字典,在用的地方將從服務端請求下來支付商品信息orderString裝入字典,appScheme是在開發平臺中得到的。得到這兩個后傳入調用支付寶的方法中。
NSString *appScheme = @"alisdkofshuyinHotel";
NSString *orderString = aParam[@"payInfo"];
調用支付寶
// NOTE: 調用支付結果開始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000)
{
//訂單支付
[MBProgressHUD showText:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
}
else
{
//交易失敗
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[MBProgressHUD showText:@"支付異常"];
}
}];
在使用單列的地方如下寫
[[SYPayManager sharePayManager]handleOrderPayWithParams:responseObject[@"data"]];
以上基本就是移動端所需要做的事了。麻煩的事情都交給服務端去做了,我們簡單調用接口就好了,所以支付還是比較簡單的。微信支付其實也差不多,有空再寫微信支付。