iOS实用技能扩展-集成支付宝

  前奏

  现在随着移动开发的快速发展,移动支付变得越来越流行与必不可少。最近做了一个关于支付宝支付功能的应用,在使用支付宝的过程中,遇到一些不必要的弯路,因此,写了这篇文章总结一下关于iOS中如何开发使用支付宝。iOS中支付宝的集成相对于微信支付集成和银联的集成会比较复杂,有一些需要注意的地方列举出来,希望对大家有益。

签约(已完成的可略过此步)

  1. 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)

参照支付宝开放平台的操作即可:https://doc.open.alipay.com/doc2/detail.htm?treeId=58&articleId=103542&docType=1

  下载支付宝SDK

直接连接这个地址即可下载目前最新的SDK:https://t.alipayobjects.com/L1/92/1078/1440576688389.zip

集成

  1. 文件目录

  1. 创建项目,把SDK导入项目中,由于支付宝的官方没有明确说可以用cocoaPod来集成,出于安全考虑,还是使用手动集成SDK的方式。
  2. 搭建基本的演示界面
  3. 导入Demo 中的 libcrypto.a,libssl.a 静态库, openssl,Util 文件夹和Order,APAuthV2Info

  1. 下面是集成后出现的一些问题

    1. 如果遇到运行后报错,类似于以下提示信息:

       Cannot find interface declaration for ‘NSObject‘, superclass of ‘Base64‘
      

      那么需要打开报错了的文件,增加头文件。

      #import <Foundation/Foundation.h>
      
    2. 如果商户要在某个文件中使用支付宝的开发包类库,需增加引用头文件。
           #import <AlipaySDK/AlipaySDK.h>
      
    3. ‘openssl/asn1.h‘ file not found 错误

      点击项目名称,点击Build Settings选项卡,在搜索框中,以关键字search 搜索,对Header Search Paths增加头文件路径:$(SRCROOT)/项目名 称。如果头文件信息已增加,可不必再增加。

    4. 点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字bitcode ,设置为NO
    5. AlipaySDK.h 导入 UIKit 框架
    6. 点击项目名称,点击“Build Phases”选项卡,在“Link Binary with Librarles” 选项中,“SystemConfiguration.framework” 系统库文件.
  2.  /*  *生成订单信息及签名  */    //将商品信息赋予AlixPayOrder的成员变量    Order *order = [[Order alloc] init];    order.partner = partner;    order.sellerID = seller;    order.outTradeNO = product.orderId; //订单ID(由商家自行制定)    order.subject = product.title; //商品标题    order.body = product.desc; //商品描述    order.totalFee = product.price; //商品价格    order.notifyURL =  @"http://www.xxx.com"; //回调URL,支付宝服务器主动通知商户网站里指定的页面http路径,服务器异步通知页面路径        order.service = @"mobile.securitypay.pay";//接口名称,固定值    order.paymentType = @"1"; //支付类型,1:商品购买。(不传情况下的默认值)    order.inputCharset = @"utf-8";////商户网站(我们APP的服务端)使用的编码格式,固定为utf-8。    order.itBPay = @"30m"; //设置未付款交易的超时时间    order.showURL = @"m.alipay.com";//商品地址        //将商品信息拼接成字符串    NSString *orderSpec = [order description];    NSLog(@"orderSpec = %@",orderSpec);    //  2. 签名    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode    id<DataSigner> signer = CreateRSADataSigner(privateKey);    NSString *signedString = [signer signString:orderSpec];    NSLog(@"签名字符串%@",signedString);//  3. 发送支付请求    //应用注册scheme,在AlixPayDemo-Info.plist定义URL types//  我们在target->info->URL Types 里面设置的URLScheme//  用于支付宝调回到我们的应用,如果这个不唯一,就很可能导致跳转错误.    NSString *appScheme = @"Meituan";        //将签名成功字符串格式化为可支付的订单字符串,请严格按照该格式    NSString *orderString = nil;    if (signedString != nil) {        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",                       orderSpec, signedString, @"RSA"];                [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {            NSLog(@"reslut = %@",resultDic);            NSLog(@"%@",resultDic[@"memo"]);        }];    }
  3. 设置Scheme

在target->info->URL Types 里面设置的URLSchemes

  

    4.调用支付接口,监听支付结果回调

  (1)block 回调

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
 NSLog(@"reslut = %@",resultDic);
}];

(2)支付宝钱包打开的时候回调 在AppDelegate

  - (BOOL)application:(UIApplication *)application
          openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication
           annotation:(id)annotation {

       //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                      NSLog(@"result = %@",resultDic);
          }];

      return YES;
  }

下面是关于公钥和私钥的生成与使用:

  1.打开终端进入一个合适目录(我这里放到桌面的RSA文件夹下)

  2.生成RSA私钥,输入 openssl genrsa -out rsa_private_key.pem 1024 生成rsa_private_key.pem

  3.生成RSA公钥,输入openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem命令回车 后,在当前文件夹中生成一个rsa_public_key.pem文件为原始 的商户公钥(请妥善保存该文件,PHP 开发语言中需要使用该文件),以下为命 令正确执行截图:

  

  4.生成PKCS8 编码的私钥, 输入命令openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt并回车,当前界面中会直接显示出生成结果。

  5.复制PKCS8编码的私钥, 把复制的内容粘 贴进一个新的记事本中,可随意命名,只要知道这个是 PKCS8 格式的私钥即可(请 妥善保存该文件)。

  盗张图来说明一些公钥与私钥的使用

     

