1 alipay
2 下载sdk
将需要的文件,静态库等拖入工程中,这里有:alipaySDK.framework,alipaySDK.bundle,libcrypto.a,libssl.a,openssl,order.h,order.m文件
#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)/工程名字后面的路径;
此时运行工程 就可以正常了,
好了言归正传 开发集成代码
+(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();
}
}];
}
}