一。越来越多的应用增加第三方的功能,可能应用有不同的页面但调用相同的支付方式,例如界面如下:
这两个页面都会使用第三方支付支付:(微信,支付宝、银联)如果在每一个页面都直接调用第三方支付的接口全部代码,显然并不是很合适,更何况,可能一个应用程序并不止两个入口。所以封装还是很有必要的。
1。新建模型:- - - - - - -后台返回支付方式的列表json
# import & lt;基?Foundation.h> @ interface IOAPayItemModel: NSObject//名称:代表是支付宝,微信,银联或者余额等 @ property(原子、复制)NSString *名称;//图标:代表是支付方式的图片 @ property(原子、复制)NSString *图标;//代码:代表支付方式的唯一标识 @ property(原子、复制)NSString *代码;//payType:代表支付类型(自己确定的) @ property(原子,分配)NSInteger payType; @end
#进口“IOAPayItemModel.h” @ implementation IOAPayItemModel @end
2。封装第三方支付接口以及回调接口——直接上源代码- - - - -会有解释(相信大家的能力,肯定能看懂)
# import & lt;基?Foundation.h>//支付宝SDK # import & lt; AlipaySDK/AlipaySDK.h>//微信接口 # import & lt; WXApi.h>//银联接口 #进口“UPPaymentControl.h”/* * 枚举:列出第三方支付方式 */typedef NS_ENUM (NSInteger PayType) { kPayTypeWXPay,//微信支付 kPayTypeALiPay,//支付宝支付 kPayTypeUNPay//银联支付 };/* * IOAPayRequestModel:第三方支付需要的参数 */@ interface IOAPayRequestModel: NSObject @ property(原子,分配)PayType PayType;/* * 支付宝和银联——后台返回是字符串类型——支付宝和银联使用此方式 */@ property(原子、复制)NSString * payString; @ property(原子、复制)NSString * appScheme;//根据设置的paytype设置/* * 微信,后台返回是字典类型——微信使用此方式 */@ property(原子、强)NSDictionary *用户信息; @end/* * 第三方支付接口返回的数据- - - - - - */@ interface IOAPayResponseModel: NSObject @ property(原子,分配)PayType PayType;//结果和用户信息信息判断支付结果——(支付成功,支付失败,支付取消等) @ property(原子,分配)NSInteger结果; @ property(原子、强)NSDictionary *用户信息; @end @ interface IOAPayApi: NSObject//支付返回的回调方法 @ property(原子、复制)空(^回调)(IOAPayResponseModel *反应);//支付请求模型——IOAPayRequestModel——第三方支付需要的参数 @ property(原子、强)IOAPayRequestModel * payRequestModel;//单例方法 + (instancetype) defaultPayManager;//是否安装了客户端 (保龄球)isPayAppInstalled:(PayType) PayType;//支付 - (void)支付:(IOAPayRequestModel *) payRequestModel回调:(空白(^)(IOAPayResponseModel *响应))回调;//支付回调 - (void) payCallbackWithUrl: url (NSURL *); @end
#进口“IOAPayApi.h” @ implementation IOAPayRequestModel - (void) setPayType: (PayType) PayType { _payType=payType; 如果(_payType==kPayTypeALiPay) { 自我。appScheme=@“IOAAlipaySDK”;//测试//自我。payString=@ " alipay_sdk=1.0, app_id=2018012502067343, biz_content=% 7 b % 22主题% 3 22% % af % E4%BB % E6 % 94% 22% 98% e5%ae % 9 af % E4%BB % d % E6 % 94% 98% 22% 2 c % 22 out_trade_no % 22% 3 % 222018032100007 % 22% 2 c % 22 total_amount % 22% 3 2 c % 22 product_code % % 220.01% 22% 22% 3 a % 22 quick_msecurity_pay % 22% 2 c % 22 timeout_express % 22% % 3 2210 m % 22% 2 c % 22 seller_id % 22% % 222088001065568658 % 3 22% 7 d& charset=UTF-8&格式=json&方法=alipay.trade.app.pay& notify_url=api.ioa365.net % 2 fapp % 2 fapi % 2 fpayment % 2 falipay_notify& sign_type=RSA2&时间戳=2018-03-21 + 16% 3事故% 3 a15&版本=1.0,=迹象SFyiWFqdkG98qarJFKfNjts8w2RS7ATwjCRyNnKYILDaVVFEnR % 2 f943qjk9wfazgipx38rzurf % 2 bl4m74hp2po % 2 f % 2 f0zfskanttu3dmlivgt4yd42w1f2lop3ixtkl5bhppzt6yfdquecz1zreeawqxlybdvvnjbj9p67f2jt8jfqm6enz6kwwy5cshydd6ijqf0fkxdmsya % 2 bico6iihdiqksrlhubpb8lfsxjyy1 % 2 fbaauysib3 % 2 biu6hwasugadcvl769ivwhkwdjzqzuofpjcfnneyzg3 % 2 b4f % 2 fnlbry1pkk3zwy2uqpttk0w0gofsf167drz47j0lw7uufym8ua % 2 bihz7lw % 3 d % 3 d”; 返回; } 如果(_payType==kPayTypeUNPay) { 自我。appScheme=@“UPPay”;//测试//自我。payString=@“559018436594292239101”; 返回; }//测试//自我。用户信息=@ {//@“appid”: @“wx66a3135d1354b23b”,//@“noncestr”: @“J8pJbaEg6AjDQ9kk”,//@“partnerid”: @“1497576612”,//@“prepayid”: @“wx20180321170621b3fbce61a20187009040”,//@“result_code”: @“成功”,//@“return_code”: @“成功”,//@“大于”:@“OK”, “符号”//@:@“fff7b63a71d3fb4c6866bdbc443f72 29日”, “时间戳”//@:@“1521623180”,//@“trade_type”: @“应用程序”,//}; } @end @ implementation IOAPayResponseModel @end @ interface IOAPayApi () & lt; WXApiDelegate> @end @ implementation IOAPayApi//单例方法 静态IOAPayApi *经理=零; + (instancetype) defaultPayManager { 静态dispatch_once_t> 支付宝- (void) { (自我startProgress); self.requestModel。pay_type=@“alipayMobile”;//自己后台的接口- - -拿到后台返回的数据作为第三方接口的参数 (自我。viewModel requestCartSettlePay:自我。requestModel回调:^ (IOAResponse *响应){ 设置(dispatch_get_main_queue ()、^ { (自我stopProgress); 如果(response.success) { NSString * appScheme=@“IOAAlipaySDK”; self.payRequestModel。payString=response.responseObject; self.payRequestModel。payType=1; self.payRequestModel。appScheme=appScheme;//第三方接口调用(封装) [[IOAPayApi defaultPayManager]支付:自我。payRequestModel回调:^ (IOAPayResponseModel *响应){ 设置(dispatch_get_main_queue ()、^ { NSDictionary *用户信息=response.userInfo; 如果(!(用户信息(@“resultStatus”) isEqualToString: @ " 9000 ")) {//进入待付款界面(支付失败或者支付取消等) (自我pushWait); 其他}{//进入订单列表界面(支付成功) (自我pushList); } }); }]; 其他}{ (自我。视图makeToast: @”支付失败”); } }); }]; }iOS支付宝,微信,银联支付集成封装调用(下)