美文网首页Swift编程
Swift支付宝支付

Swift支付宝支付

作者: 贝尔特伦 | 来源:发表于2017-01-20 10:02 被阅读407次

支付的签名,私钥等什么的,都是放到后台的,这里为了测试,放到客户端。

一:支付宝最新SDK经过本人测试,最新的SDK没有什么问题,但是它的提供的签名方式,不能够支付,会一直报错,所以这里要使用老版本的签名方式。

其实很简单,改写新版本sdk的order的类,把老版本的代码复制进去。源代码不用动。在支付的时候,还是使用老的签名方式。

二:目前的SDK没有纯Swift版本的,所以还是OC的SDK,这里需要在桥接头文件中引入相关头文件。

//支付宝头文件
#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"

三:客户端签名支付过程

    //商户ID
    let appID = "";
  //收款账号 
    let seller_id = "";
    //私钥
    let privateKey = "";
    if appID.endIndex == appID.startIndex || seller_id.endIndex == seller_id.startIndex || privateKey.endIndex == privateKey.startIndex{
        self.showAlerController(title: "支付宝信息缺少", message: "请填写完整");
        return;
    }
    
    //生成订单信息及签名
    let order = Order.init();
    order.partner = appID;
    order.seller = seller_id;
    //订单ID
    order.tradeNO = "110120130140";
    //订单名
    order.productName = "花花大美女";
    //描述
    order.productDescription = "这是一个测试数据,这是一个测试数据";
    //价格
    order.amount = String.init(format: "%.2f", 0.01);
    //回调地址
    order.notifyURL = "http://www.baidu.com";
    //下面的固定
    order.service = "mobile.securitypay.pay";
    order.paymentType = "1";
    order.inputCharset = "utf-8";
    order.itBPay = "30m";
    order.showUrl = "m.alipay.com";
    //这个也要唯一,是支付宝支付成功后吊起自己App的关键,在info里要配置相应的URL Schemes和其一致
    let appScheme = "YBWisdom";
    
    //商品信息拼接字符串
    let orderSpec = order.description;
    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    let singer = CreateRSADataSigner(privateKey);
    let signedString = singer?.sign(orderSpec);
    //将签名成功字符串格式化为订单字符串,严格按照格式
    var orderString = "";
    if signedString?.endIndex != signedString?.startIndex {
        
        orderString = String.init(format: "%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec,signedString!,"RSA");
        AlipaySDK.defaultService().payOrder(orderString, fromScheme: appScheme, callback: { (resultDic) in
           
            
            
        });
        
    }

以上签名过程只适合测试。

后台签名支付实例

订单的信息,和签名都是由后台返回回来,订单ID要唯一。这里以OC为例,因为Swift版本的,没有写。

- (void)zfbPayWithdic:(NSDictionary *)dic{
NSString *signedString = [dic objectForKey:@"sign"];
NSString *orderString=[dic objectForKey:@"orderInfo"];
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
               orderString, signedString, @"RSA"];
NSString *appScheme=@"YBWisdom";
[[AlipaySDK defaultService]payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
    
    if([[resultDic objectForKey:@"resultStatus"] integerValue] == 9000){
        
        [self showAlertControllerWithTitle:@"充值成功" message:nil];
        [self.navigationController popViewControllerAnimated:YES];
    }else{
        UIAlertController *alert = [ToolBox showAlertControllerWithInfo:@"支付失败,请稍后重试"];
        [self presentViewController:alert animated:YES completion:nil];
    }
}];

}

四:支付方式的细分(与老版本比较)

在支付宝新版本的SDK中,把web支付页面和手机客户端支付,两种方式区分开来。
老版本中:

       AlipaySDK.defaultService().payOrder(orderString, fromScheme: appScheme, callback: { (resultDic) in
           
            
            
        });

无论是web端还是客户端都是这一个方法,但是在新版本中,这个方法只是web的支付方式。而客户端的支付则换换成了下面这个方法。

- (void)processOrderWithPaymentResult:(NSURL *)resultUrl
                  standbyCallback:(CompletionBlock)completionBlock

所以要在appdelegate里面配置客户端的支付

配置客户端支付

在APPDelegate里面

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if url.host == "safepay"{
     
        AlipaySDK.defaultService().processAuthResult(url, standbyCallback: { (resultDic) in
            
            
        });
        
        return true;
    }
    return false;
}

如果resultDic中的result字段为9000则是支付成功,开发者根据result字段来做相应处理。

五:支付流程

这里主要是讲支付的逻辑了,其实支付宝文档里,也提到过,但是很多人,没有去看,或者说懒得去看。来让我给你们画个流程图把。

支付流程.png

我希望大家能仔细看看这个流程图,因为我遇到很多,不知道支付流程的,后台也不知道如果去写。一切都在图里,我就不啰嗦了。
如有纰漏,敬请指出,不胜感激,谢谢。

相关文章

  • iOS集成支付宝-Swift版

    iOS集成支付宝-Swift版 如果要了解整个支付流程可以阅读文章《手机App集成微信支付&支付宝-iOS&And...

  • iOS&Android集成支付宝-server篇(PHP

    iOS&Android集成支付宝-server篇(PHP) 在上一篇文章《iOS集成支付宝-Swift版》中,我介...

  • 支付宝支付接入(Android/IOS(swift)/Java后

    本文章仅作为个人笔记 接入方式可以参考支付宝登录接入 IOS端(swift):主要接入和代码可参考支付宝登录接入 ...

  • Swift支付宝支付

    支付的签名,私钥等什么的,都是放到后台的,这里为了测试,放到客户端。 一:支付宝最新SDK经过本人测试,最新的SD...

  • swift 支付宝支付

    1.添加框架 2.确保有框架在里面 3在桥接文件中添加 头文件 4, import UIKitpublic cla...

  • swift - 支付宝

    一、(可参照)最新版支付宝支付流程: 未集成过支付宝的朋友(前后台均可)参考此流程进行orderString的制作...

  • Swift 支付宝支付相关

    具体的接入方法不说了,看支付宝开发文档吧,我这里要说的是接入成功后如何去调用支付方法以及需要注意的一些事项。 首先...

  • Swift 内嵌H5跳转微信、支付宝支付问题

    需求:swift WKWebView展示H5页面,在H5上点击按钮进行跳转微信app,支付宝app进行支付,支付完...

  • Android支付宝支付集成

    Android支付宝支付 标签: android Android支付宝支付使用的流程介绍 支付宝流程介绍 支付宝流...

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

网友评论

    本文标题:Swift支付宝支付

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