美文网首页学无止境上海恩美路演
关于第IOS三方支付(支付宝)问题

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

作者: sillen | 来源:发表于2016-08-25 15:02 被阅读444次

    关于第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;

    }

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

    相关文章

      网友评论

        本文标题:关于第IOS三方支付(支付宝)问题

        本文链接:https://www.haomeiwen.com/subject/lpkasttx.html