一、什么是支付宝


第三方支付平台

和内购非常相似
内购是用户将钱付款给苹果,之后苹果分成给商户
支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户

使用支付宝前提
购买的物品必须是和应用程序无关的.比如:团购卷/衣服/电子产品
如果和应用程序有关,必须采用内购(否则不允许上架).比如:会员/游戏道具

二、集成支付宝


现在不少app内都集成了支付宝功能

使用支付宝进行一个完整的支付功能,大致有以下步骤:
向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
下载支付宝SDK
生成订单信息,签名加密
调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
支付完毕后,支付宝客户端会自动跳回到原来的应用程序
在原来的应用程序中显示支付结果给用户看

三、集成SDK注意事项


* 支付宝的SDK下载和百度、讯飞语言等SDK不一样,直接搜支付宝进入官网下载
* 支付宝下载(选择我是商户用户—>如何集成—>移动开发)
* 集成前查看demo
* 集成时需要用到的库

* 集成之后可能遇到的问题

1)集成SDK编译时找不到 openssl/asn1.h 文件


解决方案:Build Settings --> Search Paths --> Header Search paths : $(SRCROOT)/支付宝集成/Classes/Alipay

2)链接时:找不到 SystemConfiguration.framework 这个库

解决方案:

四、具体代码


比如现在将产品展示在tableView上,选中时即购买此商品,集成支付宝的核心代码如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.取出模型对象
Product *product = self.products[indexPath.row]; // 2.购买商品
[self buyProduct:product];
} - (void)buyProduct:(Product *)product
{
// 1.添加写partner/seller/privateKey,签约后获得
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @""; // 2.生成订单
// 2.1.创建订单
Order *order = [[Order alloc] init]; // 2.2.设置商户ID/账号ID
order.partner = partner;
order.seller = seller; // 2.3.设置订单号
order.tradeNO = nil; // 2.4.设置产品相关的信息
order.productName = product.title;
order.productDescription = product.detail;
order.amount = [NSString stringWithFormat:@"%.2f", product.price]; // 2.5.设置订单常量
order.service = @"mobile.securitypay.pay";
order.paymentType = @"";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showUrl = @"m.alipay.com"; // 2.6.回调URL(异步通知服务器的地址)
order.notifyURL = @"http://www.xxx.com"; //回调URL // 2.7.将订单信息拼接成字符串
NSString *orderSpec = [order description]; // 3.对订单进行签名加密
// 3.1.对订单进行加密
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec]; // 3.2.将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"]; // 4.打开支付宝客户端进行支付(用户没有安装支付宝客户端,直接在应用程序中添加一个WebView,通过网页让用户进行支付)
// 注意:如果是通过网页支付完成,那么会回调该block:callback
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jingdong" callback:^(NSDictionary *resultDic) { }];
}

AppDelegate.m

// 当通过别的应用程序,将该应用程序打开时,会调用该方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// 当用户通过支付宝客户端进行支付时,会回调该block:standbyCallback
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}]; return YES;
}

iOS开发——高级篇——如何集成支付宝SDK的更多相关文章

  1. iOS开发——高级篇——iOS开发之网络安全密码学

    一.非对称加密 - RSA : + 公钥加密,私钥解密: + 私钥加密,公钥解密: + 只能通过因式分解来破解 二.对称加密 - DES - 3DES - AES (高级密码标准,美国国家安全局使用, ...

  2. iOS开发——高级篇——线程同步、线程依赖、线程组

    前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...

  3. iOS开发——高级篇——iPad开发、iPad开发中的modal

    一.iPad简介 1.什么是iPad一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑产品之间跟iPhone一样,搭载的是iOS操作系统 2.iPhone和iPadi ...

  4. iOS开发——高级篇——地理定位 CoreLocation

    一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用 ...

  5. iOS开发——高级篇——地图 MapKit

    一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用中,都用到了定位 ...

  6. iOS开发——高级篇——iOS 项目的目录结构

    最近闲来无事去面试一下iOS开发,让我感到吃惊的,面试官竟然问怎么分目录结构,还具体问每个子目录的文件名. 目录结构确实非常重要,面试官这么问,无疑是想窥探开发经验.清晰的目录结构,可让人一眼明白相应 ...

  7. iOS开发——高级篇——Parse 教程:网络后台基础

    本教程已针对Swift, iOS 8.3, Xcode 6.3及最新的Parse SDK(1.7.1版本)更新. 网络后台支持可以为你的App添加许多崭新的功能:不论是数据同步,社交分享,还是云端存储 ...

  8. iOS开发——高级篇——iOS中如何选择delegate、通知、KVO(以及三者的区别)

      在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers[B]怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信:1委托delegation2通知 ...

  9. iOS开发——高级篇——传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

随机推荐

  1. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  2. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

  3. context.Request.Files为NULL问题 在实现图片上传功能的时候出现在ashx等处理页面出现context.Request.Files为NULL异常,有几点需要注意:

    .在客户端可以将form用submit提交,如下: <%@ Page Language="C#" AutoEventWireup="true" CodeF ...

  4. jquery ajax rest invoke

    notice: <script type="text/javascript"> $(document).ready(function() { $("#b03& ...

  5. Java关键字——static

    static申明属性 如果有属性希望被所有对象共享,则必须将其申明为static属性. 使用static声明属性,则此属性称为全局属性,有时候也称为静态属性. 当一个类的属性申明位static的时候, ...

  6. CentOS下crond定时任务详细介绍

    目录 1.定时任务crond介绍... 2.crond定时任务限权... 3.Crontab用法... 4.Crontab命令的书写格式... 5.定时服务器时间同步... 6.写定时任务注意点.. ...

  7. CPU绑定操作

    使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系 [root@svn ~]# virsh vcpuinfo 16 VCPU: 0 CPU: 3 状态: running CP ...

  8. C++ 以费波纳茨数列为权重的加权均值计算方法 wMA

    #pragma once #include <iostream> using namespace std; template <typename T> double *wMA( ...

  9. C# unmanaged function pointers for iOS

    C# unmanaged function pointers for iOS Just a reminder to myself when I need this thing next time fo ...

  10. Linq 中按照多个值进行分组(GroupBy)

    Linq 中按照多个值进行分组(GroupBy) .GroupBy(x => new { x.Age, x.Sex }) group emp by new { emp.Age, emp.Sex ...