@zhuoming
2016-06-12T04:25:37.000000Z
字数 5100
阅读 1273
iOS 支付宝 alipay
本文写于 2016-4-9,参考官方开发文档、
公司申请成为商家 商户签约审核
opensslopenssl> genrsa -out rsa_private_key.pem 1024openssl> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pemopenssl> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt


TIPS
2、3、4前面的openssl>是自带的不需要输入的
如果没有明确的cd到某个具体路径 默认路径是用户根目录/Users/yourUserName
这里集成的支付宝是为了在移动端方便,所以包含了一些本属于后台的工作
导入代码-官方文档
1. 导入相应的库文件
2. 更改https
3. 重点将官方demo中的下列文件拖到项目中
- AlipaySDK.bundle
- AlipaySDK.framework
- AliSDKDemo\Util及下面所有文件
- AliSDKDemo\openssl及下面所有文件
- libcrypto.a
- libssl.a
- Order.h
- Order.m
- 对于
Cannot find interface declaration for 'NSObject', superclass of 'Base64'等错误,只需在报错的地方导入相应的头文件。- 对于opssl的错误 点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search”搜索,对“Header Search
Paths”增加头文件路径:$(SRCROOT)/项目名称。如果头文件信息已增加,可不必再增加。
点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL
Schemes”中输入“alisdkdemo”。“alisdkdemo”来自于文件“APViewController.m”的NSString
*appScheme = @“alisdkdemo”;。
- (IBAction)btnBuyCLick:(UIButton *)sender {/*** 输入是否合法*/if (!(_tfName.text.length > 0 && _tfPrice.text.length > 0 &&([self isPureInt:_tfPrice.text]||[self isPureFloat:_tfPrice.text]))) {UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"message:@"请填入合法的字符"delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil];[alert show];return;}/*============================================================================*//*=======================需要填写商户app申请的===================================*//*============================================================================*/NSString *partner = @"2088121427784129";NSString *seller = @"zhifubao@whunf.com.cn";NSString *privateKey = @"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMX/TsnXuiWmVB20UN9svlYc4sbLgPzTu8TarYnF1UZtcC5VP0VGLxlUTBywldDIq3p9UbnOt91avNvEV+PTAanyNeQy6iDG4/BZ7YhsSF8vTVgHbDaua/Aynz/Xb0kUX+o+E7LR6tRFNAqbEjPhatmhM62uIEM6hei3sFJFwUt1AgMBAAECgYEAjOvy8tw1JBjnI6E0MmFec0Hp8l3jd49nxGt0OmvxKUg5IPERsEeMvDVwWrcgWlKJIgxR/7Ju0QCFDNIJUCDdvAwPIAtjxweV3RugsASWXST5CqsyGtPpLnMZy7OdYFAT9hKkcEq+poUjbFpqDLFoRKfQqZD6tZM0/xbfxoZe8H0CQQDm9CoOqyrgHaTwa2aMvy64LXOKJL2NagFEevx0Vj7zvzFUOCynU1gSDDq3p2V20fdeQBBssceJrRigXy5OM4eTAkEA23gxKw7PSh+qyNL4i4kzpvQp/c336F/Gb7DUZrVqwb1gLnPXFvzsWodTu9g5p4+f8kckvw0H0U0mwy7BHJM11wJAKkjj9mGSbQwgacBQO065oBD6SX2mkuCosMAPvsEXr4r+3huW2V/iDRPeIEfuxM12i/QQzcXS8bsWei5TDRBULwJADumCxb8y3IF8VDrpgmmnJc/vTnyBPLvNOueT9wqan2FjuKRMWBaFZL1PNjNB7521q3ukBos3HcSVPqvdmThzbwJBAM1pjTSZ6FBMUMqJJJJgvfmiYUZ+5EwOsWObKl8WLqVR5trUEH1/483M5q+gD2GnGBjysdfCsKufoE7CtAGYctg=";/*============================================================================*//*============================================================================*//*============================================================================*///partner和seller获取失败,提示if ([partner length] == 0 ||[seller length] == 0 ||[privateKey length] == 0){UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"message:@"缺少partner或者seller或者私钥。"delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil];[alert show];return;}/**生成订单信息及签名*///将商品信息赋予AlixPayOrder的成员变量Order *order = [[Order alloc] init];order.partner = partner;order.seller = seller;order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)order.productName = _tfName.text; //商品标题order.productDescription = _tfName.text; //商品描述order.amount = [NSString stringWithFormat:@"%.2f",0.1]; //商品价格order.notifyURL = @"http://www.whunf.com.cn"; //回调URLorder.service = @"mobile.securitypay.pay";order.paymentType = @"1";order.inputCharset = @"utf-8";order.itBPay = @"30m";order.showUrl = @"m.alipay.com";//应用注册scheme,在AlixPayDemo-Info.plist定义URL typesNSString *appScheme = @"AliPayDemo";//将商品信息拼接成字符串NSString *orderSpec = [order description];NSLog(@"orderSpec = %@",orderSpec);//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncodeid<DataSigner> signer = CreateRSADataSigner(privateKey);NSString *signedString = [signer signString:orderSpec];//将签名成功字符串格式化为订单字符串,请严格按照该格式NSString *orderString = nil;if (signedString != nil) {orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"];[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {NSLog(@"reslut = %@",resultDic);}];}}#pragma mark -#pragma mark ==============产生随机订单号==============- (NSString *)generateTradeNO{static int kNumber = 15;NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";NSMutableString *resultStr = [[NSMutableString alloc] init];srand((unsigned)time(0));for (int i = 0; i < kNumber; i++){unsigned index = rand() % [sourceStr length];NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];[resultStr appendString:oneStr];}return resultStr;}#pragma mark ==============判断是否符合==============//判断是否为整形:- (BOOL)isPureInt:(NSString*)string{NSScanner* scan = [NSScanner scannerWithString:string];int val;return[scan scanInt:&val] && [scan isAtEnd];}//判断是否为浮点形:- (BOOL)isPureFloat:(NSString*)string{NSScanner* scan = [NSScanner scannerWithString:string];float val;return[scan scanFloat:&val] && [scan isAtEnd];}