美文网首页IOS开发
【Swift3.0】+ 支付宝支付集成

【Swift3.0】+ 支付宝支付集成

作者: 晴天mk1992 | 来源:发表于2017-07-03 17:30 被阅读1770次
支付宝官方图标.png

1、申请开放平台账号,并添加应用

https://docs.open.alipay.com/200/105310#s2

支付宝应用添加.png

2、开通支付功能

开通支付功能.png

3、配置支付宝的公钥

配置支付宝公钥.png

注:配置支付宝公钥后,服务端需提供接口给APP端签名
官网签名demo:https://docs.open.alipay.com/54/106370/

4、开始APP集成

1)导入需要的依赖包

a. 从地址:https://docs.open.alipay.com/54/104509 下载官网Demo,将项目下
AlipaySDK.bundle
AlipaySDK.framework
两个包导入工程
b. 在Build Phases的Link Binary With Libraries中,添加iOS依赖包

iOS依赖包.png

2)创建桥接文件导入支付宝的SDK

#import <AlipaySDK/AlipaySDK.h>

3)创建支付结果处理类AliSdkManager

PaymentType.ALIPAY  支付方式
PaymentResult  自定义支付结果

import UIKit
public class AliSdkManager: NSObject {
    public static var aliSdkManager:AliSdkManager!
    internal var orderPayController:OrderPayController!
    
    public static func sharedManager () -> AliSdkManager{
        AliSdkManager.aliSdkManager = AliSdkManager.init()
        return AliSdkManager.aliSdkManager
    }
    internal func showResult(result:NSDictionary){
//        9000  订单支付成功
//        8000  正在处理中
//        4000  订单支付失败
//        6001  用户中途取消
//        6002  网络连接出错
        let returnCode:String = result["resultStatus"] as! String
        var returnMsg:String = result["memo"] as! String
        var subResultMsg:String = ""
        switch  returnCode{
        case "6001":
            break
        case "8000":
            orderPayController.paySuccess(PaymentType.ALIPAY, payResult: PaymentResult.PROCESS)
            break
        case "4000":
            orderPayController.paySuccess(PaymentType.ALIPAY, payResult: PaymentResult.FAIL)
            break
        case "9000":
            returnMsg = "支付成功"
            //支付返回信息:外系统订单号、内部系统订单号等信息
            JSON.init(parseJSON: (result["result"] as! String))["alipay_trade_app_pay_response"]["sub_msg"].stringValue
            orderPayController.paySuccess(PaymentType.ALIPAY, payResult: PaymentResult.SUCCESS)
            break
        default:
            break
        }
    }
}

4)创建支付工具类AliPayUtils,用于调起支付

import UIKit
public class AliPayUtils: NSObject {
    var context:UIViewController;

    public init(context:UIViewController) {
        self.context = context;
    }
    
    public func pay(sign:String){
        let decodedData = sign.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
        let decodedString:String = (NSString(data: decodedData, encoding: String.Encoding.utf8.rawValue))! as String
 
        AlipaySDK.defaultService().payOrder(decodedString, fromScheme: "com.xmars.porsche.m2m", callback: { (resp) in
            print(resp)
        } )  
    }
}

5)在AppDelegate.swift的方法:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
添加代码:

//初始化支付管理类
 AliSdkManager.sharedManager()

6)在AppDelegate.swift文件中重写方法

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.host == "safepay" {
            AlipaySDK.defaultService().processOrder(withPaymentResult: url as URL!, standbyCallback: {
                (resultDic) -> Void in
                  //调起支付结果处理
                AliSdkManager.aliSdkManager.showResult(result: resultDic! as NSDictionary);
            })
        }
        return true;
    }

7)点击工程文件中Info

8BB46E76-4F65-4E09-B3B9-4C0AFF54752F.png

此处的Url Schemes 需要和AliPayUtils中支付方法的fromScheme一样的,否则可能回调失败

 AlipaySDK.defaultService().payOrder(decodedString, fromScheme: "com.xmars.porsche.m2m", callback: { (resp) in
            print(resp)
        } )  

8)页面调起支付

