标签:
1.按照http://doc.open.alipay.com/doc2/detail?spm=0.0.0.0.SWdJgo&treeId=59&articleId=103676&docType=1 《URLname:导入代码》将包给塞进去,配置好白名单和安全访问
安全访问在info.plist中
2. 配置包路径,一定是show in finder中的路径
Framework search Paths :$(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK
HeaderSearch Paths: $(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK
Library Search Paths: $(PROJECT_DIR)/XWMerchant/ThirdParts/AlipaySDK
3.配置AlipayHeader.h中的宏定义
#define kPartnerID @""2088开头
/**
* seller:支付宝收款账号,手机号码或邮箱格式。
*/
#define kSellerAccount @""与合作者Id绑定的帐号,不要瞎搞成自己的了
/**
* 支付宝服务器主动通知商户 网站里指定的页面 http 路径。
*/
#define kNotifyURL @""支付宝支付完成后会通知商户的后台服务器
/**
* appSckeme:应用注册scheme,在Info.plist定义URLtypes,处理支付宝回调
*/
#define kAppScheme @""支付完成后回到应用中
/**
* private_key:商户方的私钥,pkcs8 格式。
*/
#define kPrivateKey @""//这个需要重点说说,在这里卡了一会,
Linux用户(以Ubuntu为例)$ openssl
进入OpenSSL程序OpenSSL> genrsa -out rsa_private_key.pem 1024
生成私钥OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成公钥OpenSSL> exit ##
退出OpenSSL程序
生成完成之后去b.alipay.com,网站,找到我的商家服务,点击“查询PID、Key”,在合作伙伴管理密钥中设置生成的公钥,并将生成的pkcs8的私钥放在宏定义kPrivateKey里面。注册的商户移动应用现在还不知道有什么用。。。
4.支付
#pragma mark ==============支付宝支付============== - (void)alipay:(NSDictionary *)dic{//只包含支付订单号 /* *生成订单信息及签名 */ //将商品信息赋予AlixPayOrder的成员变量 NSString *serviceStr; switch (_serviceType) { case kXWServerTypeRecruit: serviceStr = @"招聘合同"; break; case kXWServerTypeTurnShop: serviceStr = @"转店合同"; break; case kXWServerTypeFindShop: serviceStr = @"找店合同"; break; default: break; } self.orderItem.partner = kPartnerID; self.orderItem.seller = kSellerAccount; self.orderItem.tradeNO = dic[@"tradeNo"]; //订单ID(由商家自行制定) self.orderItem.productName = serviceStr; //商品标题 self.orderItem.productDescription = @"开通服务后可以使用该服务"; //商品描述 self.orderItem.amount = [NSString stringWithFormat:@"%.2f",0.01/*_price*/]; //商品价格 self.orderItem.notifyURL = kNotifyURL; //回调URL self.orderItem.service = @"mobile.securitypay.pay"; self.orderItem.paymentType = @"1"; self.orderItem.inputCharset = @"utf-8"; self.orderItem.itBPay = @"30m"; self.orderItem.showUrl = @"m.alipay.com"; //将商品信息拼接成字符串 NSString *orderSpec = [self.orderItem description]; DLog(@"orderSpec = %@",orderSpec); NSString *signedString = [self genSignedString:orderSpec withKey:kPrivateKey];//签名如果私钥和公钥配对不成功,会生成订单失败 NSString *orderString = nil; if (signedString != nil) { orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"]; [[AlipaySDK defaultService] payOrder:orderString fromScheme:kAppScheme callback:^(NSDictionary *resultDic) { NSLog(@"reslut = %@",resultDic); NSDictionary *dict = (NSDictionary *)resultDic; NSString *resultStatus = [dict valueForKey:@"resultStatus"]; if ([resultStatus isEqualToString:@"9000"]) { //成功 [XWPrompt showPromptMessage:@"支付成功"]; XWPaySuccessViewController *paySuccessVC = [[XWPaySuccessViewController alloc]init]; paySuccessVC.payType = kPayWayTypeAlipay; paySuccessVC.servicetype = _serviceType; paySuccessVC.customerServiceDic = _customerServiceDic; [self.signPayVC.navigationController pushViewController:paySuccessVC animated:YES] ; }else if([resultStatus isEqualToString:@"6001"]){ [XWPrompt showPromptMessage:@"用户取消支付"]; }else{ //支付成功,处理 [XWPrompt showPromptMessage:@"订单支付失败"]; } }]; } else { [XWPrompt showPromptMessage:@"订单支付失败"]; } }
5.配置支付宝客户端返回url处理方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包 if ([url.host isEqualToString:@"safepay"]) { [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】 NSLog(@"result = %@",resultDic); }]; } if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) { //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】 NSLog(@"result = %@",resultDic); }]; } return YES; }
基本上就这些了,如果不通,就看看有没有没有塞进去的包,依赖,路径,私钥公钥是否配对。
标签:
原文地址:http://www.cnblogs.com/yyzanll/p/4981070.html