支付宝快捷支付

最近在做支付宝快捷支付,整整鼓捣了一个星期,流程:Alipay SDK导入到项目中,手机上装有支付宝钱包跳转到支付宝钱包进行支付,否则直接采用H5页面进行支付。

详细就不多说了,支付宝提供的文档蛮详细,现在把步骤以及常见问题,分享一下。

一、导入SDK 就是将

WS_MOBILE_PAY_SDK_BASE.zip 压缩包进行解压缩,把其中的

AlipaySDK.bundle
       
       
AlipaySDK.framework

把这两个文件放到一个文件夹里比如"Alipay",之后将Alipay 文件夹导入到项目文件中,文档说需要配置Head search 但是我这边没有配置也可以调用成功,因此就没有配置了,若需要配置如下操作即可
           
           

Build Settings -->Header Search Paths-->$(SRCROOT)/(AlipaySDK.bundle 文件路径)

AlipaySDK.framework 

SystemConfiguration.framework 

项目中需要有以上两个.framework,没有就直接加入

Build Phases -->Link Binary with Librarles -->点击下面的"+"即可加入。

在需要用到支付的界面比如:payViewController.m

导入头文件#import <AlipaySDK/AlipaySDK.h> 

支付demo

UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];

    firstWindow.hidden = NO;

    [[AlipaySDK defaultService] payOrder:orderSignString

                              fromScheme:@"hkjjjjjj"

                                callback:^(NSDictionary *resultDic) {

                                    firstWindow.hidden = YES;

                                    NSString *resultStatus = [NSString toNotNullString:[resultDic objectForKey:@"resultStatus"]];

                                    if (resultStatus.integerValue == 9000) {

                                        [self alipaySuccessCallBack];

                                    }

                                    else {

                                        [UIAlertView showWithMessage:[NSString toNotNullString:[resultDic objectForKey:@"memo"]]];

                                    }

                                }];

其中OrderSignString 是由服务端进行拼接,其中注意拼接格式key=”value“&key=”value

fromScheme 按照支付宝文档来设置即可

样例支付宝提供:

partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测 试 "&body="测 试 测 试"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA" 

一定严格按照该格式来,最好和样例一模一样,除开自己的partner seller_id等赋值自己商户的参数,

我这边遇到的问题,刚开始是一直启动不了支付宝钱包客户端/H5页面,报错”系统繁忙请稍后重试,ALI64“,支付宝技术支持说是我这边发过去的

orderString 验证不通过,因为商户首先生成私钥--->转换为PKCS8格式,随后生成公钥此时公钥需要去头去尾,作一行上传到支付宝平台上,注意此处上传,用签约帐号登录支付宝平台-->签约管理-->我的签约管理--->查看PID|KEY输入支付密码,进入到一堆的密钥管理--->其中有合作伙伴密钥管理、开放平台密钥管理、无线WAP密钥管理,之前将公钥上传到开放平台某个应用里,因此导致验证不通过,解决办法当然是将公钥重新上传一遍,注意是上传到”合作伙伴密钥管理-->RSA加密:查看密钥“,此处上传即可。

好的这下技术支持说我们有上传记录,再去试着测试偶尔能调用SDK 但是还是时不时报错ALI64,支付宝技术支持说需要把RSA签名好的sign再进行UrlEncode

编码,OK每次点击都会跳转到支付宝钱包,但是启动不了H5页面,有微妙的变化,我们起初设置状态栏为白色,现在变成了黑色,说明还是有唤起H5页面,但是被遮住了,最后将Appdelegate.m中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方法中的一句demo影响的:

  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

将该句注释掉就ok了,但是明显不能改这里,支付宝提供的demo是用nib文件初始化因此不存在这个问题,所以就在调用API: [[AlipaySDK defaultService] payOrder
之前进行

UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];

    firstWindow.hidden = NO;

然后在回调代码块中

firstWindow.hidden = YES;

这样就都OK了,算是完成了,还有需要注意的就是调用支付宝钱包客户端时候,回调需要在Appdelegate 中处理回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    

    //如果极简 SDK不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK

    DLog(@"url = %@",url);

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

        

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

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

        NSLog(@"result = %@",[resultDic objectForKey:@"result"]);

        NSString *resultStatus = [NSString toNotNullString:[resultDic objectForKey:@"resultStatus"]];

        

        if (resultStatus.integerValue == 9000) {

            [[NSNotificationCenter defaultCenter] postNotificationName:N_ALIPAYSUCCESS object:nil];

        }

        else {

            [UIAlertView showWithMessage:[NSString toNotNullString:[resultDic objectForKey:@"memo"]]];

        }

    }];

  }

    return YES;

}

好吧,啰嗦半天希望对大家有作用。
重点就是:密钥要正确。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值