5.2 SDK集成流程

5.2.1 iOS

解压接口压缩文件(文件名是 WS_MOBILE_PAY_SDK_BASE.zip),找到iOS的压缩文件(文件名是支付宝移动支付SDK 标准版(iOS).zip)。

1. 导入代码

  1. 步骤1:  启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,

    并导入到项目工程中。

  2. AlipaySDK.bundle
    AlipaySDK.framework
    

  3. 步骤2:  在需要调用AlipaySDK的文件中,增加头文件引用。

  4. #import <AlipaySDK/AlipaySDK.h>

步骤3: 配置请求信息。

AlipaySDK.bundle
AlipaySDK.framework

Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO]; //订单ID(由商家□自□行制定)order.productName = product.subject; //商品标题order.productDescription = product.body; //商品描述

order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格

支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 8页

移动支付接口 SDK2.0 标准版附录文档

order.notifyURL = @"http://www.xxx.com"; //回调URLorder.service = @"mobile.securitypay.pay";order.paymentType = @"1";
order.inputCharset = @"utf-8";

order.itBPay = @"30m";

//应用注册scheme,在AlixPayDemo-Info.plist定义URL typesNSString *appScheme = @"alisdkdemo";

//将商品信息拼接成字符串
NSString *orderSpec = [order description];NSLog(@"orderSpec = %@",orderSpec);

//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA 签名规范,并将签名字符串base64 编码和 UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];

//将签名成功字符串格式化为订单字符串,请严格按照该格式NSString *orderString = nil;
if (signedString != nil) {

orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",

                   orderSpec, signedString, @"RSA"];

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appSchemecallback:^(NSDictionary *resultDic) {

          NSLog(@"reslut = %@",resultDic);

}];

[tableView deselectRowAtIndexPath:indexPath animated:YES];}

详细可参见 Demo中示例文件

AliSDKDemo\APViewController.hAliSDKDemo\APViewController.mAliSDKDemo\Order.h
AliSDKDemo\Order.m

步骤4: 配置支付宝客户端返回url处理方法。
如示例 AliSDKDemo\APAppDelegate.m文件中,增加引用代码:

#import <AlipaySDK/AlipaySDK.h>

支付宝(中国)网络技术有限公司 版权所有|版本:1.3

第 9页

移动支付接口 SDK2.0 标准版附录文档

在@implementation AppDelegate中增加如下代码:

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

//如果极简SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给SDKif ([url.host isEqualToString:@"safepay"]) {

[[AlipaySDK defaultService] processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {

          NSLog(@"result = %@",resultDic);}];

}

if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode

[[AlipaySDK defaultService] processAuthResult:urlstandbyCallback:^(NSDictionary *resultDic) {

          NSLog(@"result = %@",resultDic);}];

}

return YES;}

2. 针对Demo的运行注意

(1) 关于签名代码问题

  • AliSDKDemo\Util及下面所有文件

  • AliSDKDemo\openssl及下面所有文件

    libcrypto.a

    libssl.a

    这些文件是为示例签名所在客户端本地使用。出于安全考虑,请商户尽量把私钥保存在服务端,在服务端进行签名验签。

    (2) 如果遇到运行后报错,类似于以下提示信息:
    Cannot find interface declaration for 'NSObject', superclass of 'Base64'

    那么需要打开报错了的文件,增加头文件。
    
    #import <Foundation/Foundation.h>
    

(3) 如果商户要在某个文件中使用支付宝的SDK 类库,需增加引用头文件。

#import <AlipaySDK/AlipaySDK.h>

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

支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 10页

移动支付接口 SDK2.0 标准版附录文档

图5-1增加头文件信息

(5) 点击项目名称,点击“Build Phases”选项卡,在“Link Binary with Librarles”选项中,新增“AlipaySDK.framework”和“SystemConfiguration.framework”两个系统库文件。如果商户项目中已有这两个库文件,可不必再增加。

