最近在项目中加入了ApplePay支付,总结一下项目中需要注意点。我们使用的是银联集成的ApplePay SDK,下载地址。
前期准备工作
- 需要成为银联手机支付入网商户。
- 登录银联商户服务平台,通过商户服务平台申请CSR。
- 将CSR提交至Apple,生成Apple Merchant ID。
- 下载银联ApplePay SDK导入项目中,后台配置好测试环境。
下面开始正式的开发模式:
银联的调用代码:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "UPAPayPluginDelegate.h"
@interface UPAPayPlugin : NSObject
/**
* 支付接口
*
* @param tn 订单信息
* @param mode 接入模式,标识商户以何种方式调用支付控件,00生产环境,01测试环境
* @param viewController 启动支付控件的viewController
* @param delegate 实现 UPAPayPluginDelegate 方法的 UIViewController
* @param mID 苹果公司分配的商户号,表示调用Apple Pay所需要的MerchantID;
* @return 返回函数调用结果,成功或失败
*/
+ (BOOL)startPay:(NSString*)tn
mode:(NSString*)mode
viewController:(UIViewController*)viewController
delegate:(id<UPAPayPluginDelegate>)delegate
andAPMechantID:(NSString* )mID;
@end
很简单的只要传入5个参数就可以了,不过由于中国区ApplePay在iOS9.2以后才支持,我们需要加入判断:
+ (BOOL)isSupportApplePay {
NSString *iOSVersion = [UIDevice currentDevice].systemVersion;
if (iOSVersion.doubleValue >= 9.2) {
if ([PKPaymentAuthorizationViewController canMakePayments]) {
if ([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay]]) {
return YES;
} else {
return NO;
}
}
}
return NO;
}
当我们获取从服务器获取tn参数,就可以调用银联APPlePay SDK
,等待SDK的回调处理。
#pragma mark -- UPAPayPluginDelegate
-(void) UPAPayPluginResult:(UPPayResult *) payResult
{
UPPayResult *ttPayResult = payResult;
UPPaymentResultStatus ttResultStatus = ttPayResult.paymentResultStatus;
switch (ttResultStatus) {
case UPPaymentResultStatusSuccess:
{
}
break;
case UPPaymentResultStatusCancel:
{
}
break;
default:
{
}
break;
}
}
这里我是放入了UIViewController的Category里,避免回调代码散落到处都是。
PS:由于涉及到支付和银联交互很繁琐,最好预留2周时间。