支付宝支付
来源:互联网 发布:wemall java版 编辑:程序博客网 时间:2024/06/10 05:54
支付宝支付
1.导入SDK
支付宝开放平台地址为:https://openhome.alipay.com/platform/home.htm;下载(SDK&DEMO下载)SDK,将AlipaySDK.bundle和AlipaySDK.framework导入工程。
将官方demo中Util和openssl文件夹以及libcrypto.a和libssl.a一块导入到自己的工程,这些事客户端签名时使用
2.添加配置
2.1 添加依赖库
2.2 修改路径
在Build setting下的search path下修改header search path,增加
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include 和
$(SDK_DIR)/usr/include/libxml2、$(PROJECT_DIR)/xxxxx/AliSDK/openssl、$(PROJECT_DIR)/xxxxx/AliSDK。
在Framework search path和library search path下增加 $(PROJECT_DIR)/xxxxx/AliSDK
2.3 增加pch文件
增加一个预编译头文件,导入
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//商户的唯一的parnter和seller。
//签约后,支付宝会为每个商户分配一个唯一的 parnter和 seller。
#define PARTNER @"2088611922925773"
#define SELLER @"esok@esok.cn"
#define PRIVATEKEY @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANfEOGuHDyStqzetu37gO0Lxy9ucCVpT3t7oao/oYHyeQIhI4sxu7dnTbSdsR3DKglHg+9sNbIvubxxeLPvfjrF/Lvky0sYIGBRYyQXQb+kwOq0dwqHGvqN4FP1EwI69CfQP/a2J/z4D0stF/htv4B24dxag7mxZIKLJJvwstUbnAgMBAAECgYEAtVsDhTXPP6gNqs4HM3xrszgjfiIoJlkqkjfOIclTGEu3uBVzNBvlJdq0+5bicWZ1pTay2ors+qzdjX2G1+ovN2x9ZIZyVDL0P1CqgzwEu7hCIC5I/hlcMIux+h0U93stRxeimdCcbj2hCfzewE77hP4GQ6F4llzgDtvm9X41CYkCQQDy+63bcv7huWydUOuN7ObhOTAjoAe5SxJL89UkFkMGwJYqUm2cRNAkaJ3OPBBBXEeDpBjh323L6g0pUnM6q32lAkEA41NJY+GAXVUAWnAKNJHfXEi3XopnStsPRRL6gRCqTcceWEicq6CtyHEIxJuldiG0AP2u+Fh5faWx4phXKFEkmwJAFdGt2f/ojWJ2M2Y50MPOM7lL7lcHeocYPIPHxvbMzAVtNp2yRA8V1b8jNIrGNuhPb63DojzLAj2hMu25dTJDFQJAFi24CVCk73YtlKU9uadJvX0ytryWG02IDdsuKY1wsCnvIfnjnzMMAXRVwKjW2dGr+DTH717ia4nQ8ySdzEcuZQJAf1aGvpNuRP9Sf043ymPbhBVEb2bji6ltOr9R1VpCuaojP/EAYEAanzHLvcG+kc0QAk57+7hWp3smNQu+aYt1oQ=="
并修改build setting下配置pch文件的路径
2.4 设置应用Scheme
在info.plist中增加自己app的scheme,以便支付宝客户端能够将支付结果返回,在URL type下点击+,添加一个新的scheme,schem名字要唯一,如果和移动端其他应用scheme重名,结果不可预测
3.iOS9适配
如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对应的info.list中添加如下配置(文中以XML格式描述)。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>alipay.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>alipayobjects.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
也可以做如下配置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
4.支付宝支付流程
5.编码
在需要调用AlipaySDK的文件中,增加头文件引用。
#import <AlipaySDK/AlipaySDK.h>
5.1 生成订单信息
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.productName = product.subject; //商品标题
order.productDescription = product.body; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商
品价格
order.notifyURL = @"http://www.xxx.com"; //回调URL
order.service = @"mobile.securitypay.pay";
order.paymentType = @“1”;//1 支付
order.inputCharset = @"utf-8";
order.itBPay = @"30m”;//订单超时时间,s代表秒,m代表分钟,h代表小时
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
5.2 调用支付宝客户端
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循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"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
//【callback处理支付结果】
NSLog(@"reslut = %@",resultDic);
//支付成功
if ([info[@"resultStatus"] isEqualToString:@"9000"]) {
//处理
NSLog(@"%@",info[@"resultStatus"]);
} else if([info[@"resultStatus"] isEqualToString:@"4000”]){//支付失败
//
NSLog(@"%@",info[@"resultStatus"]);
}
else if([info[@"resultStatus"] isEqualToString:@“6001”]){//用户取消支付
NSLog(@"%@",info[@"resultStatus"]);
}
}];
5. 3 配置支付宝客户端返回url处理方法。
在appDelegate中增加引用
#import <AlipaySDK/AlipaySDK.h>
在@implementation AppDelegate中增加如下代码:
- (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);
}];
}
return YES;
}
- app支付--支付宝支付
- 支付宝支付--手机支付
- 支付-支付宝APP支付
- 支付--支付宝APP支付
- 支付宝 支付认识
- iOS 支付宝支付
- ios 支付宝支付
- android支付宝支付
- Android 支付宝【支付】
- 支付宝支付流程
- 支付宝快捷支付
- 支付宝支付
- 支付宝支付
- 支付宝-移动支付
- iOS 支付宝支付
- android 支付宝支付
- IOS支付宝支付
- 支付宝支付写法
- 煤矿工人成为互联网工程师的故事
- alloc init new的区别
- leetcode 37. Sudoku Solver
- 今天给大家讲个故事
- 近期学习内容顺序
- 支付宝支付
- Mac系统下,Hadoop 2.6.2 + Mahout 0.12.1 完全分布式配置
- webview自适应高度
- 二叉树及其应用--二叉树特征值与销毁
- junit
- Android开发之如何保证Service不被杀掉
- mysql的约束
- 线性表-多项式加法(数据结构基础 第2周)
- Activity生命周期详解