微信支付和支付宝的封装

移动支付常用的是微信支付和支付宝支付,所以本篇之封装了这两种,银联用的较少,所以就没有封装进去.

集成步骤这里就不在说了,我把微信支付和支付宝支付的文档放在这里自己去看: 微信支付官方文档    支付宝官方文档

 

上代码:

 

//单例
+ (instancetype)shareManager;

//处理跳转url,回到应用,需要在delegate中实现
- (BOOL)cdm_handleUrl:(NSURL *)handleUrl;

//注册App,需要在 didFinishLaunchingWithOptions 中调用
- (void)cdm_registerApp;
/*
 * @param orderMessage 传入订单信息,如果是字符串,则对应是跳转支付宝支付;如果传入PayReq 对象,这跳转微信支付,注意,不能传入空字符串或者nil
 * @param callBack     回调,有返回状态信息
 */
- (void)cdm_payOrderMessage:(id)orderMessage callBack:(CDMPayCompleteCallBack)callBack;

 

 

AppDelegate处理回调

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];
    
    self.window.rootViewController = nav;
    [[PayManager shareManager] cdm_registerApp];
    // Override point for customization after application launch.
    return YES;
}


/*
 *  最老的版本,最好也写上
 */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    
    return [[PayManager shareManager] cdm_handleUrl:url];
}
/*
 *  iOS 9.0 之前 会调用
 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    return [[PayManager shareManager] cdm_handleUrl:url];
}

/*
 *  iOS 9.0 以上(包括iOS9.0)
 */

- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options{
    
    return [[PayManager shareManager] cdm_handleUrl:url];
}

 

调用:

1.支付宝支付(数据用的是文档上面的数据):

 //支付宝文档数据.
    NSString *orderMessage = @"app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D";
    
    [[PayManager shareManager] cdm_payOrderMessage:orderMessage callBack:^(CDMPayStateCode stateCode, NSString *stateMsg) {
        
        NSLog(@"stateCode = %zd,stateMsg = %@",stateCode,stateMsg);

    }];

2.微信支付(文档数据):

    PayReq* req = [[PayReq alloc] init];
    
    req.partnerId = @"10000100";
    req.prepayId= @"1101000000140415649af9fc314aa427";
    req.package = @"Sign=WXPay";
    req.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
    req.timeStamp= @"1397527777".intValue;
    req.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
    
    [[PayManager shareManager] cdm_payOrderMessage:req callBack:^(CDMPayStateCode stateCode, NSString *stateMsg) {
        
          NSLog(@"stateCode = %zd,stateMsg = %@",stateCode,stateMsg);

        
    }];

 

Demo地址:https://github.com/domanc/PayManager.git

 

posted @ 2017-03-28 15:51  iOS_Doman  阅读(1732)  评论(0编辑  收藏  举报