图5-2增加系统库文件

支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 11页

移动支付接口 SDK2.0 标准版附录文档

(6) 点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“alisdkdemo”。“alisdkdemo”来自于文件“APViewController.m”的NSString *appScheme = @"alisdkdemo";。

图5-3配置 URL Schemes

3. 配置基本信息打开“APViewController.m”文件,对以下三个参数进行编辑

表5-1 IOS基本信息配置

NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";

参数

含义

partner

合作身份者ID,以2088 开头由16 位纯数字组成的字符串。请参考“7.1如何获得PID与密钥”。

seller

支付宝收款账号,手机号码或邮箱格式。

private_key

商户方的私钥,pkcs8格式。请参考“7.2 RSA密钥生成与使用”。

支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 12页

移动支付接口 SDK2.0 标准版附录文档注意:

这些参数配置是为客户端签名功能服务的,仅作为示例使用。商户在接入支付宝产品时,请把这些信息通过商户项目自己的服务端传递。

4. 代码示例运行逻辑

  1. 步骤1:  调用order.m 里的函数 description将商品信息拼接成字符串作为待签名字符串,

    如:

  2. 步骤2:  使用类CreateRSADataSigner,调用signString签名函数做签名,如:

  3. 步骤3:  把签名结果赋值给参数sign,并把sign 加入之前的待签名数组中,此时得到的便是要请求给支付宝的全部数据。

"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"YR2VGG3G1I31XDZ\"&subject=\"1\"&body=\"我 是 测 试 数 据\"&total_fee=\"0.02\"&notify_url=\"http://www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\""

"GsSZgPloF1vn52XAItRAldwQAbzIgkDyByCxMfTZG%2FMapRoyrNIJo4U1LUGjHp6gdBZ7U8jA1kljLPqkeGv8MZigd3kH25V0UK3Jc3C94Ngxm5S%2Fz5QsNr6wnqNY9sx%2Bw6DqNdEQnnks7PKvvU0zgsynip50lAhJmflmfHvp%2Bgk%3D"

"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"YR2VGG3G1I31XDZ\"&subject=\"1\"&body=\"我 是 测 试 数 据\"&total_fee=\"0.02\"&notify_url=\"http://www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\"&sign=\"GsSZgPloF1vn52XAItRAldwQAbzIgkDyByCxMfTZG%2FMapRoyrNIJo4U1LUGjHp6gdBZ7U8jA1kljLPqkeGv8MZigd3kH25V0UK3Jc3C94Ngxm5S%2Fz5QsNr6wnqNY9sx%2Bw6DqNdEQnnks7PKvvU0zgsynip50lAhJmflmfHvp%2Bgk%3D\"&sign_type=\"RSA\""

步骤4: 调用(AlipaySDK *)defaultService 类下面的支付接口函数,唤起支付宝支付页面。

appScheme 为app 在info.plist 注册的 scheme。

(void)payOrder:(NSString *)orderStrfromScheme:(NSString *)schemeStr
       callback:(CompletionBlock)completionBlock

支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 13页

移动支付接口 SDK2.0 标准版附录文档

图5-4支付宝支付页面后面的动作全由买家在支付宝收银台中操作完成。如果设备中有支付宝客户端,会

优先调用支付宝客户端进行支付,支付完成后会重新唤起商户app。

步骤5: 当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户“返回”。此时在APAppDelegate.m的 -

(BOOL)application:(UIApplication )application openURL:(NSURL )urlsourceApplication:(NSString *)sourceApplication annotation:(id)annotation中调用获取返回数据的代码:

拿到返回数据:
点取消后返回

对其做 URLDecode
支付宝(中国)网络技术有限公司 版权所有|版本:1.3第 14页