可能还会存在一些考虑不到的方面,欢迎阅读到的同行们指正,目前是可以实现应用跳转到支付界面,支付完成后跳转到应用界面的效果。

时间: 2024-10-21 07:44:59

iOS实用技能扩展-集成支付宝的相关文章

iOS实用技能扩展-静态库的制作与简单使用

前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking 闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 2.静态库的特点:.a+.h; 为什么制作闭源库 国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用 例如:百度地图,友盟,JPush等 在

iOS开发:集成支付宝(遇见的坑和便捷撸代码)

开发iOS最重要的就是支付了,天朝之内最常用的就是支付宝了,下面就以自己的经历说明如何集成支付宝+遇见的坑. 首先,集成支付宝最好别使用Cocoapods,很多人都说使用起来很方便,可是我每次只要使用Cocoapods导入支付宝SDK,总是出现各种莫名其妙的错误,并且还每次都不一样,最终,我只能手动导入. 其实可以使用ping++和其他更为方便.如 http://winann.blog.51cto.com/4424329/1601654 https://www.pingxx.com/ 以自己集成

iOS app集成支付宝支付流程及后台php订单签名处理

iOS app集成支付宝支付流程 1: 开通支付宝商户 由公司去支付宝 https://b.alipay.com/order/serviceIndex.htm 签约支付宝开通支付宝商家: 2:商户支付宝开通无线支付功能 开通商户支付宝之后,虽然可以获取到应用使用的 key和id,如果如果不开通无线支付功能的话,会在app集成的时间 提示商户未开通无线支付功能的错误: 开通商户支付宝-无线支付功能,请在商户支付宝后台,按要求提供审核材料开通: 3:在商户支付宝后台下载SDK 在商户支付宝后台,即可

iOS集成支付宝支付

一. 开发前准备 iOS 支付宝SDK下载地址:(内含iOS Android 服务端demo及SDK) http://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1 二. 集成支付宝 1.解压支付宝钱包支付接口开发包2.0标准版(iOS 15.0.2).zip(忽略版本号) 2.创建个文件夹,找到如下文件,放到文件夹里.便于将文件统一拷入项目 3.创建项目并将支付宝SDK添加进项目(项目创建不再演示)

iOS开发:2分钟快速集成支付宝快捷支付

?这篇文章介绍了iOS快速集成支付宝支付的方法,这篇文章中介绍的方法是通过一次封装,因此配备完结今后调用仅需一行代码即可支付宝支付,非常的便当,希望我们喜欢. 我仅仅根据官方的文档,对支付宝的SDK做了进一步封装,其间密钥的生成很简略,需要看官方的文档,官方的文档我在工程附件目录里也有一份,假设需要立刻集成,没工夫研讨的话,可以大致看一下密钥的生成即可,其他的配备我会在下面进行谈论. 要在iOS运用里集成支付宝支付,需要公司和支付宝签约,然后生成相应的密钥.密钥的生成支付宝的开发文档里现已说的非

iOS开发——高级篇——如何集成支付宝SDK

一.什么是支付宝 第三方支付平台 和内购非常相似内购是用户将钱付款给苹果,之后苹果分成给商户支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户 使用支付宝前提购买的物品必须是和应用程序无关的.比如:团购卷/衣服/电子产品如果和应用程序有关,必须采用内购(否则不允许上架).比如:会员/游戏道具 二.集成支付宝 现在不少app内都集成了支付宝功能 使用支付宝进行一个完整的支付功能,大致有以下步骤:向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(p

iOS 之(集成支付宝SDK大坑总结)

其实集成支付宝相对于集成微信支付来说,支付宝算是简单的了,后续有空再去研究微信支付,现目前先总结一下集成支付宝所遇到的坑,其实支付宝的坑也不算太多,细算下来大概5-6个左右,但是其报错方式有点恶心,不花一点时间还是琢磨不透,我之前第一次集成很顺利,但是第二次放进项目里就被报错搞了大半天,现在想想还是平时多做点总结的比较好. 详细的集成流程就不说了,简单大致提一下 首先第一步要去与支付宝签约,获得 商户ID也就是合作者身份,之后就开始下载官方文档与示例damo 了. 一步步按着官方文档来就行了 添

ios集成支付宝的功能

1.很多的项目现在要集成第三方的sdk来完成,今天我看了一下支付宝,应用了支付宝的功能,接下来给大家讲解下如何集成支付宝: 2.首先要和支付宝签约:(支持企业的账号),邮件得到一系列的东西:(所有的值在支付宝回复的邮件里面:注意,建议除appScheme以外的字段都从服务器请求): 3.第二你要下载AlipaySDK包,支付宝中心下载: 4.将你的下载的sdk导入到你的项目中去: 5.然后运行一下会报错,一个是order.h 还有一个是:找不到rsa.h文件: 解决方案: order.h 的解决

iOS工程集成支付宝错误Undefined symbols for architecture armv7

问题描述: 新工程中需要集成支付宝功能,于是咱就把支付宝的库给集成了进入然后就出现了下面这种错误了说,错误信息如下: Undefined symbols for architecture armv7: "CreateRSADataVerifier(NSString*)", referenced from: -[AppDelegate parseURL:application:] in AppDelegate.o ld: symbol(s) not found for architect