热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:iOS支付宝支付详细实现流程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS支付宝支付详细实现流程相关的知识,希望对你有一定的参考价值。支付在很多主流的APP中都会用到

篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS支付宝支付详细实现流程相关的知识,希望对你有一定的参考价值。



支付在很多主流的APP中都会用到,最常见的支付是支付宝、微信、银联等。

刚好公司项目都需要用到,目前只调试好了支付宝,之前想抽时间写,总是拖拖拉拉的,索性在后台写微信支付的时候狠下心来把支付宝SDK集成以及支付实现记录下来,后续会陆续放上微信,银联等支付文章,不足之处希望各位看官谅解,小子会加以改正。

注意:支付宝开发文档多看几遍!!!

一起看一下支付宝支付流程图,这样方便大家理解每一步后台做了什么,移动端需要怎么进行配合:

1.首先在支付宝平台创建应用,获取appid,appid是16位数字,在项目中需要用到(之后开通支付功能)。open.alipay.com

2.获取appid之后,下载官方调试Demo,https://docs.open.alipay.com/54/104509

之后会看到分别有iosandroid代码,打开如下:

a.分别将下图中的1,2放到自己的工程当中

b.添加一下需要的依赖库,支付宝文档中可查到https://docs.open.alipay.com/204/105295/

c.工程中在Info下找到Url Types,添加支付宝的Url Schemes,支付的时候需要使用

 

然后运行demo,基本不会报错,报错的话,查一下文档,会有解决办法

支付宝SDK集成完成了,那么下面就是支付流程,也就是demo了:

这里的图片是以上下载的支付宝支付调试Demo,支付方法里面的demo可以根据自己需要进行更改,

这里贴上我在项目中使用的demo:

这里需要后台给一个接口,获取订单的总额,外部订单号,通知url,body,subject以便支付的时候进行更换

自己项目中还需要更换的就是之前获取的APPID,私钥AliPrivate,AliScheme,



1 NSURL * myURL_APP_A = [NSURL URLWithString:@"alipay:"];
2 if (![[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
3 //如果没有安装支付宝客户端那么需要安装
4 [MBProgressHUD showMBPAlertView:@"您还没有安装支付宝" withSecond:2.0];
5 return;
6 }
7 NSDictionary *dic = @{
8 @"orderNo":orderModel.orderNo
9 };
10 [[SG_HttpsTool sharedSG_HttpsTool] postWithURL:SHAlipayRequestUrl params:dic success:^(id JSON, int code, NSString *msg) {
11
12 if (code == 0) {
13
14 SH_PayAlipayModel *aliModel = [SH_PayAlipayModel mj_objectWithKeyValues:JSON[@"alipaymentOrder"]];
15 //私钥是后台分发的
16 NSString *rsa2PrivateKey = AliPrivateKey;
17 NSString *rsaPrivateKey = @"";
18 //AppIDhe PrivateKey没有配置的提示
19 if ([AlipayAppId length] == 0 || [AliPrivateKey length] == 0) {
20 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"缺少appid或者私钥" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
21 [alert show];
22 return;
23 }
24
25
26 /**
27 * 生成订单信息
28 * 将商品信息赋予AliPayOrder的成员变量
29 */
30 Order *order = [[Order alloc] init];
31 //appid---》之前获得的APPID
32 order.app_id = AlipayAppId;
33 //支付接口名称
34 order.method = @"alipay.trade.app.pay";
35 //参数编码格式
36 order.charset = @"utf-8";
37 //当前时间点
38 NSDateFormatter *formatter = [NSDateFormatter new];
39 [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
40 order.timestamp = [formatter stringFromDate:[NSDate date]];
41
42 //支付版本
43 order.version = @"1.0";
44 order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
45 order.notify_url = aliModel.notifyUrl;
46
47 order.biz_cOntent= [BizContent new];
48 order.biz_content.body = aliModel.Description;
49 //支付宝支付页面的订单信息
50 order.biz_content.subject = aliModel.title;
51 //订单id----》后台返回的
52 order.biz_content.out_trade_no = aliModel.outTradeNo;
53 //超时时间
54 order.biz_content.timeout_express = @"30s";
55 //价格---》后台返回
56 order.biz_content.total_amount = aliModel.totalAmount;
57
58 order.biz_content.product_code = @"QUICK_MSECURITY_PAY";
59
60 /**
61 * 将商品信息拼接成字符串
62 */
63 NSString *orderInfo = [order orderInfoEncoded:NO];
64 NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
65 //SHLog(@"orderSpec = %@", orderInfo)
66
67 //获取私钥并将商户信息签名,外部商户的加签过程务必放在服务端,防止公钥数据泄露
68 //需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
69 NSString *signedString = nil;
70 APRSASigner* signer = [[APRSASigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
71 if ((rsa2PrivateKey.length > 1)) {
72 signedString = [signer signString:orderInfo withRSA2:YES];
73 } else {
74 signedString = [signer signString:orderInfo withRSA2:NO];
75 }
76 SHLog(@"%@", signedString)
77 //如果加签成功,则继续执行支付
78 if (signedString != nil) {
79 //应用注册scheme,在info.plist定义URL types
80 //将签名成功字符串格式化为订单字符串,请严格按照该格式
81 NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@", orderInfoEncoded, signedString];
82 //调用支付结果开始支付, AliAppScheme-->之前设置的Url Schemes
83
84 [[AlipaySDK defaultService] payOrder:orderString fromScheme:AliAppScheme callback:^(NSDictionary *resultDic) {
85 int resultStatus = [resultDic[@"resultStatus"] intValue];
86 SHLog(@"%d", resultStatus)
87 if (resultStatus == 9000) {
88
89 }
90 }];
91
92 }
93
94 }
95 } failure:^(NSError *error) {
96
97 }];


View Code

 

以上步骤完成之后,那么就可以调起支付宝进行支付了

下面开始支付宝支付结果之后的操作:

根据支付结果,进行通知处理,然后进行自己业务上的实现

 



推荐阅读
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 用户视图(查看运行状态或其他参数)系统视图(配置设备的系统参数)system-viewEntersystemview,returnuservi ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
author-avatar
哈铁鸡西青年志愿者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有