手把手教你iOS支付宝支付
2016-09-29 本文已影响6999人
小二同學
其实集成支付宝支付非常简单,相比于微信支付没那么难,集成的时候多注意一下,就不会出错。还有,支付宝的参数要从服务器得到,官方给的demo是在app本地的。下面跟我一步一步来。
-
首先在蚂蚁金服开放平台创建一个应用
蚂蚁金服开放平台
注册应用,提交审核,审核通过后会给你一个APPID。这里的账号要用公司给你的支付宝账号。
-
下载支付宝官方demo&SDK
下载地址
下载完成之后,我们就要开始集成了。
AlipaySDK.bundle
AlipaySDK.framework
把这SDK里面的这两个文件导入到你的工程里面
然后添加依赖
把上图所需的依赖,全部添加进来
然后在你需要用到支付宝的页面添加头文件
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¬ify_url=http://domain.merchant.com/payment_notify&sign_type=RSA×tamp=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里面添加
// 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;
}
-
完了,运行点击你的支付宝,看看吧