-
首先在蚂蚁金服开放平台创建一个应用
注册应用,提交审核,审核通过后会给你一个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里面添加
#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];
}
}];
}