橙红科技有限公司复制粘贴iOS积累用之

手把手教你iOS支付宝支付

2016-09-29  本文已影响6999人  小二同學

其实集成支付宝支付非常简单,相比于微信支付没那么难,集成的时候多注意一下,就不会出错。还有,支付宝的参数要从服务器得到,官方给的demo是在app本地的。下面跟我一步一步来。

蚂蚁金服开放平台
注册应用,提交审核,审核通过后会给你一个APPID。这里的账号要用公司给你的支付宝账号。

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

AlipaySDK.bundle
AlipaySDK.framework

把这SDK里面的这两个文件导入到你的工程里面
然后添加依赖

支付宝所需依赖.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有可能是宝令被锁了。

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
        
        if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
            [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
                //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
                NSLog(@"platformapi  result = %@",resultDic);
            }
             ];};
    }
    return YES;
}
上一篇下一篇

猜你喜欢

热点阅读