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

支付宝官方图标.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 此项目已开源 赶快来围观 Start支持下吧 【客户端开源地址-JPay】【服务端端开源地址-在com.javen...
    LucasAdam阅读 1,941评论 0 3
  • 易效能亲子班40期二组 家长:李明飞 孩子:赵雁行 9岁 成就:坚持打卡28天 孩子的目标:早睡早起,坚持运动。 ...
    李明飞_ad9c阅读 235评论 0 1
  • 露晨薄雾 柳丝依依 斜风细雨 淅淅沥沥 我的心湖也泛起了涟漪 两条清清的小溪 顺着脸颊流淌入泥 潮湿的往事 如一枚...
    蕙兰漱雪阅读 123评论 0 0