iOS-支付宝支付的实现+可能遇到的问题及解决办法

关于支付宝支付, 首先了解一下, 支付流程:

1.用户点击支付
2.客户端请求服务器用户支付
3.服务器接收请求生成金额订单等要给第三方支付的一切信息,并生成回调参数传给客户端
4.客户端接收信息(一般会再让用户确认支付或者干脆购买后是生成订单,然后才是付款)并将服务器给的信息分别传入SDK需要的参数中,调用SDK的支付方法
5.由支付宝SDK向支付宝自己的服务器发出支付请求,支付宝的服务器接收支付请求处理成功后,给客户端本身与公司的后台都发送一条支付成功的消息,客户端与后台根据这条消息再做处理.

开发步骤
第一步: 仔细看开发文档, 并 下载 SDK
开发文档 很重要, 建议先把开发文档仔仔细细看一遍, 可以避免很多坑, 特别是交互流程:

支付功能的交互流程

第二步: 集成 SDK
1 . 将 SDK 拖进 工程

06181012_0A7u.png

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

添加SDK依赖的类库

3 . 设置为URL Schemes

设置为URL Schemes

4 . 添加支付逻辑代码,完成支付过程

在支付页面:

#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"
//宏定义 PID, 收款账户 和 私钥
//这里的三个参数是公司和支付宝签约之后得到的,没有这三个参数无法完成支付
//合作者身份(PID)
#define Partner @"合作者身份(PID)"
//商家支付宝账号
#define Seller @"商家支付宝账号"

#define KPrivate_key @"私钥"
#pragma mark 支付宝支付
- (void)aLiPay {
    Order *order = [[Order alloc] init];
    //合作者身份(PID)
    order.partner = Partner;
    //商家支付宝账号
    order.seller = Seller;
    //订单ID
    order.tradeNO = @"订单ID";
    //产品名称
    order.productName = @"产品名称";
    //商品描述
    order.productDescription = @"商品描述";
    //商品价格
    order.amount = self.orderValue;
    //回调URL
    order.notifyURL = @"回调URL";
    order.service = @"mobile.securitypay.pay";
    //支付类型:1(商品购买)
    order.paymentType = @"1";
    //编码格式
    order.inputCharset = @"utf-8";
    //订单超时时间
    order.itBPay = @"30m";
    
    NSString * appSchem = @"TaoYuanLe";
    //将商品信息拼接成字符串   该方法支付宝已经封好
    NSString *orderSpec = [order description];
    
    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    //使用私钥进行签名
    id<DataSigner>signer = CreateRSADataSigner(KPrivate_key);
    //调用签名 签名我的订单描述
    NSString *sinedString = [signer signString:orderSpec];
    
    //将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = nil;
    
    if (sinedString != nil) {
        
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec,sinedString,@"RSA"];
        // 发起支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appSchem callback:^(NSDictionary *resultDic) {
            
            //NSLog(@"支付结果result= %@",resultDic);
            
            if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
                //9000为支付成功
                
                //在这里可以对支付结果进行判断, 也可以在```AppDelegate.m```回调方法中处理支付结果
            }
        }];
    }
}

同时在 AppDelegate.m 中,

#import <AlipaySDK/AlipaySDK.h>//支付宝支付
#pragma mark 跳转支付宝, 微信 进行支付,处理支付结果
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    
    NSString *urlStr = [NSString stringWithFormat:@"%@",url];
    
    if ([url.host isEqualToString:@"safepay"]) {  //判断支付宝回调
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            //TY_Log(@"result = %@",resultDic);
            //处理支付结果
        }];
        
    }else if ([sourceApplication isEqualToString:@"com.tencent.xin"] && [urlStr containsString:@"pay"]){ //判断微信回调
        TYLLog(@"跳转微信支付处理支付方式结果");
        return [WXApi handleOpenURL:url delegate:self];
        
    }
    
    return YES;
}

出现的问题及解决办法:

1)"Unknown type name ‘NSString‘ "或者"Unknown type name ‘NSData‘ "等不识别常见类的问题。
  


  这是因为缺少Foundation类库和UIKit类库,支付宝Demo中之所以没有出现此错误,是因为在.pch文件中导入过这些类库
  解决办法:只需要在出现错误的文件中导入这些类库即可
  
技术分享

  2)‘openssl/asn1.h‘ file not found
  

  这是 openssl 文件夹头文件链接问题,只是把 openssl 文件夹拉进项目中,也可能出现这个问题。
  
  解决办法:Targets->Build Settings->Header Search Path中添加1中建立的aliPaySDK文件夹的路径(拖拽此文件夹至输入框即可)
  

  3)根据项目需求添加demo中ViewController中的代码 编译后可能会出下面错误:
  "OBJC_CLASS$_Product", referenced from: objc-class-ref in ViewController.o
  

  AlipaySDK的demo中将Product的定义写在了ViewControler.h中所致
  

  解决办法:新建Product类,将ViewController中的代码拷贝过去即可。
  

结束
有微信支付需求的可以 点这里

如果这篇文章对您有些许帮助 请给我点个心吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

  • 因为近期项目中需要接入支付宝支付功能,自己也爬了很多的坑,所以做了一下这边文章供大家学习参考,远离爬坑,文章主要讲...
    啓蘊阅读 2,296评论 0 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,060评论 4 62
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    帅不过oneS阅读 2,863评论 2 8
  • 感冒大半个月了还没好,躺在床上胡思乱想,手里一直在刷新手机页面。感觉自己好孤独,手机里存有几百个联系方式却没有...
    大糊涂阅读 604评论 2 3
  • 王小波在《爱你如同爱生命》说:“我把我整个灵魂都给你,连同它的怪癖,耍小脾气,忽明忽暗,一千八百种坏毛病。它真讨厌...
    哎呀哎呀咿阅读 157评论 1 0