天天看点

集成iOS支付宝支付

  • 首先在蚂蚁金服开放平台创建一个应用

    注册应用,提交审核,审核通过后会给你一个APPID。这里的账号要用公司给你的支付宝账号。
  • 下载支付宝官方demo&SDK

    下载完成之后,我们就要开始集成了。

    AlipaySDK.bundle

    AlipaySDK.framework

把这SDK里面的这两个文件导入到你的工程里面

然后添加依赖

集成iOS支付宝支付

支付宝所需依赖.png

把上图所需的依赖,全部添加进来

然后在你需要用到支付宝的页面添加头文件

import <AlipaySDK/AlipaySDK.h>

command+R 运行保证没有出错。

这一点一定要注意,一个都不能少,要不然会报错。

  • 确保没有错之后,接下来就要调起支付宝了

    上传参数整个过程是要求在后台完成的,当然在app里面也可以,不过最好放在后台,为了安全起见。

    我们是需要传这三个参数

    dic[@"orderNo"] = self.payModel.orderno;
    dic[@"body"] = self.payModel.name;
    dic[@"orderName"] = self.payModel.name;           
    然后服务器给你返回来一串签名,你需要拿着这个签名然后拼接,去传给阿里。
    // NOTE: 调用支付结果开始支付
     [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                      NSLog(@"=====%@",resultDic);
     if ([resultDic[@"resultStatus"]intValue] == 9000) {                        
                      NSLog(@"成功");
     } else {
                          NSLog(@"失败");
               }
           }];           

    这个方法就是调起支付宝

    请求参数说明

    app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http://domain.merchant.com/payment_notify&sign_type=RSA&timestamp=2016-08-25 20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=           

    这个是支付宝的标准签名,如果签名不规范,就会出错。也能调起支付宝,但是会有错误码。

    报错ALI38173/AE050001205

    这个一般就是签名格式错误,你可以先用官方的签名放上去试试,看看报不报错,把你的订单号填写上去。

报错ALI59/ALI29/ALI14/ALI38173

1.partner填写要正确,可以登录签约账号到支付宝后台商家服务中进行查询对比;

2.移动支付请求的参数不对,打印请求参数payInfo,和文档对比,请求参数是否正确,检查文档中必须传的参数有没有都请求给支付宝,有没有参数漏掉的;参数有没有少了、多了、乱码、名称不对,还有不要加自定义参数;

3.ALI29有可能是宝令被锁了。

  • 然后在appdelegate里面添加

#pragma mark ios 9.0以上会调用此url回调

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options

{

    // 微信

    if ([url.scheme isEqualToString:PAY_WEIXIN_ID]) {

        [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

    }

    

    // 支付宝

    if ([url.scheme isEqualToString:@"SearchPigeonWorld"]) {

        //跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            if ([self.appMyDelegate respondsToSelector:@selector(payCenterWeixinOnResultWith:)]) {

                [self.appMyDelegate payCenterWeixinOnResultWith:[resultDic[@"resultStatus"]intValue] == 9000 ? YES : NO];

            }

        }];

    }




    return YES;

}







//支付成功时调用,回到第三方应用中



#pragma mark ios 9.0以前会调用此url回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    // 微信

    if ([url.scheme isEqualToString:PAY_WEIXIN_ID])

    {

        [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

    }

    

    // 支付宝

    if ([url.host isEqualToString:PAY_ALIPAY_appID]) {

        //跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            if ([self.appMyDelegate respondsToSelector:@selector(payCenterWeixinOnResultWith:)]) {

                [self.appMyDelegate payCenterWeixinOnResultWith:[resultDic[@"resultStatus"]intValue] == 9000 ? YES : NO];

            }

        }];

    }