iOS集成支付宝和遇到的坑
2016-09-23 本文已影响0人
喊我超哥啊
首先导入支付宝SDK 和依赖库
98B035F7-6F66-4770-A8BB-F7E04CFFF4F1.png
libc++.tbd
libz.tbd
CoreMotion.framework
CFNetwork.framework
Foundation.framework
UIKit.framework
CoreGraphics.framework
CoreText.framework
QuartzCore.framework
CoreTelephony.framework
SystemConfiguration.framework
导入之后编译会报错openssl/asn1.h
6F957E50-107D-4D54-A3A0-8E92A62CF0C9.png
这是一个神奇的大坑,好多人卡在这里
解决方法:Targets -> Build Settings 下的 Header Search Paths。添加如下目录 "$(SRCROOT)/项目名称/支付宝sdk所在文件夹的绝对地址"
当使用xcode7的时候可能会报错
41AB3AB2-8921-4478-A575-63C96557D1D4.png
linker command failed with exit code 1 (use -v to see invocation)
这时我们找到Bitcode改为NO xcode默认为YES
259F6798-19BE-400D-8EF1-599FF154AC4D.png
然后再编译,ok没报错。 已经成功了一大半。
填上支付宝的信息,以及订单信息。
EF77CD74-F77C-4003-99F9-E40850270F76.png
/*
*点击获取product实例并初始化订单信息
*/
/*
*商户唯一的partner 和seller
签约后会给商户分配唯一的partner 和seller
*/
//填写用户申请的
NSString *partner=@"";
NSString *seller=@"";
NSString *privateKey=@"";//下载的公匙私匙文件
//partner 和seller获取失败
if([partner length]==0||[seller length]==0||[privateKey length]==0)
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:@"缺少partner或者seller" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles: nil];
[alert show];
return;
}
//生成订单信息及签名
//将商品信息赋予ALixpayOrder的成员变量
UserModel *Model=[[UserModel alloc]init];
Order *order=[[Order alloc]init];
order.partner=partner;
order.seller=seller;
// order.tradeNO=Model.oderNumber;//订单号
// order.productName=Model.orderName;//商品名称
// order.productDescription=Model.orderDescri;//商品描述
// order.amount=Model.orderPrice;//商品价格
order.tradeNO=@"12398998d66522416565";
order.productName=@"ipone6s玫瑰金";
order.productDescription=@"但是";
order.amount=@"0.01";
order.notifyURL=@"http://www.xxx.com";//回调url
//下面这些参数都是固定的
order.service=@"mobile.securitypay.pay";
order.paymentType=@"1";
order.inputCharset=@"utf-8";
order.itBPay=@"30m";
order.showUrl=@"m.alipay.com";
//用户注册scheme,在info.plist 定义URL types 用于快捷支付成功后重新唤起商户应用
NSString *appSheme=@"chaoge";
//将商品信息拼接成字符串
NSString *orderFormat=[order description];
//获取私匙并将商户信息签名,外部商户可以根据情况存放私匙和签名,只要遵循RSA签名规范将签名字符串base64编码和UrlEncode
id<DataSigner>signer=CreateRSADataSigner(privateKey);
NSString *signString=[signer signString:orderFormat];
//将签名成功字符格式化为订单字符串,请严格按照格式
NSString *orderString=nil;
if(signString!=nil)
{
orderString=[NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderFormat,signString,@"RSA"];
NSLog(@"%@",orderString);
[[AlipaySDK defaultService]payOrder:orderString fromScheme:appSheme callback:^(NSDictionary *resultDic) {
NSLog(@"------%@",resultDic);
NSString *msg=[resultDic objectForKey:@"result"];
if(msg.length==0)
{
msg=@"支付失败";
}else{
msg=@"支付成功";
}
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:msg delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil];
[alert show];
}];
}
第二个大坑来了
Undefined symbols for architecture arm64:
"_CreateRSADataSigner", referenced from:
-[ViewController payment:] in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)报错。
C++混编。
这时候我们只需要把写对应支付宝操作地方的类文件后缀.m改为.mm就行了
F6F93805-EBB8-4FD8-839E-E55E14424716.png 。
然后运行。完美。
Demo地址:https://github.com/ZhichaoZhan/AlipayDemo