[[AlipaySDK defaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {NSLog(@"result = %@",resultDic);//返回的支付结果}];

"alisdkdemo://safepay/?%7B%22memo%22:%7B%22result%22:%22%22,%22memo%22:%22%E7%94%A8%E6%88%B7%E4%B8%AD%E9%80%94%E5%8F%96%E6%B6%88%22,%22ResultStatus%22:%226001%22%7D,%22requestType%22:%22safepay%22%7D"

移动支付接口 SDK2.0 标准版附录文档点确认后返回

"alisdkdemo://safepay/?{"memo":{"result":"","memo":"用 户 中 途 取 消","ResultStatus":"6001"},"requestType":"safepay"}"

"alisdkdemo://safepay/?%7B%22memo%22:%7B%22result%22:%22partner=%5C%222088101568353491%5C%22&seller_id=%5C%222088101568353491%5C%22&out_trade_no=%5C%22QU6ZOD85K4HVQFN%5C%22&subject=%5C%221%5C%22&body=%5C%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%5C%22&total_fee=%5C%220.02%5C%22&notify_url=%5C%22http:%5C/%5C/www.xxx.com%5C%22&service=%5C%22mobile.securitypay.pay%5C%22&payment_type=%5C%221%5C%22&_input_charset=%5C%22utf-8%5C%22&it_b_pay=%5C%2230m%5C%22&show_url=%5C%22m.alipay.com%5C%22&success=%5C%22true%5C%22&sign_type=%5C%22RSA%5C%22&sign=%5C%22pg16DPA%5C/cIRg1iUFCl8lYZG54de+kfw+vCj32hGWye97isZ1A4bW6RNaDXHhZXVaI5Vk2YDxhNUl85EHRd+EL7%5C/+ogQTnsaEHl+D13PuZExIXRKGBnkYqaNV6kH6hDygnf5IOtoojHWLQyem7oRBVzB0vlF%5C/+YGFpzFHZyTVpM8=%5C%22%22,%22memo%22:%22%22,%22ResultStatus%22:%229000%22%7D,%22requestType%22:%22safepay%22%7D"

对其做 URLDecode

"alisdkdemo://safepay/?{"memo":{"result":"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"QU6ZOD85K4HVQFN\"&subject=\"1\"&body=\"我 是 测 试 数 据\"&total_fee=\"0.02\"&notify_url=\"http:\/\/www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\"&success=\"true\"&sign_type=\"RSA\"&sign=\"pg16DPA\/cIRg1iUFCl8lYZG54de+kfw+vCj32hGWye97isZ1A4bW6RNaDXHhZXVaI5Vk2YDxhNUl85EHRd+EL7\/+ogQTnsaEHl+D13PuZExIXRKGBnkYqaNV6kH6hDygnf5IOtoojHWLQyem7oRBVzB0vlF\/+YGFpzFHZyTVpM8=\"","memo":"","ResultStatus":"9000"},"requestType":"safepay"}"

之后,对这些数据做处理。

注意:

  • 由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay 接口的callback 就会失效,请商户对 standbyCallback返回的回调结果进行处理;

  • 同步返回数据时,建议通过服务端的验签功能代码做验签处理,之后再对返回的数据做业务逻辑处理;

  • 须以服务器异步通知的结果数据为准,并对其做业务逻辑处理。

在集成支付宝的时候会出现一下错误:这是路径错误,

一个文件夹:名字自己起里面放着支付宝的所需的第三方库,等头文件如上

在build Setting里面点击Header  Search Paths然后将文件夹拖进去如上:不要手打比较容易出错。会自动识别成相对路径。然后就OK了

希望能够帮到你》》》》

转载于:https://www.cnblogs.com/hjltonyios/p/5017091.html

集成支付宝SDK流程相关推荐

  1. 集成支付宝SDK时错误的解决办法

    1.打开Demo中的错误 这是路径错误导致 解决办法:在Build Settings 中找到 Library Search Paths ,去掉其中的 /// 2.自己集成支付宝SDK时的错误 这个也是 ...

  2. 集成支付宝支付流程 和查询支付的结果

    一:介绍 支付之前,在网上也查寻了资料, 支付接入坑太多,微信坑最多,api文档太复杂. 二:交互流程 建议先把开发文档仔仔细细看一遍,一定要看,刚开始的时候没有老老实实地看完,结果遇到很多的坑,浪费 ...

  3. android 快捷支付sdk,Android 集成支付宝SDK实现快捷支付--填坑

    刚给app集成了支付宝的android客户端快捷支付SDK,集成很简单,但是由于是涉及钱的问题,大家都会持谨慎态度,所以有很多小坑,粗心的话集成之路会很坎坷,对于集成步骤,我不想写了,没有必要,就看官 ...

  4. iOS集成支付宝sdk下载地址

    https://b.alipay.com/order/productDetail.htm?productId=2014110308141993&tabId=4#ps-tabinfo-hash ...

  5. Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

    前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 继< Android Ap ...

  6. Android App支付:支付宝SDK接入详细指南(附官方支付demo)

    Android App支付:支付宝SDK接入详细指南(附官方支付demo) 前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多 ...

  7. 网站集成支付宝的方法和所需资料下载

    越来越多的网站想做网站集成支付宝功能,本文就详细的讲述一下网站集成支付宝的方法和所需资料下载. 一.网站集成支付宝学习流程建议(在本篇文档中,基本都可以找到相关资源下载) 1.阅读<支付宝接口集 ...

  8. 支付宝SDK的两个回调区别

    首次集成支付宝SDK的时候想必大家会对SDK中的两个回调有一些搞不清,有些人也不会细看文档,就会问到底区别是什么.下面来为大家解析一下. [[AlipaySDK defaultService] pay ...

  9. IOS支付宝SDK跳转wap支付不成功

    IOS在集成支付宝SDK后,当手机设备安装有支付宝钱包app,则会跳转到支付宝钱包app进行付款操作.当手机设备未安装支付宝钱包app时,则会打开wap进行付款. 当然,也有奇葩的情况出现,就是没有显 ...

最新文章

  1. mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8
  2. 排除hotnews主题内容页面上的热点图片推荐里的分类-hotnews主题top_hot.php
  3. SQL Server 监控统计阻塞脚本信息
  4. 致创业者:APP已死 服务永生
  5. 链表的代码实现【数据结构F】
  6. (王道408考研操作系统)第二章进程管理-第四节1:死锁相关概念
  7. 编程之美2014 资格赛题目3 : 格格取数
  8. 进程调度的时机,切换与过程,方式
  9. JavaScript 实现Map效果
  10. 时间序列数据的平稳性检验
  11. PTA - 厘米换算英尺英寸(C语言)
  12. 【leetcode】出界的路径数----迭代问题与计算思维
  13. python sympy包符号运算进行定积分计算
  14. 发布一个JINI服务
  15. Burp suite 暴力破解shell密码详细教程
  16. Git本地版本回退与远端版本回退(回滚)
  17. 人脸皮肤高清xyz贴图库分享
  18. ERP系统能给企业带来的那些好处
  19. WebSocket的学习
  20. 平台经济反垄断,未来三年开放式金融创新机会在何处?

热门文章

  1. 基于PyQt开发的第二个小程序:高校BBS发帖辅助软件(CampusBBSAssistant)
  2. 洛谷P4098 [HEOI2013]ALO
  3. PTA L1-062 幸运彩票 C++实现
  4. 基于蘑菇博客建设个人SNS网站(二)--后台框架搭建
  5. AirDisk产品Q1\T2\Q3C连接和使用方式
  6. matlab里H是什么,matlab 中 hObject和handles区别
  7. adonis启动流程
  8. python汇率换算程序_编写python程序,解决公里与英里转换问题,要求输入英里数,计算出相应的公里数...
  9. 闹钟Android实验报告,定时闹钟我的实验报告.doc
  10. html代码设置五边形,javascript怎么画正五边形?