1 alipay

要做支付宝支付,对于新手,首先要了解的这个支付的业务逻辑,总体逻辑,下面就是基于支付宝SDK集成的交互流程,
1,公司boss用公司账号,申请支付宝账号,向支付宝签约 获得商户ID(partner)和账号ID(seller),这些主要是公司负责,我们只是拿来用的两个参数,
2,公司boss用申请来的公钥与支付宝获得私钥,(私钥是我们要用的) ;
3,下载支付宝官方sdk,导入工程,引第三方库,(登录网站:(登录网站:http://club.alipay.com/)
4,生成订单信息(期间包括了签名,操作后面会谈到)
5,调用官方sdk方法,发起支付请求,吊起支付宝,
6,支付完毕后,异步返回到服务器后台地址(这个地址是你跳转支付宝的时候调用支付宝官方sdk传参数存在后台服务器地址),同步返回支付信息到app(就是点击返回的时候通过block 传回来的信息);

2 下载sdk

去官方下载sdk 以及 Demo  
根据官方文档的步骤把 sdk导入工程需要的文件包括下图

将需要的文件,静态库等拖入工程中,这里有:alipaySDK.framework,alipaySDK.bundle,libcrypto.a,libssl.a,openssl,order.h,order.m文件

在接下来在在target的building phases 里面 加入需要的库
3.此时,或许会报错,那是因为在这些文件在demo里有一个.pch 文件 里面把 foundation 和uikit 库引进来了,所以在报错的时候你需要手动引进这俩个头文件

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

4此时运行程序还会报错 意思大概是

ios调支付宝找不到头文件<openssl/rsa.h>

,这个是官方sdk没有把路径带进来,所以你需要手动添加 步骤是

1找到TARGETS 的building setting 下 搜索 header search path 找到这项添加路径 (主要 需要添加相对路径)双击这一项 点击加号按钮 添加openssl文件路径 2如何获取路径 右键工程openssl文件夹 show in finder  找到双击显示简介找到位置 复制出来路径  要工程名字后面的路径,在前面拼接上
$(PROJECT_DIR)/工程名字后面的路径;
此时运行工程 就可以正常了,

好了言归正传 开发集成代码

我的开发 是 写一个nsobject 类封装了 支付宝支付的集成,方便别处用 
名字叫 Alipay  先看.h文件 主要是 留一个传参的接口 和blcok回调支付结果的方法
在看.m文件 我用复制的方式写 不用图片了 
首先 是实现类方法
此方法 是实现 给外部接口的 调用的 类方法  orderDic  是传入商品参数   两个block  是成功 和失败 会吊起返回的block
次方法里 调用了 初始化 方法  和 自定义 一个 方法 [alipay payWithOrderDic:orderDic success:success ispaying:ispaying Error:error] 这个方法 是调用支付宝的配置参数的方法 不理解 看下面的具体方法

+(void)payWithOrderDic:(NSDictionary *)orderDic success:(alipayBlock)success ispaying:(alipayBlock)ispaying Error:(alipayBlock)error{

Alipay *alipay = [[Alipay alloc]init];

[alipay payWithOrderDic:orderDic success:success ispaying:ispaying Error:error];

}

//此方法 是初始化方法  初始化 一些吊起支付宝 sdk 的方法 的参数的信息配置  里面的_partner _seller _pritvatekey 是全部变量 私有变量  这些变量 都是老板或者后台 给的 是死的  不会改变的 写个宏存下就好

-(instancetype)init {

self = [super init];

if (self) {

//从plist文件获取当前账号信息

//商户id  (直接从老板要)

_partner = ALIPAY_PARTNER;

//商户账号

_seller = ALIPAY_SELLER;

//商户的私钥

_privatekey = ALIPAY_PRIBVATEKEY;

}

return self;

}

//此方法 就是 在配置 吊起支付宝 sdk 的payorder方法需要的参数的配置 签名等一些列操作

-(void)payWithOrderDic:(NSDictionary *)orderDic success:(alipayBlock)success ispaying:(alipayBlock)ispaying Error:(alipayBlock)error{

//首先判断 商户ID 私钥 和账号是否获取成功

if (_partner.length==0||_seller.length ==0||_privatekey.length == 0) {

DPLog(@"缺少ID,账户,私钥,");

error();

return;

}

//生成订单信息 并签名

Order *order = [[Order alloc]init];

order.partner = _partner;//商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字)。

order.sellerID = _seller;//卖家支付宝账号对应的支付宝唯一用户号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。

order.outTradeNO = orderDic[@"outtradeno"];//订单id 改商品的唯一表示(app端自行制定)就是一串随机数 32位以下的

order.subject = orderDic[@"subject"];//商品标题//商品的标题/交易标题/订单标题/订单关键字等。

order.body = orderDic[@"body"];//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。

order.totalFee = [NSString stringWithFormat:@"%@",orderDic[@"totalFee"]];//商品的金额 //注意  是保留两位小数的 多了不行 支付宝 不认同 必须是两位小数的字符串

order.service  =@"mobile.securitypay.pay";//支付宝的服务器 固定的 都是这个

order.paymentType =@"1";//付款类型,1:商品购买。(不传情况下的默认值)

order.inputCharset =@"utf-8";//商户网站使用的编码格式,固定为utf-8。

order.itBPay = @"30m";//设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。当用户输入支付密码、点击确认付款后(即创建支付宝交易后)开始计时。取值范围:1m~15d,或者使用绝对时间(示例格式:2014-06-13 16:00:00)。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。该参数数值不接受小数点,如1.5h,可转换为90m。(一般设置为30m)

order.showURL =@"m.alipay.com";//支付宝的scheme 标示 固定的 谁开发 都是这个

NSString *appscheme = @"com.changsheng.wyzxclient"; //这个是程序间调转的你得app的表示 下面有介绍

order.notifyURL =  [NSString stringWithFormat:@"%@/service/alipay/orderComplete",IMAGEHEADER] ;//回调URL   这个URL是在支付之后,支付宝通知后台服务器,使数据同步更新,必须填,不然支付无法成功(去问后台  要这个网址)

//将商品信息拼接成字符串

NSString *orderSpec = [order description];

DPLog(@"orderSpec = %@",orderSpec);

//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

id<DataSigner>signer = CreateRSADataSigner(_privatekey);//这个参数 是秘钥 是之前初始化方法 初始化的

NSString *signedString = [signer signString:orderSpec];

//将签名成功的字符串格式化为订单字符串

NSString *orderString = nil;

if (signedString !=nil) {

orderString  =[NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"];//次方法 就是把 签名后的 和 订单信息的两个字符串 拼接为一个支付宝规则字符串 留着传给支付宝的方法

//支付后的状态处理  此方法 是吊起支付宝sdk的方法 传的参数 就是上一步构造的字符串

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

DPLog(@"%@",resultDic);

if ([[resultDic objectForKey:@"resultStatus"]intValue] ==9000) {

//支付成功

success();

}else if ([[resultDic objectForKey:@"resultStatus"]intValue] ==8000){

//正在处理

ispaying();

}else{

//支付错误

error();

}

}];

}

}

针对方才说的对于程序间调用的 那个参数如何设置  这个就是简单的程序间调用 需要设置 就是所谓的白名单  在tagate 的 info 里 有一个URL Types 点开 点击加号 在url schems 里添加 个字符串  一般是 budle id

保持这里 和传给支付宝的一致就可以 要不然 支付完 返回不了 

iOS 支付宝支付开发集成流程,这里记载的是签名保存在前台的集成,相关推荐

  1. php个人支付宝对账,PHP实现个人支付宝支付开发(一) - 免签支付接口

    ...Access2007 表中 同时 显示 明细 .小计. 总计 ? ID fullname pay 2 a ¥500.00 4 a ¥600.00 5 a ¥700.00 6 b ¥800.00 ...

  2. php开发支付宝支付密码忘记了怎么办_PHP实现个人支付宝支付开发(一)

    在网站开发过程中,特别是商城类网站,都会要求网站必须能实现在线支付的功能.此时就需要通过第三方的支付平台来实现完整的交易流程.常见的第三方支付平台就比如支付宝,那么网站实现支付宝在线支付功能就需要进行 ...

  3. iOS之“支付宝支付”开发流程

    支付宝快捷支付的主要步骤: 先与支付宝签约,获得商户ID(partner)和账号ID(seller); 下载相应的公钥私钥文件(加密签名用); 下载支付宝SDK; 生成订单信息; 调用支付宝客户端,由 ...

  4. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  5. php实现支付宝支付接口,PHP实现个人支付宝支付开发(二)

    在前面的文章<PHP实现个人支付宝支付开发(一)>中,我们为大家简单介绍了通过第三方接口平台码支付来实现个人支付宝支付功能的交易流程. 下面我们继续结合图文,给大家介绍通过码支付实现PHP ...

  6. 支付宝支付 第一集:没有营业执照,怎样申请一个支付宝的商家号进行开发?使用支付宝支付开发网页移动应用,一分钟申请注册一个支付宝支付沙箱账号,支付宝支付入驻、创建应用、获取AppID

    支付宝支付 第一集:没有营业执照,怎样申请一个支付宝的商家号进行开发?使用支付宝支付开发网页&移动应用,一分钟申请注册一个支付宝支付沙箱账号,支付宝支付入驻.创建应用.获取AppID 一.资源 ...

  7. iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析

    最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面 俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟 ...

  8. iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析

    最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟, ...

  9. ios 支付宝支付集成

    支付宝支付: 下载官方demo,把需要的framwork下载下来,在自己的工程中,新建文件夹,然后全部塞进去,到build phases中把需要的全部导入,其中xcode7以上需要多导入两个.a文件, ...

最新文章

  1. 使用NeMo快速入门NLP、实现机器翻译任务,英伟达专家实战讲解,内附代码
  2. SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
  3. 等压线上怎么画风向_圣诞贺卡怎么写?向你爱的人送上最有温度的祝福吧!
  4. bzoj 2427: [HAOI2010]软件安装(Trajan+树形DP)
  5. 前端 encodeURI 为什么要编码两次
  6. ascll编码表图片_ascii码对照表
  7. 第五届电气学院比赛之XXX——数码管显示模块
  8. Unity笔记之切换鼠标图标样式、PSD格式文件导入Unity
  9. basler恢复出厂设置_bios恢复出厂设置
  10. P1_M4_L5 Lateral Dynamic Bicycle Model(自行车模型的横向动力学建模)
  11. Android 双卡双待
  12. [288]关于MySQL的1064错误
  13. OSChina 万圣节乱弹 ——重口味请谨慎点开
  14. 《C和指针》阅读笔记
  15. Tiled地图编辑器(一)实现坦克大战
  16. 天翎数字孪生解决方案
  17. Tekla Structures Design Suite安装步骤
  18. ASP如何调用Delphi开发的WebService服务
  19. python字符串数组转对象类型
  20. 分子分母同时减去\加上一个数字,结果变化情况

热门文章

  1. 修改Chrome谷歌浏览器默认安装路径
  2. 如何查看80端口是否被占用 .
  3. python建立一个简单的server_使用Python创建一个简易的Web Server
  4. 用Android平板模拟蓝牙耳机,与手机连接,实现接听与拨打电话-预研
  5. RationalDMIS2023平面度评价算法选择2023
  6. android 显示电池电量
  7. “羊了个羊”Java版本实现
  8. Segd 2.1格式注释
  9. ant design vue:a-select使用v-model后无法选择的解决方法
  10. 基于JavaWeb的党员管理系统