学无止境上海恩美路演

关于第IOS三方支付(支付宝)问题

2016-08-25  本文已影响444人  sillen

关于第IOS三方支付(支付宝)问题

一:平台注册(快速集成):

1创建应用并获取APPID:

要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在管理中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能正常使用有权限调用的开放产品的接口能力。需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》

2配置密钥:

开发者调用接口前需要先生成RSA密钥 ,包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY),并进行密钥配置,把开发者公钥与支付宝交换获取支付宝公钥(ALIPAY_PUBLIC_KEY)

生成 RSA 密钥有两种方式:

(1)点击进入如下链接:MAC OSX:下载.  解压打开文件夹,直接运行“支付宝RAS密钥“SHAwithRSA1024_V1.0.command”(MACOSX),点击“生成RSA密钥”,会自动生成公私钥,然后点击“打开文件位置”,即可找到工具自动生成的密钥。

注意:工具不支持含中文或空格的路径,请下载到英文目录下使用。

(2)也可以使用OpenSSL工具命令生成.(在此OpenSSL不做介绍)

开发者登录开放平台后,找到并进入应用。

点击“RSA(SHA1)密钥”处的“设置开发者公钥”(如已设置则显示“查看开发者公钥”,可修改),将公钥文件去除头尾、换行和空格,仅需填入字符串。

密钥的格式如下:

例如转换前公钥pem文件格式:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

-----END PUBLIC KEY-----

转换后得到的字符串为:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

3获取支付宝公钥

应用上线后点击“查看支付宝公钥”,即可获取支付宝公钥,用于支付宝返回数据的验签。

对于支付宝公钥,看到的是一个字符串,如下:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB

如果需要使用文件方式(如使用服务端SDK的PHP/.NET版本)读取支付宝公钥,需要在头尾加入标示后保存至文件,文件内容如下:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB

-----END PUBLIC KEY-----

二.客户端 SDK 配置

1.启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。b包括如下两个文件:

(1).AlipaySDK.bundle

(2).AlipaySDK.framework

在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

2:在需要调用AlipaySDK的文件中,增加头文件引用。

#import

3:如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对应的info.list中添加如下配置(文中以XML格式描述)。

4:TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求。文档和Demo是为了示例效果在客户端实现。

//将商品信息赋予AlixPayOrder的成员变量

Order* order = [Ordernew];

// NOTE: app_id设置

order.app_id = appID;

// NOTE:支付接口名称

order.method = @"alipay.trade.app.pay";

// NOTE:参数编码格式

order.charset = @"utf-8";

// NOTE:当前时间点

NSDateFormatter* formatter = [NSDateFormatternew];

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

order.timestamp = [formatter stringFromDate:[NSDate date]];

// NOTE:支付版本

order.version = @"1.0";

// NOTE: sign_type设置

order.sign_type = @"RSA";

// NOTE:商品数据

order.biz_content = [BizContentnew];

order.biz_content.body = @"我是测试数据";

order.biz_content.subject = @"1";

order.biz_content.out_trade_no = [self generateTradeNO]; //订单ID(由商家自行制定)

order.biz_content.timeout_express = @"30m"; //超时时间设置

order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品价格

//将商品信息拼接成字符串

NSString *orderInfo = [order orderInfoEncoded:NO];

NSString *orderInfoEncoded = [order orderInfoEncoded:YES];

NSLog(@"orderSpec = %@",orderInfo);

// NOTE:获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;

//需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

id signer = CreateRSADataSigner(privateKey);

NSString *signedString = [signer signString:orderInfo];

// NOTE:如果加签成功,则继续执行支付

if(signedString != nil) {

//应用注册scheme,在AliSDKDemo-Info.plist定义URL types

NSString *appScheme = @"alisdkdemo";

// NOTE:将签名成功字符串格式化为订单字符串,请严格按照该格式

NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",

orderInfoEncoded, signedString];

// NOTE:调用支付结果开始支付

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

NSLog(@"reslut = %@",resultDic);

}];

}

5:配置支付宝客户端返回url处理方法。

(外部存在支付包钱包,支付宝钱包将处理结果通过url返回。)

如示例AliSDKDemo\APAppDelegate.m文件中,增加引用代码:

#import

在@implementation AppDelegate中以下代码中的NSLog改为实际业务处理代码:

- (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) {

NSLog(@"result = %@",resultDic);

}];

}

returnYES;

}

// NOTE: 9.0以后使用新API接口

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options

{

if([url.host isEqualToString:@"safepay"]) {

//跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

NSLog(@"result = %@",resultDic);

}];

}

returnYES;

}

<仅供参考,希望对想做支付的朋友有所帮助>

上一篇下一篇

猜你喜欢

热点阅读