注:此处所有数据为测试数据

alipayUtils = AliPayUtils.init(context: self);
AliSdkManager.aliSdkManager.orderPayController = self
alipayUtils.pay(sign: "app_id=20177383904816397&method=alipay.trade.app.pay&charset=utf-8&sign_type=RSA2&timestamp=2017-06-30 14:59:58&version=1.0&format=json&notify_url=http://ceshidizhi.com:8080/store-manage/payment/callback/notifyAlipayApp.ihtml&biz_content={\"total_amount\":\"0.01\",\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"subject\":\"测试商品1\",\"out_trade_no\":\"10120170630123671234537281\"}&sign=df15Q+AQ3lZLlF95wNdXKRpc35nmpDeEL8XrlIlTbfTQE39Z+RTRrOlSxuBtAqZpCzZy0ulxlkI64Y85PFiU9E6x+vnaimFTMuVNUYqasfdsaNaH3+85dhTk5u0SxV5n/fOrklx+B1SzADl4218/lhjz4bNnMqE6lXiJAFdfasdsafdsafasfdsqZDFjmJxmnjI9nfH74lEP+yF4X68uRsdUFrXaEt2CciyL2RVNj5ZJcJ7njjwtAcgdcHblA6j6qHqFRnrvdxV5i5VGQn1SHwpvMEAdsadsa1mBl7kDlCpWh/M1chCNdB79e3B1O8KsX7Iaz8g2snBr/y/wHU7YHfsnuLw==}")

支付宝集成差不多就这样啦!!!

备注: 文中OrderPayController 为自定义的支付页面,
支付宝版本为2017-06-10

相关文章

  • iOS Alipay -支付宝

    iOS 集成Alipay -支付宝支付 集成 AliPay - 支付宝

  • 支付宝支付流程(I)

    参考资料:支付宝支付集成支付宝支付集成实现蚂蚁金服iOS支付集成

  • iOS支付宝功能集成

    iOS快速集成支付宝详解/支付宝集成获取私钥与公钥 在集成支付宝功能前,我们必须了解下什么支付宝流程,下图是支付宝...

  • ## [iOS 支付宝支付]

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

  • Android:支付宝支付封装

    集成支付宝APP支付 直接按照官方文档逐步集成官方文档:支付宝APP支付官方文档 Android客户端封装支付宝支...

  • 【Swift3.0】+ 支付宝支付集成

    1、申请开放平台账号,并添加应用 https://docs.open.alipay.com/200/105310#...

  • 支付宝 ’openssl/asn1.h' file no

    起因 项目需要集成支付宝,下载了支付宝demo(地址点击这里)然后开启搬砖。按照支付宝的集成说明开始集成。文档地址...

  • 支付宝支付

    支付宝集成的介绍 第三方支付平台,支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们自己的账户。 集成支付宝的步...

  • iOS APP集成微信支付&&支付宝支付

    相对来讲不是很难,两个sdk集成都只需要四个步骤就搞定了! 一、集成支付宝支付 支付宝支付集成官方教程支付宝官方D...

  • ios支付宝签名

    支付宝: iOS 支付功能概述 - 简书 1.iOS集成支付宝 - 简书 2.iOS 集成支付宝 - 简书 3.i...

网友评论

  • 三少爷_贱:问个问题:swift调用微信支付,在支付完成之后,点击返回商家,在点击返回商家之后,我发现,他不是直接返回到我的应用中,而是重新启动了一次我的应用,这是为啥????
    萧旭:或者打开的你的线上APP
    萧旭:兄弟,你重新打开的你的测试App吧
  • 许久__:OrderPayController发我份吗?
  • 夜生物:OrderPayController哪里来的?
    晴天mk1992:@夜生物 自己封装的,你可以忽略的
  • 4d486c268af8:能请教个问题吗?CoreKit 的地方报错,
    王不饿呀:@晴天mk1992 no such module "corekit"楼主大大是这个

    王不饿呀:我的也报错了,你解决了吗
    晴天mk1992:@I静_871e 报什么错呢

本文标题:【Swift3.0】+ 支付宝支付集成

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