iOS支付宝支付总结
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 -nocryptJava开发者需要将私钥转换成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 = @"";
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:@""]) {
//成功
[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:@""]){
[XWPrompt showPromptMessage:@"用户取消支付"];
}else{
//支付成功,处理
[XWPrompt showPromptMessage:@"订单支付失败"];
} }];
} else {
[XWPrompt showPromptMessage:@"订单支付失败"];
} }
// 生成signedString
- (NSString *)genSignedString:(NSString *)orderSpec withKey:(NSString *)key {
// 获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循 RSA 签名规范, 并将签名字符串 base64 编码和 UrlEncode
id<DataSigner> signer = CreateRSADataSigner(key);
return [signer signString:orderSpec];
}
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;
}
基本上就这些了,如果不通,就看看有没有没有塞进去的包,依赖,路径,私钥公钥是否配对。
iOS支付宝支付总结的更多相关文章
- iOS支付宝支付集成
概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...
- iOS 支付宝支付集成获取私钥
http://doc.open.alipay.com/doc2/apiList?docType=4 登录到支付宝开放平台,下载相关支付宝支付的demo.解压出来有3个文件夹.(服务端demo,客户端 ...
- iOS 支付宝支付
在开发过程中,经常需要接入第三方支付.下面对支付进行一个概括. 支付宝支付 支付宝SDK下载地址:https://doc.open.alipay.com/doc2/detail?treeId=54&a ...
- iOS支付宝支付相关问题
支付宝实现以及相关问题:http://www.jianshu.com/p/f81578954974 1.支付宝支付流程 1.用户点击支付2.客户端请求服务器用户支付3.服务器接收请求生成金额订单等要给 ...
- ios 支付宝支付集成
支付宝支付: 下载官方demo,把需要的framwork下载下来,在自己的工程中,新建文件夹,然后全部塞进去,到build phases中把需要的全部导入,其中xcode7以上需要多导入两个.a文件, ...
- IOS支付宝支付出现6002问题的解决办法
运行支付宝官方demo进行支付测试,会出现6002-网络连接错误,是因为以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断 ...
- iOS开发支付宝支付
iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析 浏览: 149 发布日期: 2016-10-19 分类: ios 最近在项目中接入了微信支付和支付宝支付,总的来说没有那么 ...
- iOS app集成支付宝支付流程及后台php订单签名处理
iOS app集成支付宝支付流程 1: 开通支付宝商户 由公司去支付宝 https://b.alipay.com/order/serviceIndex.htm 签约支付宝开通支付宝商家: 2:商户支付 ...
- iOS - AliPay 支付宝支付
1.支付宝支付申请 支付宝支付官方签约集成指引 支付宝APP支付官方集成指引 蚂蚁金服开放平台 1.1 支付宝 APP 支付申请步骤 APP 支付:APP 支付是商户通过在移动端应用 APP 中集成开 ...
随机推荐
- css之IE透明度
原文链接:http://caibaojian.com/rgba-filter.html .bg{ /*Filter for IE8 */ -ms-filter: "progid:DXImag ...
- weiphp踩坑记录
记录使用weiphp过程中遇到的问题及解决办法: 1.按照网上的教程创建插件怎么没有效果?replyText没有回复信息? 后台清除缓存即可!
- bzoj 4320: ShangHai2006 Homework
4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...
- CentOS 7.0安装配置Vsftp服务器
一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- jdk 安装 环境变量配置
右键选择 计算机→属性→高级系统设置→高级→环境变量 1.系统变量→新建 变量名:JAVA_HOME 变量值:(变量值填写你的jdk的安装目录,例如本人是 C:\Program Files\Java\ ...
- Java中FilterInputStream和FilterOutputStream的用法
FilterInputStream FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStre ...
- JS 循环给li绑定参数不同的点击事
以下内容纯属个人理解,不正确的地方还请大神留言,不胜感激! 源代码:(按个人方式选用一种即可) <ul> <li>1</li> <li>2</li ...
- Node.js之路【第二篇】Nodejs中的pip(NPM)&REPL
什么是NPM 在学Python的时候我们肯定会使用第三方模块或者编写模块供别人使用,我们有一个非常好用的pip来帮我们管理我们的模块包!那么Nodejs重的模块包呢? 对没错就是NPM,他是随同Nod ...
- mysql 主从单库单表同步 binlog-do-db replicate-do-db
方案一:两边做主从. SELECT SUM(DATA_LENGTH)+SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHE ...
- sql 脚本编写之路 常用语句(一)
1.用一个表中的某一列更新另外一个表的某些列: for ACCESS 数据库: update a, b set a.name=b.name1 where a.id=b.id for SQL Serve ...