您的位置:首页 > 移动开发 > IOS开发

关于IOS中使用支付功能(以支付宝为例)

2016-04-05 22:26 597 查看
支付宝是第三方支付平台,简单来说就是协调客户,商户,银行三者关系的方便平台

使用支付宝进行一个完整的支付功能,大致有以下步骤

a 与支付宝进行签约,获得商户ID(partner)和账号ID(seller)

b 下载相应的公钥私钥文件(加密签名用)

c 下载支付宝SDK

d 生成订单信息

e 调用支付宝客户端,有支付宝客户端跟支付宝安全服务器打交道

f 支付完毕后返回支付结果给客户端和服务器

支付功能的实现 有两种方式:

1 支付宝的应用可以 用url 直接连接到 支付宝的官网 (当然后台是要进行处理的)

2 第二种就是添加支付宝的第三方了 首先 下载支付宝的demo

支付宝的demo 一般的常见问题解决

1 No architecutures to compile for (ONLY_ACTIVE_ARCH = YES, active arch = x86_64,VALID_ARCHS = i386)

出现这样的问题一般是 将 64 位编译进去就能解决了(这个问题只要你下载的是最新的demo一般很少见了 )

解决方案:

targets -> Architectures 下面的Valid Architectures 添加上 arm64

2 将支付宝的第三方添加到项目中的时候 有时 会出现 openssl 文件中的.h 文件报错 说此文件不能被找到

出现这样的问题是 的原因一般是添加的路径 不对

解决方案:

点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search”搜索,对“Header Search Paths” 增加头文件路径:$(SRCRCOT)/项目名称 设置一下路径 一般都能解决。

3 Cannot find interface declaration for "NSObject", supercalss of 'Base64'

解决方案 打开报错的文件,增加头文件

#import <Foundation/Foundation.h>

基本上支付宝中的demo 里面的问题一般都会得到解决。然后 看着demo 跟实际的项目结合一下就ok 了

支付宝教程:

(申请工作是产品经理或技术总监做的,过程省略 )

1 将需要的文件,静态库等拖入工程中,这里有:include,libs,Utilities,libcrypto.a,libssl.a文件

2 添加 库

Linked Frameworks and Libraries 中 添加

libssl.a libcrypto.a SystemConfiguration.framework

AlipaySDK.framework

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



#import "Order.h"

#import "DataSigner.h"



#import <AlipaySDK/AlipaySDK.h>

4 后面的基本上都是 按照官方demo写的

接口调用步骤:

1.封装订单模型将商品信息赋予AlixPayOrder的成员变量

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

// 应用注册scheme,在项目的info.plist 定义URL types

NSString *appScheme = @"zhifu";



/生成订单描述



NSString *orderSpec = [order description];

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

idsigner = CreateRSADataSigner(@“私钥key”);

NSString *signedString = [signer signString:orderSpec];

//传入订单描述 进行 签名



NSString *signedString = [signer signString:orderSpec];

3.生成订单字符串

NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec,signedString, @"RSA"];

4.调用支付接口

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

1:先与支付宝签约,获得商户ID(partner)和账号ID(seller)

2:下载相应的公钥私钥文件(加密签名用)

3:下载支付宝SDK

4:生成订单信息

5:调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道

6:支付完毕后返回支付结果给商户客户端和服务 ,SDK里有集成支付宝功能的一个Demo> 集成支付功能的具体操作方式,可以参考Demo

//生成订单信息及签名请求参数没有 return_URL这个参数,商户可以根据自身情况选择签名方法

NSString *appScheme=@"Practice";

NSString * orderInfo=[self getOrderInfo:indexPath.row];

NSString * signedStr=[self doRsa:orderInfo];

NSString*orderString=[NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderInfo,signedStr,@"RSA"];

[AlixLibService payOrder:orderString AndScheme:appScheme seletor:_result target:self];

-(NSString *)doRsa:(NSString *)orderInfo

{

idsigner;

signer=CreateRSADataSigner(PartnerPrivKey);

NSString * signedString=[signer signString:orderInfo];

return signedString;

}

-(NSString *)getOrderInfo:(NSInteger)index

{

//点击获取product实例,并初始化订单信息

Pruduct *pruduct=[_dataArray objectAtIndex:index];

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

order.partner=PartnerID;

order.seller=SellerID;

//订单ID

order.tradeNO=[self generateTradeNO];

// 商品标题

order.productName=pruduct.subject;

// 商品描述

order.productDescription =pruduct.body;

//商品价格

order.amount=[NSString stringWithFormat:@"%.2f",pruduct.price];

order.notifyURL = @"http%3A%2F%2Fwwww.xxx.com"; //回调URL

return order.description;

}

-(NSString *)generateTradeNO

{

const int N =15;

NSString * sourceString=@"SSSSSSSSSSSSSSSS";

NSMutableString *re=[[NSMutableString alloc]init];

srand(time(0));

for (int i=0; i unsigned index=rand()%[sourceString length];

NSString * s=[sourceString substringWithRange:NSMakeRange(index, 1)];

[re appendString:s];

}

return re;

}

-(void)paymentResultDelegate:(NSString *)result

{

NSLog(@"%@",result);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: