客户端集成支付宝、微信支付,所限还是需要后台的配合,后台做一些逻辑数据处理,客户端只需要进行第三方集成、授权、调起支付接口就行了,其实从客户端来讲还是比较简单的。先讲讲支付宝支付的集成,后续再讲微信支付。
1、注册支付宝开发者账号、创建应用 https://openhome.alipay.com/ (这一步就不细讲了,使用第三方不备步骤)。
创建应用后,需要授权应用支持的功能:支付、登录等功能。
2、从官网上下载SDK,并导入到工程中
下载SDK解压后如下文件:
将上面文件拖入工程后,下一步添加依赖库:
3、写个单例类,实现支付宝支付功能,方便APP中各个地方的调用
创建HCAlipayManager 类:
.h文件:
#import <AlipaySDK/AlipaySDK.h>
NS_ASSUME_NONNULL_BEGIN
@interface HCAlipayManager : NSObject
//生成支付宝单例类
+(id)sharePayManager;
//支付宝支付
//aParam 后端返回支付信息
-(void)handleOrderPayWithParams:(NSString *)aParam;
@end
NS_ASSUME_NONNULL_END
.m文件:
@implementation HCAlipayManager
+ (id)sharePayManager{
static HCAlipayManager *asAlixPay = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
asAlixPay = [[HCAlipayManager alloc] init];
});
return asAlixPay;
}
/**
支付宝支付
@param aParam <#aParam description#>
*/
- (void)handleOrderPayWithParams:(NSString *)aParam{
NSLog(@"aParm = %@",aParam);
NSString *appScheme = @"alipayredpag";//appScheme是你在项目中添加的URL Type(别写错)
NSString *orderString = aParam;//aParam[@"payInfo"];
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000){
//订单支付
[[HCToast shareInstance] showToast:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
}else{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[[HCToast shareInstance] showToast:@"支付异常"];
}
}];
}
@end
4、支付成功后跳转
在AppDelegate.m中写拦截跳转协议:
#pragma mark - openURL Delegate
///ios9.0之后实现该方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:
//支付宝支付跳转
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"支付宝支付跳转 result = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000){
//订单支付
[[HCToast shareInstance] showToast:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
}else{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[[HCToast shareInstance] showToast:@"支付异常"];
}
}];
}
return YES;
}
///ios9.0之前实现该方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
//支付宝支付跳转
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"支付宝支付跳转 result = %@",resultDic);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000){
//订单支付
[[HCToast shareInstance] showToast:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
}else{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[[HCToast shareInstance] showToast:@"支付异常"];
}
}];
}
return YES;
}
///ios9.0之前实现该方法
-(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);
int statusCode = [resultDic[@"resultStatus"] intValue];
if (statusCode == 9000){
//订单支付
[[HCToast shareInstance] showToast:@"支付成功"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
}else{
//交易失败
// [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
[[HCToast shareInstance] showToast:@"支付异常"];
}
}];
}
return YES;
}
5、在需要支付的地方,调用支付方法
///调起支付宝支付
- (void)doAlipayWithParams:(NSString *)params{
NSLog(@"支付宝支付信息:%@",params);
///没错,只需要调用单例方法 一句话搞定。但是需要注意,params:一般是后台给你的支付所需的信息,拼接成字符串传给支付宝就可以了。
[[HCAlipayManager sharePayManager] handleOrderPayWithParams:params];
}
结束了,感谢阅读~