热门标签 | 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

 

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

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

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

 



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 未定义的打字稿记录:探索其成因与解决方案 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 微信平台通过盛派SDK(sdk.weixin.senparc.com)允许服务号和订阅号使用appId和token读取关注用户的个人信息。然而,这一过程需严格遵守隐私保护和数据安全的相关规定,确保用户数据的安全性和隐私性。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • IDEA 2019.2 中 SFTP 部署功能无法成功连接至服务器的问题分析与解决 ... [详细]
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社区 版权所有