支付宝支付(自己做项目总结的)

在用户安装支付宝的情况下会跳转到支付宝客户端支付,如果没有安装支付宝则会自动打开一个webview进行网页登录支付。而微信不支持网页登录支付,而苹果审核时,如果发现手机没有安装微信客户端,不能完成支付就会拒绝上架。所以同时集成支付宝和微信支付的开发者,请判断用户是否安装了微信客户端,来决定是否显示微信支付这个选项。
听说工程名如果是中文会出现迷之bug,我没试过不知道是不是真的。

一、下载支付宝SDK




如图所示,支付宝SDK分为两个版本,没有意外使用第一个版本就可以。第二个版本是出现UTDID冲突才使用的,我在集成的时候没有集成过百川SDK却也出现了UTDID冲突,所以我集成的是第二个版本SDK。这个UTDID冲突会报错,显示xxxxxxx duplicate UTDID xxxxxxxx一堆错误,意思就是你的工程里有两个UTDID冲突了,不要惊慌,更换SDK就可以。

下载后把下面两个文件导入工程即可。






二、配置环境


在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:






其中,需要注意的是:
  • 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
  • 如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib(如下图)。



点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入一个字符串,建议跟商户的app有一定的标示度,要做到和其他的商户app不重复,否则可能会导致支付宝返回的结果无法正确跳回商户app。







环境配置好了 编译如果报错如下图,在AlipaySDK.h里添加头文件 #import "AppDelegate.h"



三、代码使用

在需要调用AlipaySDK的文件中,增加头文件引用。

#import <AlipaySDK/AlipaySDK.h>

我是创建了一个PayManager 类来封装一个类方法,在需要使用支付宝支付的时候直接用PayManager来调用 + ( void )alipayWithGold_type:( NSString *)gold_type amount:( NSNumber *)amount方法即可。


先根据选中的商品,向后台请求该商品的支付宝订单信息,一般订单信息都是后台生成,因为这样比较安全,如果放在客户端生成被人破解就不好了。订单信息大概长这个样子:
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是测试数据","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-07-28 20:36:11&version=1.0&sign=*********


下面是我封装的类方法
#pragma mark 支付宝支付
+ ( void )alipayWithGold_type:( NSString *)gold_type amount:( NSNumber *)amount{
    // 使用自己封装的网络请求方法向后台请求支付宝订单信息
    [ RequestTool requestWithType : POST RRLString : kAlipayURL parameter : @{ @"user_id" :[ UserLoginStateManager shareManager ]. model . userID , @"sign_key" :[ UserLoginStateManager shareManager ]. model . sign_key , @"gold_type" :gold_type, @"amount" :amount } HTTPHeader : nil callBlock :^( NSData *data, NSError *error) {
       
NSDictionary *dic = [ NSJSONSerialization JSONObjectWithData :data options : NSJSONReadingMutableContainers error : nil ];
       
NSLog ( @"%@" ,dic);
       
// 调用支付宝方法跳转到支付宝
        [
PayManager alipayWithOrder :dic[ @"order_info" ]];
    }];
}




#pragma mark 跳转到支付宝
+ ( void )alipayWithOrder:( NSString *)order{
    // 这个order就是刚才向服务器请求的订单,scheme就是配置环境时添加 url  scheme 填入的那个独特的字符串,忘记的可以往上找。
    [[AlipaySDK defaultService] payOrder:order fromScheme:@"xxxxxxx" callback:^(NSDictionary *resultDic) {
        // 如果是网页版支付成功或失败会走这个回调
//        NSLog(@"result = %@",resultDic);// 返回的支付结果
       
// 9000 是支付成功, 6001 是取消支付
       
if ([resultDic[ @"resultStatus" ] isEqualToString : @"9000" ]) {
            NSLog ( @" 支付成功! " );
        } else {
            NSLog ( @" 支付失败! " );
        }

    }];
   
}



在appdelegate.m里添加头文件 #import <AlipaySDK/AlipaySDK.h>

当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户“返回”。此时在APAppDelegate.m的  - ( BOOL )application:( UIApplication *)application openURL:( NSURL *)url sourceApplication:( NSString *)sourceApplication annotation:( id )annotation 中调用获取返回数据的代码【iOS9.0以上(包括iOS9.0)需要在  - ( BOOL )application:( UIApplication *)app openURL:( NSURL *)url options:( NSDictionary < NSString *, id > *)options 中执行下面的代码】:(如果ios9之前和ios9之后的都需要支持这两个方法就都写上)

// 支付宝客户端支付后的回调 条件判断是用来区分不同的客户端回调的。
            if ([url. host isEqualToString : @"safepay" ]) {
                [[
AlipaySDK defaultService ]
                
processOrderWithPaymentResult :url
                
standbyCallback :^( NSDictionary *resultDic) {
                    
NSLog ( @"result = %@" ,resultDic); // 返回的支付结果
                    
NSLog ( @"%@" ,resultDic[ @"resultStatus" ]);
                    
if ([resultDic[ @"resultStatus" ] isEqualToString : @"9000" ]) {
                         NSLog ( @" 支付成功! " );
                     } else {
                         NSLog ( @" 支付失败! " );
                     }
                 }];
               
return YES ;
            }


      支付成功后后台会收到阿里的消息的 ,决定是否发货这部分交给后台做吧,具体情况可以和后台沟通。
   这样支付宝就做完了,很简单吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值