iOS支付宝,微信,银联支付集成封装调用(下)

  

一。越来越多的应用增加第三方的功能,可能应用有不同的页面但调用相同的支付方式,例如界面如下:

  

 iOS支付宝,微信,银联支付集成封装调用(下)

  

这两个页面都会使用第三方支付支付:(微信,支付宝、银联)如果在每一个页面都直接调用第三方支付的接口全部代码,显然并不是很合适,更何况,可能一个应用程序并不止两个入口。所以封装还是很有必要的。

  

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支付宝,微信,银联支付集成封装调用(下)